mirror of
https://github.com/clearlinux/systemd-stable.git
synced 2026-09-07 06:03:51 +00:00
util: when creating temporary filename for atomic creation of files, add an extra "#" to the name
That way, we have a simple, somewhat reliable way to detect such temporary files, by simply checking if they start with ".#".
This commit is contained in:
+9
-9
@@ -6992,18 +6992,18 @@ int tempfn_xxxxxx(const char *p, char **ret) {
|
||||
* /foo/bar/waldo
|
||||
*
|
||||
* Into this:
|
||||
* /foo/bar/.waldoXXXXXX
|
||||
* /foo/bar/.#waldoXXXXXX
|
||||
*/
|
||||
|
||||
fn = basename(p);
|
||||
if (!filename_is_valid(fn))
|
||||
return -EINVAL;
|
||||
|
||||
t = new(char, strlen(p) + 1 + 6 + 1);
|
||||
t = new(char, strlen(p) + 2 + 6 + 1);
|
||||
if (!t)
|
||||
return -ENOMEM;
|
||||
|
||||
strcpy(stpcpy(stpcpy(mempcpy(t, p, fn - p), "."), fn), "XXXXXX");
|
||||
strcpy(stpcpy(stpcpy(mempcpy(t, p, fn - p), ".#"), fn), "XXXXXX");
|
||||
|
||||
*ret = path_kill_slashes(t);
|
||||
return 0;
|
||||
@@ -7023,18 +7023,18 @@ int tempfn_random(const char *p, char **ret) {
|
||||
* /foo/bar/waldo
|
||||
*
|
||||
* Into this:
|
||||
* /foo/bar/.waldobaa2a261115984a9
|
||||
* /foo/bar/.#waldobaa2a261115984a9
|
||||
*/
|
||||
|
||||
fn = basename(p);
|
||||
if (!filename_is_valid(fn))
|
||||
return -EINVAL;
|
||||
|
||||
t = new(char, strlen(p) + 1 + 16 + 1);
|
||||
t = new(char, strlen(p) + 2 + 16 + 1);
|
||||
if (!t)
|
||||
return -ENOMEM;
|
||||
|
||||
x = stpcpy(stpcpy(mempcpy(t, p, fn - p), "."), fn);
|
||||
x = stpcpy(stpcpy(mempcpy(t, p, fn - p), ".#"), fn);
|
||||
|
||||
u = random_u64();
|
||||
for (i = 0; i < 16; i++) {
|
||||
@@ -7059,14 +7059,14 @@ int tempfn_random_child(const char *p, char **ret) {
|
||||
/* Turns this:
|
||||
* /foo/bar/waldo
|
||||
* Into this:
|
||||
* /foo/bar/waldo/.3c2b6219aa75d7d0
|
||||
* /foo/bar/waldo/.#3c2b6219aa75d7d0
|
||||
*/
|
||||
|
||||
t = new(char, strlen(p) + 2 + 16 + 1);
|
||||
t = new(char, strlen(p) + 3 + 16 + 1);
|
||||
if (!t)
|
||||
return -ENOMEM;
|
||||
|
||||
x = stpcpy(stpcpy(t, p), "/.");
|
||||
x = stpcpy(stpcpy(t, p), "/.#");
|
||||
|
||||
u = random_u64();
|
||||
for (i = 0; i < 16; i++) {
|
||||
|
||||
Reference in New Issue
Block a user