chiark / gitweb /
verbs: when invoking the default verb, pass a faked argv array, with just the verb...
[elogind.git] / src / shared / util.c
index 91cf6705ea104233b6ede6f8ef03c7f7084b57a9..5f18d34c3d5c4421d57c6a091a77ee3bbfc28d6f 100644 (file)
@@ -3069,7 +3069,7 @@ static int rm_rf_internal(const char *path, bool only_dirs, bool delete_root, bo
         fd = open(path, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW|O_NOATIME);
         if (fd < 0) {
 
-                if (errno != ENOTDIR)
+                if (errno != ENOTDIR && errno != ELOOP)
                         return -errno;
 
                 if (!dangerous) {
@@ -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++) {