aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorArslaan Pathan <[email protected]>2026-07-03 22:02:27 +1200
committerArslaan Pathan <[email protected]>2026-07-03 22:02:27 +1200
commit4522aa13bc8287ee56c548fbde5755ac022fb249 (patch)
treea3b7352c567732b5ece842416d5e40c17e4adea3 /src
parent6b799c775003ca6d53670141798a5e3c8727d148 (diff)
downloadmbpk-4522aa13bc8287ee56c548fbde5755ac022fb249.tar.xz
mbpk-4522aa13bc8287ee56c548fbde5755ac022fb249.zip
Fix memory leaks and issues and implement strerr, also start working on the next part of updating repos
Diffstat (limited to 'src')
-rw-r--r--src/libmbpk.c90
-rw-r--r--src/mbpk-install.c5
2 files changed, 75 insertions, 20 deletions
diff --git a/src/libmbpk.c b/src/libmbpk.c
index 1347e8b..ef745c8 100644
--- a/src/libmbpk.c
+++ b/src/libmbpk.c
@@ -3,7 +3,6 @@
#include <stdlib.h>
#include "libmbpk.h"
#include "ini.h"
-#include <string.h>
#include <sys/stat.h>
#include <curl/curl.h>
@@ -54,12 +53,22 @@ static size_t curl_memory_write_calback(void *contents, size_t size, size_t nmem
}
int mbpk_init(void) {
+ CURLcode result;
struct stat st;
if (stat(MBPK_DB_DIR, &st) == -1) {
if (mkdir(MBPK_DB_DIR, 0755) == -1) {
return MBPK_DB_FAIL;
}
}
+ if (stat(MBPK_REPO_DIR, &st) == -1) {
+ if (mkdir(MBPK_REPO_DIR, 0755) == -1) {
+ return MBPK_REPO_FAIL;
+ }
+ }
+ result = curl_global_init(CURL_GLOBAL_ALL);
+ if (result != CURLE_OK) {
+ return MBPK_CURL_INIT_FAIL;
+ }
return MBPK_OK;
}
@@ -101,7 +110,10 @@ int mbpk_update_repositories(void) {
mbpk_repository *repo;
CURL* curl;
CURLcode result;
- char* repo_ini_url;
+ char *repo_ini_url;
+ char *repo_ini_path;
+ char *repo_dir;
+ size_t dir_len;
struct curl_memory chunk;
repo_count = 0;
@@ -109,21 +121,14 @@ int mbpk_update_repositories(void) {
return MBPK_REPO_FAIL;
}
- if (stat(MBPK_REPO_DIR, &st) == -1) {
- if (mkdir(MBPK_REPO_DIR, 0755) == -1) {
- return MBPK_REPO_FAIL;
- }
- }
-
for (i = 0; i < repo_count; i++) {
repo = repos[i];
printf("[libmbpk debug] processing repo %s\n", repo->name);
chunk.memory = malloc(1);
- chunk.size = 0;
- result = curl_global_init(CURL_GLOBAL_ALL);
- if (result != CURLE_OK) {
- return MBPK_CURL_INIT_FAIL;
+ if (!chunk.memory) {
+ return MBPK_OUT_OF_MEMORY;
}
+ chunk.size = 0;
curl = curl_easy_init();
if (curl) {
@@ -141,28 +146,77 @@ int mbpk_update_repositories(void) {
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&chunk);
result = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ free(repo_ini_url);
if (result != CURLE_OK) {
printf("[libmbpk debug] perform cURL failed\n");
+ free(chunk.memory);
return MBPK_CURL_PERFORM_FAIL;
} else {
printf("[libmbpk debug] %lu bytes received\n", (unsigned long)chunk.size);
printf("[libmbpk debug] Response:\n%s\n", chunk.memory);
}
-
- curl_easy_cleanup(curl);
} else {
free(chunk.memory);
- curl_global_cleanup();
return MBPK_CURL_INIT_FAIL;
}
+
+ dir_len = strlen(MBPK_REPO_DIR) + 1 + strlen(repo->name) + 1;
+ repo_dir = malloc(dir_len);
+
free(chunk.memory);
- curl_global_cleanup();
}
return MBPK_OK;
}
-void mbpk_cleanup(void) {
-
+void mbpk_cleanup(void) {
+ int i;
+ for (i = 0; i < repo_count; i++) {
+ if (repos[i]) {
+ free((void*)repos[i]->name);
+ free((void*)repos[i]->url);
+ free((void*)repos[i]->desc);
+ free((void*)repos[i]->packages);
+ free((void*)repos[i]);
+ repos[i] = NULL;
+ }
+ }
+ repo_count = 0;
+ curl_global_cleanup();
+}
+
+const char* mbpk_strerr(int code) {
+ const char* strerr;
+ switch (code) {
+ case MBPK_OK:
+ strerr = "MBPK_OK (0)";
+ break;
+ case MBPK_DB_FAIL:
+ strerr = "MBPK_DB_FAIL (1)";
+ break;
+ case MBPK_REPO_FAIL:
+ strerr = "MBPK_REPO_FAIL (2)";
+ break;
+ case MBPK_DL_FAIL:
+ strerr = "MBPK_DL_FAIL (3)";
+ break;
+ case MBPK_EXTRACT_FAIL:
+ strerr = "MBPK_EXTRACT_FAIL (4)";
+ break;
+ case MBPK_CURL_INIT_FAIL:
+ strerr = "MBPK_CURL_INIT_FAIL (5)";
+ break;
+ case MBPK_CURL_PERFORM_FAIL:
+ strerr = "MBPK_CURL_PERFORM_FAIL (6)";
+ break;
+ case MBPK_OUT_OF_MEMORY:
+ strerr = "MBPK_OUT_OF_MEMORY (7)";
+ break;
+ default:
+ strerr = "MBPK_UNKNOWN_ERR";
+ break;
+ }
+ return strerr;
}
diff --git a/src/mbpk-install.c b/src/mbpk-install.c
index 5ff555a..9588373 100644
--- a/src/mbpk-install.c
+++ b/src/mbpk-install.c
@@ -7,13 +7,14 @@ int main(void) {
printf("[mbpk_install] calling mbpk_init()\n");
res = mbpk_init();
if (res != MBPK_OK) {
- fprintf(stderr, "mbpk init failed: %d\n", res);
+ fprintf(stderr, "mbpk init failed: %s\n", mbpk_strerr(res));
return 1;
}
printf("[mbpk_install] calling mbpk_update_repositories()\n");
res = mbpk_update_repositories();
if (res != MBPK_OK) {
- fprintf(stderr, "mbpk repo failed: %d\n", res);
+ fprintf(stderr, "mbpk repo failed: %s\n", mbpk_strerr(res));
}
+ mbpk_cleanup();
return 0;
}