Blob Blame History Raw
--- scrub-2.5.2.ori/src/scrub.c	2012-06-21 00:00:27.000000000 +0200
+++ scrub-2.5.2/src/scrub.c	2021-08-09 18:25:00.355142963 +0200
@@ -283,8 +283,8 @@
             }
             scrub_disk(filename, sopt, seq, bopt, Sopt, Topt);
             break;
-        case FILE_LINK:
-            if (Lopt) {
+        case FILE_REGULAR:
+   	    if (is_symlink(filename) && Lopt) {
                 if (ropt) {
                     printf("%s: unlinking %s\n", prog, filename);
                     if (unlink(filename) != 0) {
@@ -295,7 +295,6 @@
                 }
                 break;
             }
-        case FILE_REGULAR:
             if (access(filename, R_OK|W_OK) < 0) {
                 fprintf(stderr, "%s: no rw access to %s\n", prog, filename);
                 exit(1);
@@ -570,7 +570,7 @@
     struct stat sb;
     filetype_t ftype = filetype(path);
 
-    assert(ftype == FILE_REGULAR || ftype == FILE_LINK);
+    assert(ftype == FILE_REGULAR);
 
     if (stat(path, &sb) < 0) {
         fprintf(stderr, "%s: stat %s: %s\n", prog, path, strerror(errno));
--- scrub-2.5.2.ori/src/util.c	2012-06-21 00:00:27.000000000 +0200
+++ scrub-2.5.2/src/util.c	2021-08-10 15:38:26.748107704 +0200
@@ -72,6 +72,15 @@
     return n;
 }
 
+/* Indicates whether the file represented by 'path' is a symlink.
+ */
+int
+is_symlink(char *path)
+{
+    struct stat sb;
+    return lstat(path, &sb) == 0 && S_ISLNK(sb.st_mode);
+}
+
 /* Return the type of file represented by 'path'.
  */
 filetype_t
@@ -90,10 +90,6 @@
 
     filetype_t res = FILE_NOEXIST;
 
-    if (lstat(path, &sb) == 0 && S_ISLNK(sb.st_mode)) {
-        return FILE_LINK;
-    }
-
     if (stat(path, &sb) == 0) {
         if (S_ISREG(sb.st_mode))
             res = FILE_REGULAR;
--- scrub-2.5.2.ori/src/util.h	2012-06-21 00:00:27.000000000 +0200
+++ scrub-2.5.2/src/util.h	2021-08-16 16:12:25.306572001 +0200
@@ -35,7 +35,6 @@
     FILE_REGULAR,
     FILE_CHAR,
     FILE_BLOCK,
-    FILE_LINK,
     FILE_OTHER,
 } filetype_t;
 
@@ -43,6 +42,7 @@
 
 int         read_all(int fd, unsigned char *buf, int count);
 int         write_all(int fd, const unsigned char *buf, int count);
+int         is_symlink(char *path);
 filetype_t  filetype(char *path);
 off_t       blkalign(off_t offset, int blocksize, round_t rtype);
 void *      alloc_buffer(int bufsize);