diff options
| author | Arslaan Pathan <[email protected]> | 2026-07-03 22:57:59 +1200 |
|---|---|---|
| committer | Arslaan Pathan <[email protected]> | 2026-07-03 22:57:59 +1200 |
| commit | 9326469e02f826937f70a6d3fd18845b51485331 (patch) | |
| tree | 22c57b975149888f324da89b670628ed724d5cff | |
| parent | 1c3dbaac4daa848d4292737d7b9f8ad037fde6f4 (diff) | |
| download | mbpk-9326469e02f826937f70a6d3fd18845b51485331.tar.xz mbpk-9326469e02f826937f70a6d3fd18845b51485331.zip | |
Always trust the repo.ini file over config, add helper functions for splitting strings into arrays and freeing split arrays, make repo_ini_handler parse packages
| -rw-r--r-- | src/libmbpk.c | 91 |
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; |
