diff options
author | ꦌ ꦫꦶ ꦏ꧀ꦦꦿ ꦧ ꦮ ꦑ ꦩ ꦭ꧀ <erik@darapsa.co.id> | 2019-10-05 18:06:14 +0800 |
---|---|---|
committer | ꦌ ꦫꦶ ꦏ꧀ꦦꦿ ꦧ ꦮ ꦑ ꦩ ꦭ꧀ <erik@darapsa.co.id> | 2019-10-05 18:06:14 +0800 |
commit | 89b7bef4c433bb42588eeec6e6f0d3d1c2a19b78 (patch) | |
tree | 06e1c4e8373ea09bf683f21b277329279ae292bd | |
parent | c5660800d60921392b66703b30dfc72d5f42d351 (diff) |
Separate the product structure definition
so the catalog structure doesn't have to be included when not needed.
product.c has too few implementations, so it's merged to client.c
-rw-r--r-- | Makefile.am | 6 | ||||
-rw-r--r-- | client.c | 22 | ||||
-rw-r--r-- | icclient/catalog.h | 9 | ||||
-rw-r--r-- | icclient/client.h | 3 | ||||
-rw-r--r-- | icclient/product.h | 20 | ||||
-rw-r--r-- | product.c | 19 |
6 files changed, 41 insertions, 38 deletions
diff --git a/Makefile.am b/Makefile.am index 35121d3..2240f39 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,15 +1,15 @@ noinst_LIBRARIES = libicclient.a libicclient_a_SOURCES = \ - icclient/request.h \ - icclient/login.h \ icclient/product.h \ + icclient/catalog.h \ icclient/ord.h \ icclient/member.h \ icclient/admin.h \ icclient/client.h \ + request.h \ request.c \ + login.h \ login.c \ - product.c \ member.c \ admin.c \ client.c @@ -2,6 +2,7 @@ #include <stdlib.h> #include "login.h" #include "icclient/product.h" +#include "icclient/catalog.h" #include "icclient/client.h" typedef struct icclient_catalog icclient_catalog; @@ -65,6 +66,27 @@ void icclient_page(const char *path, size_t (*handler)(void *, size_t, size_t request(handler, (void *)dataptr, NULL, "%s", path); } +void icclient_freeproduct(struct icclient_product *product) +{ + if (product->image) + free(product->image); + if (product->comment) + free(product->comment); + if (product->description) + free(product->description); + free(product->sku); + free(product); + product = NULL; +} + +void icclient_freecatalog(icclient_catalog *catalog) +{ + for (size_t i = 0; i < catalog->length; i++) + icclient_freeproduct(catalog->products[i]); + free(catalog); + catalog = NULL; +} + void icclient_cleanup() { if (curl) { diff --git a/icclient/catalog.h b/icclient/catalog.h new file mode 100644 index 0000000..b38434b --- /dev/null +++ b/icclient/catalog.h @@ -0,0 +1,9 @@ +#ifndef ICCLIENT_CATALOG_H +#define ICCLIENT_CATALOG_H + +struct icclient_catalog { + size_t length; + struct icclient_product *products[]; +}; + +#endif // ICCLIENT_CATALOG_H diff --git a/icclient/client.h b/icclient/client.h index 053eee5..e49af36 100644 --- a/icclient/client.h +++ b/icclient/client.h @@ -1,6 +1,7 @@ #ifndef ICCLIENT_CLIENT_H #define ICCLIENT_CLIENT_H +struct icclient_product; struct icclient_catalog; #ifdef __cplusplus @@ -22,6 +23,8 @@ extern "C" { , size_t (*handler)(void *contents, size_t size , size_t nmemb, void *userdata) , void **dataptr); + void icclient_freeproduct(struct icclient_product *product); + void icclient_freecatalog(struct icclient_catalog *catalog); void icclient_cleanup(); #ifdef __cplusplus diff --git a/icclient/product.h b/icclient/product.h index 0b0e509..4e879e0 100644 --- a/icclient/product.h +++ b/icclient/product.h @@ -2,23 +2,11 @@ #define ICCLIENT_PRODUCT_H struct icclient_product { - char *sku, *description, *comment, *image; + char *sku; + char *description; + char *comment; + char *image; double price; }; -struct icclient_catalog { - size_t length; - struct icclient_product *products[]; -}; - -#ifdef __cplusplus -extern "C" { -#endif - - void icclient_catalog_free(struct icclient_catalog *catalog); - -#ifdef __cplusplus -} -#endif - #endif // ICCLIENT_PRODUCT_H diff --git a/product.c b/product.c deleted file mode 100644 index 33286cd..0000000 --- a/product.c +++ /dev/null @@ -1,19 +0,0 @@ -#include <stdlib.h> -#include "icclient/product.h" - -void icclient_catalog_free(struct icclient_catalog *catalog) -{ - for (size_t i = 0; i < catalog->length; i++) { - struct icclient_product *product = catalog->products[i]; - if (product->image) - free(product->image); - if (product->comment) - free(product->comment); - if (product->description) - free(product->description); - free(product->sku); - free(product); - } - free(catalog); - catalog = NULL; -} |