mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 04:13:28 +01:00
Introduce write_str_if_not_equal()
This commit is contained in:
parent
010387e4bd
commit
c212578bf0
@ -870,15 +870,11 @@ router_write_fingerprint(int hashed, int ed25519_identity)
|
||||
tor_asprintf(&fingerprint_line, "%s %s\n", options->Nickname, fingerprint);
|
||||
|
||||
/* Check whether we need to write the (hashed-)fingerprint file. */
|
||||
|
||||
cp = read_file_to_str(keydir, RFTS_IGNORE_MISSING, NULL);
|
||||
if (!cp || strcmp(cp, fingerprint_line)) {
|
||||
if (write_str_to_file(keydir, fingerprint_line, 0)) {
|
||||
log_err(LD_FS, "Error writing %s%s line to file",
|
||||
hashed ? "hashed " : "",
|
||||
ed25519_identity ? "ed25519 identity" : "fingerprint");
|
||||
goto done;
|
||||
}
|
||||
if (write_str_if_not_equal(keydir, fingerprint_line)) {
|
||||
log_err(LD_FS, "Error writing %s%s line to file",
|
||||
hashed ? "hashed " : "",
|
||||
ed25519_identity ? "ed25519 identity" : "fingerprint");
|
||||
goto done;
|
||||
}
|
||||
|
||||
log_notice(LD_GENERAL, "Your Tor %s identity key %s fingerprint is '%s %s'",
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
Loading…
Reference in New Issue
Block a user