]> git.ipfire.org Git - pakfire.git/commitdiff
db: Properly abort when we cannot import a file
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 19 Aug 2022 16:39:09 +0000 (16:39 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 19 Aug 2022 16:51:12 +0000 (16:51 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/db.c
src/libpakfire/file.c
src/libpakfire/include/pakfire/file.h

index 095a3a47cf271a47dea7fb86997fe5e0df21d0a5..f3b096b64a3f25baf006b4fc8a483a690d9495a9 100644 (file)
@@ -2058,8 +2058,20 @@ static int pakfire_db_load_file(struct pakfire_db* db, struct pakfire_filelist*
 
        // Path
        const char* path = (const char*)sqlite3_column_text(stmt, 0);
-       if (path)
-               pakfire_file_set_path(file, path);
+
+       // Abort if no path is set
+       if (!path) {
+               ERROR(db->pakfire, "File has no path\n");
+               r = 1;
+               goto ERROR;
+       }
+
+       // Set path
+       r = pakfire_file_set_path(file, path);
+       if (r) {
+               ERROR(db->pakfire, "%s: Could not set path '%s': %m\n", path, path);
+               goto ERROR;
+       }
 
        // Size
        size_t size = sqlite3_column_int64(stmt, 1);
@@ -2073,13 +2085,37 @@ static int pakfire_db_load_file(struct pakfire_db* db, struct pakfire_filelist*
 
        // User
        const char* user = (const char*)sqlite3_column_text(stmt, 3);
-       if (user)
-               pakfire_file_set_user(file, user);
+
+       // Abort if no user is set
+       if (!user) {
+               ERROR(db->pakfire, "%s: No user\n", path);
+               r = 1;
+               goto ERROR;
+       }
+
+       // Set user
+       r = pakfire_file_set_user(file, user);
+       if (r) {
+               ERROR(db->pakfire, "%s: Could not set user '%s': %m\n", path, user);
+               goto ERROR;
+       }
 
        // Group
        const char* group = (const char*)sqlite3_column_text(stmt, 4);
-       if (group)
-               pakfire_file_set_group(file, group);
+
+       // Abort if no group is set
+       if (!group) {
+               ERROR(db->pakfire, "%s: No group\n", path);
+               r = 1;
+               goto ERROR;
+       }
+
+       // Set group
+       r = pakfire_file_set_group(file, group);
+       if (r) {
+               ERROR(db->pakfire, "%s: Could not set group '%s': %m\n", path, group);
+               goto ERROR;
+       }
 
        // ctime
        time_t ctime = sqlite3_column_int64(stmt, 5);
@@ -2103,6 +2139,8 @@ static int pakfire_db_load_file(struct pakfire_db* db, struct pakfire_filelist*
 
        // Append the file to the filelist
        r = pakfire_filelist_append(filelist, file);
+       if (r)
+               goto ERROR;
 
 ERROR:
        if (file)
index 03bf36c5b76b680eb0274f4b2cc509cc088f2f83..03f17e7eaec8a8aaffe0c476dc6d38d8f78bd3ca 100644 (file)
@@ -351,16 +351,16 @@ PAKFIRE_EXPORT const char* pakfire_file_get_user(struct pakfire_file* file) {
        return file->user;
 }
 
-PAKFIRE_EXPORT void pakfire_file_set_user(struct pakfire_file* file, const char* user) {
-       pakfire_string_set(file->user, user);
+PAKFIRE_EXPORT int pakfire_file_set_user(struct pakfire_file* file, const char* user) {
+       return pakfire_string_set(file->user, user);
 }
 
 PAKFIRE_EXPORT const char* pakfire_file_get_group(struct pakfire_file* file) {
        return file->group;
 }
 
-PAKFIRE_EXPORT void pakfire_file_set_group(struct pakfire_file* file, const char* group) {
-       pakfire_string_set(file->group, group);
+PAKFIRE_EXPORT int pakfire_file_set_group(struct pakfire_file* file, const char* group) {
+       return pakfire_string_set(file->group, group);
 }
 
 PAKFIRE_EXPORT mode_t pakfire_file_get_mode(struct pakfire_file* file) {
index 61b144a1944760b45f776ae5af0b400ba1492db5..accb6e2b9c251c4ac840ba46565d1d88c65a7bac 100644 (file)
@@ -50,10 +50,10 @@ ssize_t pakfire_file_get_size(struct pakfire_file* file);
 void pakfire_file_set_size(struct pakfire_file* file, ssize_t size);
 
 const char* pakfire_file_get_user(struct pakfire_file* file);
-void pakfire_file_set_user(struct pakfire_file* file, const char* user);
+int pakfire_file_set_user(struct pakfire_file* file, const char* user);
 
 const char* pakfire_file_get_group(struct pakfire_file* file);
-void pakfire_file_set_group(struct pakfire_file* file, const char* group);
+int pakfire_file_set_group(struct pakfire_file* file, const char* group);
 
 mode_t pakfire_file_get_mode(struct pakfire_file* file);
 void pakfire_file_set_mode(struct pakfire_file* file, mode_t mode);