- uint16_t size = strlen(msg1) + strlen(f) + strlen(msg2) + strlen(p1)
- + strlen(msg3) + strlen(p2) + strlen(msg4) + 1;
- char msg[size];
- sprintf(msg, "%s%s%s%s%s%s%s", msg1, f, msg2, p1, msg3, p2, msg4);
- exit_err(rename(p1, p2), msg);
+ uint16_t size = strlen(msg1) + strlen(__func__) + strlen(msg2) +
+ + strlen(path_tmp) + strlen(msg3) + strlen(path)
+ + strlen(msg4) + 1;
+ char * msg = try_malloc(size, __func__);
+ int test = sprintf(msg, "%s%s%s%s%s%s%s",
+ msg1, __func__, msg2, path_tmp, msg3, path, msg4);
+ exit_trouble(test < 0, __func__, "sprintf");
+ exit_err(rename(path_tmp, path), msg);
+ free(msg);
+ free(path_tmp);
+}
+
+
+
+extern void detect_atomic_leftover(char * path)
+{
+ char * path_tmp = build_temp_path(path);
+ char * part1 = "Found file '";
+ char * part2 = "' that may be a leftover from an aborted previous attempt "
+ "to write '";
+ char * part3 = "'. Aborting until the matter is solved by (re-)moving it.";
+ uint32_t size = strlen(part1) + strlen(path_tmp) + strlen(part2)
+ + strlen(path) + strlen(part3) + 1;
+ char * msg = try_malloc(size, __func__);
+ int test = sprintf(msg, "%s%s%s%s%s", part1, path_tmp, part2, path, part3);
+ exit_trouble(test < 0, __func__, "sprintf");
+ exit_err(!access(path_tmp, F_OK), msg);
+ free(msg);
+ free(path_tmp);