aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libmbpk.c91
1 files changed, 89 insertions, 2 deletions
diff --git a/src/libmbpk.c b/src/libmbpk.c
index e0a377d..fe13bd5 100644
--- a/src/libmbpk.c
+++ b/src/libmbpk.c
@@ -35,6 +35,78 @@ static char* strdup(const char *s) {
return p;
}
+static char **split_string(const char *str) {
+ char *str_copy;
+ char *token;
+ char **result;
+ int count;
+ int i;
+
+ count = 0;
+
+ if (!str || !*str) {
+ return NULL;
+ }
+
+ str_copy = strdup(str);
+ if (!str_copy) {
+ return NULL;
+ }
+
+ token = strtok(str_copy, " ");
+ while (token) {
+ count++;
+ token = strtok(NULL, " ");
+ }
+ free(str_copy);
+
+ if (count == 0) {
+ return NULL;
+ }
+
+ result = malloc((unsigned long)(count + 1) * sizeof(char*));
+ if (!result) {
+ return NULL;
+ }
+
+ str_copy = strdup(str);
+ if (!str_copy) {
+ free(result);
+ return NULL;
+ }
+
+ token = strtok(str_copy, " ");
+ i = 0;
+ while (token) {
+ result[i] = strdup(token);
+ if (!result[i]) {
+ while (i > 0) {
+ free((void*)result[--i]);
+ }
+ free(result);
+ free(str_copy);
+ return NULL;
+ }
+ i++;
+ token = strtok(NULL, " ");
+ }
+ result[count] = NULL;
+ free(str_copy);
+ return result;
+}
+
+static void free_split_array(char **arr) {
+ int i;
+ if (!arr) {
+ return;
+ }
+
+ for (i = 0; arr[i] != NULL; i++) {
+ free((void*)arr[i]);
+ }
+ free(arr);
+}
+
static size_t curl_memory_write_calback(void *contents, size_t size, size_t nmemb, void *userp) {
size_t realsize = size * nmemb;
struct curl_memory *mem = (struct curl_memory*)userp;
@@ -108,10 +180,21 @@ static int repo_ini_handler(void *user, const char *section, const char *name, c
repo = (mbpk_repository*)user;
- if (strcmp(name, "desc") == 0) {
+ if (strcmp(name, "name") == 0) {
+ free((void*)repo->name);
+ repo->name = strdup(value);
+ } else if (strcmp(name, "url") == 0) {
+ free((void*)repo->url);
+ repo->url = strdup(value);
+ } else if (strcmp(name, "desc") == 0) {
+ free((void*)repo->desc);
repo->desc = strdup(value);
- } else if (strcmp(name, "packages") == 0) {
+ } else if (strcmp(name, "packages") == 0) {
/* Do stuff here */
+ if (repo->packages) {
+ free_split_array(repo->packages);
+ }
+ repo->packages = split_string(value);
}
return 1;
@@ -222,6 +305,10 @@ int mbpk_update_repositories(void) {
}
free(repo_ini_path);
printf("[libmbpk debug] repo %s desc: %s\n", repo->name, repo->desc);
+ printf("[libmbpk debug] repo %s packages:\n", repo->name);
+ for (i = 0; repo->packages[i] != NULL; i++) {
+ printf(" %s\n", repo->packages[i]);
+ }
}
return MBPK_OK;