aboutsummaryrefslogtreecommitdiff
path: root/snag
diff options
context:
space:
mode:
authorRiley Beckett <rbeckettvt@gmail.com>2026-10-20 18:45:41 -0400
committerRiley Beckett <rbeckettvt@gmail.com>2026-10-20 18:45:41 -0400
commita2ad28429b7eeb08b87c0ea191f31e09ae03ef28 (patch)
treedec601aa9dbd93f8bb4f18bdf545f5d326d6ee63 /snag
parent65cfd95021b585fa92b455e89f2e0a645e48bb45 (diff)
fixed some bugsHEADmaster
Diffstat (limited to 'snag')
-rw-r--r--snag/src/build_db.c44
-rw-r--r--snag/src/build_db.h5
-rw-r--r--snag/src/main.c3
3 files changed, 35 insertions, 17 deletions
diff --git a/snag/src/build_db.c b/snag/src/build_db.c
index 6b22bcc..b5256f7 100644
--- a/snag/src/build_db.c
+++ b/snag/src/build_db.c
@@ -4,9 +4,6 @@
#include "util.h"
#include "source_db.h"
-#define _XOPEN_SOURCE 500
-#include <ftw.h>
-
#include <poll.h>
#include <stdint.h>
#include <stdio.h>
@@ -328,7 +325,7 @@ void build_run(const package_build_t* build) {
if (WEXITSTATUS(wstatus) != 0) die("the child failed to execute install script");
}
-int do_dir_traversal(char* path, const char* absolute_path, const char** flist) {
+int do_dir_traversal(char* path, const char* absolute_path, char** flist) {
size_t path_len = strlen(path);
if (path_len >= PATH_MAX) {
return -1;
@@ -411,14 +408,14 @@ int do_dir_traversal(char* path, const char* absolute_path, const char** flist)
return 0;
}
-void list_fakeroot(const package_build_t* build, const char** flist) {
+void list_fakeroot(const package_build_t* build, char** flist) {
char path[PATH_MAX] = {0};
strcpy(path, build->fakeroot);
const char* absolute_path = slash;
do_dir_traversal(path, absolute_path, flist);
}
-void read_flist(const package_info_t* info, const char*** flist) {
+void read_flist(const package_info_t* info, char*** flist) {
char* flist_file = vastrcat(cfg.install_db, "/", info->attrs.id, "/flist");
if (!flist_file) {
die("flist path allocation failed: %s", strerror(errno));
@@ -426,30 +423,49 @@ void read_flist(const package_info_t* info, const char*** flist) {
FILE* f = fopen(flist_file, "r");
if (!f) {
print("There is no flist file for: %s\n", info->attrs.id);
- free(flist_file);
- *flist = NULL;
- return;
+ goto error;
+ }
+ if (fseek(f, 0, SEEK_END) < 0) {
+ print("failed to find end of flist: %s\n", info->attrs.id);
+ goto error;
}
- fseek(f, 0, SEEK_END);
long file_size = ftell(f);
- fseek(f, 0, SEEK_SET);
+ if (fseek(f, 0, SEEK_SET) < 0) {
+ print("failed to find begining of flist: %s\n", info->attrs.id);
+ goto error;
+ }
+ if (file_size == 0) {
+ print("flist is empty for: %s\n", info->attrs.id);
+ goto error;
+ }
char* flist_buffer = emalloc(file_size + 1, "flist buffer");
if (fread(flist_buffer, 1, file_size, f) < file_size) {
die("Failed to read entire flist");
}
flist_buffer[file_size] = 0;
size_t lines = 0;
- for (int i = 0; i < file_size; i++) {
+ for (size_t i = 0; i < file_size; i++) {
if (flist_buffer[i] == '\n') lines++;
}
if (flist_buffer[file_size - 1] != '\n') lines++;
- const char** flist_array = emalloc((lines + 1) * sizeof(char*), "flist array");
+ char** flist_array = emalloc((lines + 1) * sizeof(char*), "flist array");
flist_array[0] = strtok(flist_buffer, "\n");
- for (int i = 1; i < lines; i++) {
+ for (size_t i = 1; i < lines; i++) {
flist_array[i] = strtok(NULL, "\n");
}
flist_array[lines] = NULL;
*flist = flist_array;
fclose(f);
free(flist_file);
+ return;
+ error:
+ free(flist_file);
+ *flist = NULL;
+}
+
+void free_flist(char*** flist) {
+ if (!*flist) return;
+ free(**flist);
+ free(*flist);
+ *flist = NULL;
}
diff --git a/snag/src/build_db.h b/snag/src/build_db.h
index 413295f..1b0b907 100644
--- a/snag/src/build_db.h
+++ b/snag/src/build_db.h
@@ -12,7 +12,8 @@ typedef struct {
bool package_setup_build(const package_info_t* info, package_build_t* build);
void build_run(const package_build_t* info);
-void list_fakeroot(const package_build_t* info, const char** flist);
-void read_flist(const package_info_t* info, const char*** flist);
+void list_fakeroot(const package_build_t* info, char** flist);
+void read_flist(const package_info_t* info, char*** flist);
+void free_flist(char*** flist);
#endif
diff --git a/snag/src/main.c b/snag/src/main.c
index 37feb58..f73359d 100644
--- a/snag/src/main.c
+++ b/snag/src/main.c
@@ -62,9 +62,10 @@ int cmd_install(char* cmd_name, ArgParser* parser) {
package_build_t build;
package_setup_build(&info, &build);
build_run(&build);
- const char** flist = NULL;
+ char** flist = NULL;
read_flist(&info, &flist);
list_fakeroot(&build, flist);
+ free_flist(&flist);
}
}