]> git.ipfire.org Git - pakfire.git/commitdiff
archive writer: Add convenience function to write JSON files
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 8 Feb 2025 14:17:06 +0000 (14:17 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 8 Feb 2025 14:17:06 +0000 (14:17 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/pakfire/archive_writer.c
src/pakfire/archive_writer.h
src/pakfire/packager.c

index bdb88262422b45b8ca687e2fb8579a11c6f957e2..a8635a80cca93b71a48d2d4b12697be43aa0e40d 100644 (file)
@@ -23,6 +23,9 @@
 #include <stdlib.h>
 #include <time.h>
 
+// json-c
+#include <json.h>
+
 // libarchive
 #include <archive.h>
 #include <archive_entry.h>
@@ -665,6 +668,21 @@ ERROR:
        return r;
 }
 
+int pakfire_archive_writer_create_file_from_json(
+               struct pakfire_archive_writer* self, const char* path, mode_t mode, struct json_object* json) {
+       const char* buffer = NULL;
+
+       // Serialize JSON to string
+       buffer = json_object_to_json_string_ext(json, 0);
+       if (!buffer) {
+               ERROR(self->ctx, "Failed to serialize JSON object: %m\n");
+               return -errno;
+       }
+
+       // Write it to the archive
+       return pakfire_archive_writer_create_file(self, path, mode, buffer, strlen(buffer));
+}
+
 int pakfire_archive_writer_create_file_from_file(
                struct pakfire_archive_writer* self, const char* path, mode_t mode, FILE* f) {
        struct archive_entry* entry = NULL;
index 134f1a76519f15358e84abec207d59df652fb764..70070f55adebbec41871f83eab7d866eeedf4c53 100644 (file)
@@ -23,6 +23,9 @@
 
 #include <stdio.h>
 
+// json-c
+#include <json.h>
+
 #include <pakfire/filelist.h>
 #include <pakfire/pakfire.h>
 
@@ -53,6 +56,8 @@ int pakfire_archive_writer_write_everything(
 
 int pakfire_archive_writer_create_file(struct pakfire_archive_writer* self,
        const char* path, mode_t mode, const char* payload, const size_t length);
+int pakfire_archive_writer_create_file_from_json(struct pakfire_archive_writer* self,
+       const char* path, mode_t mode, struct json_object* json);
 int pakfire_archive_writer_create_file_from_file(
        struct pakfire_archive_writer* self, const char* path, mode_t mode, FILE* f);
 
index f034c683fcd3ef9fba4eb5dfec1f1f1bdf1f7373..3c9e923752bb4332e751105210587cd0d18ec308 100644 (file)
@@ -259,7 +259,6 @@ static int pakfire_packager_write_format(struct pakfire_packager* packager,
 static int pakfire_packager_write_metadata(struct pakfire_packager* packager,
                struct pakfire_archive_writer* writer) {
        struct json_object* md = NULL;
-       const char* s = NULL;
        int r;
 
        // Convert all package metadata to JSON
@@ -269,17 +268,8 @@ static int pakfire_packager_write_metadata(struct pakfire_packager* packager,
                goto ERROR;
        }
 
-       // Serialize JSON to string
-       s = json_object_to_json_string_ext(md, 0);
-       if (!s) {
-               r = -errno;
-               goto ERROR;
-       }
-
-       DEBUG(packager->ctx, "Generated package metadata:\n%s\n", s);
-
        // Write metadata
-       r = pakfire_archive_writer_create_file(writer, ".PKGINFO", 0444, s, strlen(s));
+       r = pakfire_archive_writer_create_file_from_json(writer, ".PKGINFO", 0444, md);
        if (r < 0) {
                ERROR(packager->ctx, "Failed to write package metadata: %s\n", strerror(-r));
                goto ERROR;