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 *);
{
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"
cache_teardown(void)
{
// XXX catch result?
- write_simple_file(CACHE_METAFILE, "{ \"" TAGNAME_VERSION "\": \""
+ file_write_txt(CACHE_METAFILE, "{ \"" TAGNAME_VERSION "\": \""
PACKAGE_VERSION "\" }\n");
}
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
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) */
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++) {
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++) {