summaryrefslogtreecommitdiff
path: root/src/lib/fs
diff options
context:
space:
mode:
authorNeel Chauhan <neel@neelc.org>2020-07-24 18:14:15 -0700
committerNick Mathewson <nickm@torproject.org>2020-07-30 10:46:15 -0400
commitc212578bf05138801597dcce23f52780c9b7dbb3 (patch)
treed4c8e7566ff2d2792da8d75c5e178c2f05e2f6de /src/lib/fs
parent010387e4bda401821ce05a67c6f1db60200275e7 (diff)
downloadtor-c212578bf05138801597dcce23f52780c9b7dbb3.tar.gz
tor-c212578bf05138801597dcce23f52780c9b7dbb3.zip
Introduce write_str_if_not_equal()
Diffstat (limited to 'src/lib/fs')
-rw-r--r--src/lib/fs/files.c20
-rw-r--r--src/lib/fs/files.h2
2 files changed, 22 insertions, 0 deletions
diff --git a/src/lib/fs/files.c b/src/lib/fs/files.c
index a0b5a40aac..189d2cb646 100644
--- a/src/lib/fs/files.c
+++ b/src/lib/fs/files.c
@@ -718,6 +718,26 @@ read_file_to_str, (const char *filename, int flags, struct stat *stat_out))
return string;
}
+/** Attempt to read a file <b>fname</b>. If the file's contents is
+ * equal to the string <b>str</b>, return 0. Otherwise, attempt to
+ * overwrite the file with the contents of <b>str</b> and return
+ * the value of write_str_to_file().
+ */
+int
+write_str_to_file_if_not_equal(const char *fname, const char *str)
+{
+ char *fstr = read_file_to_str(fname, RFTS_IGNORE_MISSING, NULL);
+ int rv;
+
+ if (!fstr || strcmp(str, fstr)) {
+ rv = write_str_to_file(fname, str, 0);
+ } else {
+ rv = 0;
+ }
+ tor_free(fstr);
+ return rv;
+}
+
#if !defined(HAVE_GETDELIM) || defined(TOR_UNIT_TESTS)
#include "ext/getdelim.c"
#endif
diff --git a/src/lib/fs/files.h b/src/lib/fs/files.h
index a109cd6248..62b79c4cd8 100644
--- a/src/lib/fs/files.h
+++ b/src/lib/fs/files.h
@@ -91,6 +91,8 @@ int append_bytes_to_file(const char *fname, const char *str, size_t len,
int write_bytes_to_new_file(const char *fname, const char *str, size_t len,
int bin);
+int write_str_to_file_if_not_equal(const char *fname, const char *str);
+
/** Flag for read_file_to_str: open the file in binary mode. */
#define RFTS_BIN 1
/** Flag for read_file_to_str: it's okay if the file doesn't exist. */