From: Alberto Leiva Popper Date: Mon, 14 Oct 2024 21:25:33 +0000 (-0600) Subject: Move write_simple_file() to file.c X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=35d7854a7009ec79c276210a7edece6ba6812ee0;p=thirdparty%2FFORT-validator.git Move write_simple_file() to file.c Was too similar to file_write_full(), so merged. --- diff --git a/src/cache.c b/src/cache.c index 07757c73..ed454813 100644 --- a/src/cache.c +++ b/src/cache.c @@ -130,30 +130,6 @@ strip_rsync_module(char const *url) return NULL; } -static int -write_simple_file(char const *filename, char const *content) -{ - FILE *file; - int error; - - file = fopen(filename, "w"); - if (file == NULL) - goto fail; - - if (fprintf(file, "%s", content) < 0) - goto fail; - - fclose(file); - return 0; - -fail: - error = errno; - pr_op_err("Cannot write %s: %s", filename, strerror(error)); - if (file != NULL) - fclose(file); - return error; -} - static int dl_rsync(struct cache_node *); static int dl_http(struct cache_node *); static int dl_rrdp(struct cache_node *); @@ -227,7 +203,7 @@ init_cachedir_tag(void) { static char const *filename = "CACHEDIR.TAG"; if (file_exists(filename) == ENOENT) - write_simple_file(filename, + file_write_txt(filename, "Signature: 8a477f597d28d172789f06886806bc55\n" "# This file is a cache directory tag created by Fort.\n" "# For information about cache directory tags, see:\n" @@ -274,7 +250,7 @@ void cache_teardown(void) { // XXX catch result? - write_simple_file(CACHE_METAFILE, "{ \"" TAGNAME_VERSION "\": \"" + file_write_txt(CACHE_METAFILE, "{ \"" TAGNAME_VERSION "\": \"" PACKAGE_VERSION "\" }\n"); } diff --git a/src/file.c b/src/file.c index 56470539..87825aab 100644 --- a/src/file.c +++ b/src/file.c @@ -60,30 +60,39 @@ file_write(char const *file_name, char const *mode, FILE **result) return 0; } -int -file_write_full(char const *path, unsigned char const *content, - size_t content_len) +static int +write_file(char const *path, void const *bytes, size_t n) { FILE *out; - size_t written; int error; - pr_val_debug("Writing file: %s", path); - error = file_write(path, "wb", &out); if (error) return error; - written = fwrite(content, sizeof(unsigned char), content_len, out); + if (fwrite(bytes, 1, n, out) != n) { + error = errno; + if (!error) /* Linux's man page does not mention errno */ + error = -1; + pr_val_err("Cannot write %s: %s", path, strerror(error)); + } + file_close(out); + return error; +} - if (written != content_len) - return pr_val_err( - "Couldn't write file '%s' (error code not available)", - path - ); +int +file_write_txt(char const *path, char const *txt) +{ + pr_val_debug("echo 'blah blah' > %s", path); + return write_file(path, txt, strlen(txt)); +} - return 0; +int +file_write_bin(char const *path, unsigned char const *bytes, size_t n) +{ + pr_val_debug("echo 'beep boop' > %s", path); + return write_file(path, bytes, n); } void diff --git a/src/file.h b/src/file.h index 3e05f1e6..f8544f05 100644 --- a/src/file.h +++ b/src/file.h @@ -25,7 +25,8 @@ struct file_contents { int file_open(char const *, FILE **, struct stat *); int file_write(char const *, char const *, FILE **); -int file_write_full(char const *, unsigned char const *, size_t); +int file_write_txt(char const *, char const *); +int file_write_bin(char const *, unsigned char const *, size_t); void file_close(FILE *); int file_load(char const *, struct file_contents *, bool); @@ -33,7 +34,6 @@ void file_free(struct file_contents *); int file_exists(char const *); -int file_merge_into(char const *, char const *); int file_rm_f(char const *); int file_rm_rf(char const *); int file_mkdir(char const *, bool); diff --git a/src/rrdp.c b/src/rrdp.c index 30ff269d..c69eb3d7 100644 --- a/src/rrdp.c +++ b/src/rrdp.c @@ -588,7 +588,7 @@ handle_publish(xmlTextReaderPtr reader, struct parser_args *args) HASH_ADD_KEYPTR(hh, args->state->files, file->map.url, len, file); } - error = file_write_full(file->map.path, tag.content, tag.content_len); + error = file_write_bin(file->map.path, tag.content, tag.content_len); end: metadata_cleanup(&tag.meta); free(tag.content); diff --git a/test/cache_test.c b/test/cache_test.c index c958ac9f..5ba727bc 100644 --- a/test/cache_test.c +++ b/test/cache_test.c @@ -440,18 +440,18 @@ START_TEST(test_rsync_commit) ck_assert_int_eq(0, system("mkdir rsync/0 rsync/1 rsync/2 rsync/3")); /* RPP0: Will remain constant */ - ck_assert_int_eq(0, write_simple_file("rsync/0/0", "A")); - ck_assert_int_eq(0, write_simple_file("rsync/0/1", "B")); + ck_assert_int_eq(0, file_write_txt("rsync/0/0", "A")); + ck_assert_int_eq(0, file_write_txt("rsync/0/1", "B")); /* RPP1: Will be added in its second cycle */ - ck_assert_int_eq(0, write_simple_file("rsync/1/0", "C")); - ck_assert_int_eq(0, write_simple_file("rsync/1/1", "D")); + ck_assert_int_eq(0, file_write_txt("rsync/1/0", "C")); + ck_assert_int_eq(0, file_write_txt("rsync/1/1", "D")); /* RPP2: Will be removed in its second cycle */ - ck_assert_int_eq(0, write_simple_file("rsync/2/0", "E")); - ck_assert_int_eq(0, write_simple_file("rsync/2/1", "F")); + ck_assert_int_eq(0, file_write_txt("rsync/2/0", "E")); + ck_assert_int_eq(0, file_write_txt("rsync/2/1", "F")); /* RPP3: Will be updated in its second cycle */ - ck_assert_int_eq(0, write_simple_file("rsync/3/0", "G")); /* Keeper */ - ck_assert_int_eq(0, write_simple_file("rsync/3/1", "H")); /* Added */ - ck_assert_int_eq(0, write_simple_file("rsync/3/2", "I")); /* Removed */ + ck_assert_int_eq(0, file_write_txt("rsync/3/0", "G")); /* Keeper */ + ck_assert_int_eq(0, file_write_txt("rsync/3/1", "H")); /* Added */ + ck_assert_int_eq(0, file_write_txt("rsync/3/2", "I")); /* Removed */ /* Commit 1: Empty -> Empty */ /* Commit 2: Empty -> Empty (just free noise) */ @@ -564,9 +564,9 @@ START_TEST(test_https_commit) setup_test(); - ck_assert_int_eq(0, write_simple_file("https/50", "A")); /* Keeper */ - ck_assert_int_eq(0, write_simple_file("https/51", "B")); /* Added */ - ck_assert_int_eq(0, write_simple_file("https/52", "C")); /* Removed */ + ck_assert_int_eq(0, file_write_txt("https/50", "A")); /* Keeper */ + ck_assert_int_eq(0, file_write_txt("https/51", "B")); /* Added */ + ck_assert_int_eq(0, file_write_txt("https/52", "C")); /* Removed */ /* 1, 2 */ for (i = 0; i < 2; i++) { @@ -617,15 +617,15 @@ START_TEST(test_rrdp_commit) ck_assert_int_eq(0, system("mkdir rrdp/0 rrdp/1 rrdp/2 rrdp/3")); - ck_assert_int_eq(0, write_simple_file("rrdp/0/0", "A")); - ck_assert_int_eq(0, write_simple_file("rrdp/0/1", "B")); - ck_assert_int_eq(0, write_simple_file("rrdp/1/0", "C")); - ck_assert_int_eq(0, write_simple_file("rrdp/1/1", "D")); - ck_assert_int_eq(0, write_simple_file("rrdp/2/0", "E")); - ck_assert_int_eq(0, write_simple_file("rrdp/2/1", "F")); - ck_assert_int_eq(0, write_simple_file("rrdp/3/0", "G")); - ck_assert_int_eq(0, write_simple_file("rrdp/3/1", "H")); - ck_assert_int_eq(0, write_simple_file("rrdp/3/2", "I")); + ck_assert_int_eq(0, file_write_txt("rrdp/0/0", "A")); + ck_assert_int_eq(0, file_write_txt("rrdp/0/1", "B")); + ck_assert_int_eq(0, file_write_txt("rrdp/1/0", "C")); + ck_assert_int_eq(0, file_write_txt("rrdp/1/1", "D")); + ck_assert_int_eq(0, file_write_txt("rrdp/2/0", "E")); + ck_assert_int_eq(0, file_write_txt("rrdp/2/1", "F")); + ck_assert_int_eq(0, file_write_txt("rrdp/3/0", "G")); + ck_assert_int_eq(0, file_write_txt("rrdp/3/1", "H")); + ck_assert_int_eq(0, file_write_txt("rrdp/3/2", "I")); /* 1, 2 */ for (i = 0; i < 2; i++) { diff --git a/test/mock_https.c b/test/mock_https.c index c7fefbd3..e1d4e210 100644 --- a/test/mock_https.c +++ b/test/mock_https.c @@ -26,8 +26,7 @@ http_download(char const *url, char const *path, curl_off_t ims, bool *changed) if (!content) ck_abort_msg("Test was not expecting an HTTP download."); - ck_assert_int_eq(0, file_write_full(path, - (unsigned char const *)content, strlen(content))); + ck_assert_int_eq(0, file_write_txt(path, content)); if (changed) *changed = true;