summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pikul.c20
-rw-r--r--pikul.h1
2 files changed, 21 insertions, 0 deletions
diff --git a/pikul.c b/pikul.c
index b40ee17..93bc664 100644
--- a/pikul.c
+++ b/pikul.c
@@ -225,6 +225,26 @@ struct pikul_place **pikul_destinations(enum pikul_company company)
return (struct pikul_place **)shipping->data;
}
+static inline void free_place(struct pikul_place *place)
+{
+ if (place->province)
+ free(place->province);
+ if (place->city)
+ free(place->city);
+ if (place->district)
+ free(place->district);
+ free(place->code);
+ free(place);
+}
+
+void pikul_free_places(struct pikul_place **places)
+{
+ size_t i = 0;
+ while (places[i])
+ free_place(places[i++]);
+ free(places);
+}
+
struct pikul_service **pikul_services(enum pikul_company company,
const char *origin, const char *destination, double weight)
{
diff --git a/pikul.h b/pikul.h
index 9b60181..4802547 100644
--- a/pikul.h
+++ b/pikul.h
@@ -29,6 +29,7 @@ extern "C" {
void pikul_init(enum pikul_company company, char *provisions[]);
struct pikul_place **pikul_origins(enum pikul_company company);
struct pikul_place **pikul_destinations(enum pikul_company company);
+void pikul_free_places(struct pikul_place **places);
struct pikul_service **pikul_services(enum pikul_company company,
const char *origin, const char *destination, double weight);
void pikul_free_services(struct pikul_service **services);