From 4c005140c87bdd4e15c02ab4728556593458814a Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 8 Feb 2025 14:17:06 +0000 Subject: [PATCH] archive writer: Add convenience function to write JSON files Signed-off-by: Michael Tremer --- src/pakfire/archive_writer.c | 18 ++++++++++++++++++ src/pakfire/archive_writer.h | 5 +++++ src/pakfire/packager.c | 12 +----------- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/pakfire/archive_writer.c b/src/pakfire/archive_writer.c index bdb88262..a8635a80 100644 --- a/src/pakfire/archive_writer.c +++ b/src/pakfire/archive_writer.c @@ -23,6 +23,9 @@ #include #include +// json-c +#include + // libarchive #include #include @@ -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; diff --git a/src/pakfire/archive_writer.h b/src/pakfire/archive_writer.h index 134f1a76..70070f55 100644 --- a/src/pakfire/archive_writer.h +++ b/src/pakfire/archive_writer.h @@ -23,6 +23,9 @@ #include +// json-c +#include + #include #include @@ -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); diff --git a/src/pakfire/packager.c b/src/pakfire/packager.c index f034c683..3c9e9237 100644 --- a/src/pakfire/packager.c +++ b/src/pakfire/packager.c @@ -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; -- 2.39.5