This changes a boolean param into a proper bitflag field.
Given this only defines a single flag for now this doesn't look like
much of an improvement. But we'll add another flag shortly, where it
starts to make more sense.
return RET_NERRNO(linkat(fd, "", newdirfd, newpath, AT_EMPTY_PATH));
}
-int link_tmpfile_at(int fd, int dir_fd, const char *path, const char *target, bool replace) {
+int link_tmpfile_at(int fd, int dir_fd, const char *path, const char *target, LinkTmpfileFlags flags) {
_cleanup_free_ char *tmp = NULL;
int r;
* is not supported on the directory, and renameat2() is used instead. */
if (path) {
- if (replace)
+ if (FLAGS_SET(flags, LINK_TMPFILE_REPLACE))
return RET_NERRNO(renameat(dir_fd, path, dir_fd, target));
return rename_noreplace(dir_fd, path, dir_fd, target);
}
r = link_fd(fd, dir_fd, target);
- if (r != -EEXIST || !replace)
+ if (r != -EEXIST || !FLAGS_SET(flags, LINK_TMPFILE_REPLACE))
return r;
/* So the target already exists and we were asked to replace it. That sucks a bit, since the kernel's
return 0;
}
-int flink_tmpfile(FILE *f, const char *path, const char *target, bool replace) {
+int flink_tmpfile(FILE *f, const char *path, const char *target, LinkTmpfileFlags flags) {
int fd, r;
assert(f);
if (r < 0)
return r;
- return link_tmpfile(fd, path, target, replace);
+ return link_tmpfile(fd, path, target, flags);
}
int mkdtemp_malloc(const char *template, char **ret) {
}
int fopen_tmpfile_linkable(const char *target, int flags, char **ret_path, FILE **ret_file);
-int link_tmpfile_at(int fd, int dir_fd, const char *path, const char *target, bool replace);
-static inline int link_tmpfile(int fd, const char *path, const char *target, bool replace) {
- return link_tmpfile_at(fd, AT_FDCWD, path, target, replace);
+
+typedef enum LinkTmpfileFlags {
+ LINK_TMPFILE_REPLACE = 1 << 0,
+} LinkTmpfileFlags;
+
+int link_tmpfile_at(int fd, int dir_fd, const char *path, const char *target, LinkTmpfileFlags flags);
+static inline int link_tmpfile(int fd, const char *path, const char *target, LinkTmpfileFlags flags) {
+ return link_tmpfile_at(fd, AT_FDCWD, path, target, flags);
}
-int flink_tmpfile(FILE *f, const char *path, const char *target, bool replace);
+int flink_tmpfile(FILE *f, const char *path, const char *target, LinkTmpfileFlags flags);
int mkdtemp_malloc(const char *template, char **ret);
int mkdtemp_open(const char *template, int flags, char **ret);
fprintf(f, "default %s-*\n", arg_entry_token);
}
- r = flink_tmpfile(f, t, p, /* replace= */ false);
+ r = flink_tmpfile(f, t, p, /* flags= */ 0);
if (r == -EEXIST)
return 0; /* Silently skip creation if the file exists now (recheck) */
if (r < 0)
fprintf(f, "type1\n");
- r = flink_tmpfile(f, t, p, /* replace= */ false);
+ r = flink_tmpfile(f, t, p, /* flags= */ 0);
if (r == -EEXIST)
return 0; /* Silently skip creation if the file exists now (recheck) */
if (r < 0)
if (r < 0)
return log_error_errno(r, "Failed to sync coredump %s: %m", coredump_tmpfile_name(filename));
- r = link_tmpfile(fd, filename, target, /* replace= */ false);
+ r = link_tmpfile(fd, filename, target, /* flags= */ 0);
if (r < 0)
return log_error_errno(r, "Failed to move coredump %s into place: %m", target);
if (fchmod(fd, 0644) < 0)
return log_debug_errno(errno, "Failed to change unit file access mode for '%s': %m", path);
- r = link_tmpfile(fd, tmp, path, /* replace= */ false);
+ r = link_tmpfile(fd, tmp, path, /* flags= */ 0);
if (r < 0)
return log_debug_errno(r, "Failed to install unit file '%s': %m", path);
return -errno;
}
- r = link_tmpfile_at(fdt, dir_fdt, t, to, copy_flags & COPY_REPLACE);
+ r = link_tmpfile_at(fdt, dir_fdt, t, to, (copy_flags & COPY_REPLACE) ? LINK_TMPFILE_REPLACE : 0);
if (r < 0)
return r;
return -errno;
fwrite(&h, sizeof(struct trie_header_f), 1, f);
- r = flink_tmpfile(f, filename_tmp, filename, /* replace= */ true);
+ r = flink_tmpfile(f, filename_tmp, filename, LINK_TMPFILE_REPLACE);
if (r < 0)
return r;
assert_se(write(fd, "foobar\n", 7) == 7);
assert_se(touch(d) >= 0);
- assert_se(link_tmpfile(fd, tmp, d, /* replace= */ false) == -EEXIST);
+ assert_se(link_tmpfile(fd, tmp, d, /* flags= */ 0) == -EEXIST);
assert_se(unlink(d) >= 0);
- assert_se(link_tmpfile(fd, tmp, d, /* replace= */ false) >= 0);
+ assert_se(link_tmpfile(fd, tmp, d, /* flags= */ 0) >= 0);
assert_se(read_one_line_file(d, &line) >= 0);
assert_se(streq(line, "foobar"));
assert_se(write(fd, "waumiau\n", 8) == 8);
- assert_se(link_tmpfile(fd, tmp, d, /* replace= */ false) == -EEXIST);
- assert_se(link_tmpfile(fd, tmp, d, /* replace= */ true) >= 0);
+ assert_se(link_tmpfile(fd, tmp, d, /* flags= */ 0) == -EEXIST);
+ assert_se(link_tmpfile(fd, tmp, d, LINK_TMPFILE_REPLACE) >= 0);
line = mfree(line);
assert_se(read_one_line_file(d, &line) >= 0);