remove ./ from directory name
authorLaurent Mazet <mazet@softndesign.org>
Sat, 18 Jan 2025 15:17:10 +0000 (16:17 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Sat, 18 Jan 2025 15:17:10 +0000 (16:17 +0100)
fm.c
function.c

diff --git a/fm.c b/fm.c
index 14b28d160c11689c7ea00b6c0204a54467a430f2..7b5805f54a439b23e53dd2c638fc50dcbd9eb7db 100644 (file)
--- a/fm.c
+++ b/fm.c
@@ -91,10 +91,11 @@ int main (int argc, char *argv[])
                 VERBOSE (ERROR, fprintf (stderr, "%s: no directory name\n", progname));
                 return usage (1);
             }
-            if (dirname[panel] == NULL) {
+            if (dirname[panel] != NULL) {
                 free (dirname[panel]);
             }
             dirname[panel] = strdup (arg);
+           CHECKALLOC (dirname[panel]);
             panel = (panel + 1) % MAXPANELS;
             break;
         case 'v':
@@ -127,9 +128,6 @@ int main (int argc, char *argv[])
         }
     }
     for (i = 0; i < MAXPANELS; i++) {
-        if (dirname[i] == NULL) {
-            dirname[i] = strdup (".");
-        }
     }
 
     /* init curses */
@@ -212,7 +210,7 @@ int main (int argc, char *argv[])
                         freelist (list[_i]);
                         freewindow (windir[_i]);
                     }
-                    VERBOSE (ERROR, fprintf (stderr, "can't read directory '%s'\n", dirname[i]));
+                    VERBOSE (ERROR, fprintf (stderr, "can't read directory '%s'\n", (dirname[i]) ? dirname[i] : "."));
                     return 1;
                 }
             }
@@ -314,8 +312,8 @@ int main (int argc, char *argv[])
                 for (i = 0; i < list[panel]->nb; i++) {
                     current = list[panel]->tab + i;
                     if (current->selected) {
-                        char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
-                        char *dest = strdupcat (dirname[(panel + 1 ) % MAXPANELS], NULL);
+                        char *src = newfilename (dirname[panel], current->name);
+                        char *dest = dirname[(panel + 1 ) % MAXPANELS];
                         char *msg = processcopy (dest, src);
                         if (msg) {
                             msgwindow (msg, winscreen, 0);
@@ -323,7 +321,6 @@ int main (int argc, char *argv[])
                             free (msg);
                         }
                         free (src);
-                        free (dest);
                     }
                 }
                 freelist (list[panel]);
@@ -335,7 +332,7 @@ int main (int argc, char *argv[])
                 for (i = 0; i < list[panel]->nb; i++) {
                     current = list[panel]->tab + i;
                     if (current->selected) {
-                        char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
+                        char *src = newfilename (dirname[panel], current->name);
                         char *msg = processdelete (src);
                         if (msg) {
                             msgwindow (msg, winscreen, 0);
@@ -365,8 +362,8 @@ int main (int argc, char *argv[])
                 for (i = 0; i < list[panel]->nb; i++) {
                     current = list[panel]->tab + i;
                     if (current->selected) {
-                        char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
-                        char *dest = strdupcat (dirname[(panel + 1 ) % MAXPANELS], SEPARATOR, current->name, NULL);
+                        char *src = newfilename (dirname[panel], current->name);
+                        char *dest = newfilename (dirname[(panel + 1 ) % MAXPANELS], current->name);
                         char *msg = processmove (dest, src);
                         if (msg) {
                             msgwindow (msg, winscreen, 0);
@@ -385,7 +382,7 @@ int main (int argc, char *argv[])
             case ALT_N: /* new dir */
                 string = getwindow ("New directory", winscreen, MAXFNAME / 2, MAXFNAME, NULL);
                 if (string) {
-                    char *dest = strdupcat (dirname[panel], SEPARATOR, string, NULL);
+                    char *dest = newfilename (dirname[panel], string);
                     char *msg = processmkdir (dest);
                     if (msg) {
                         msgwindow (msg, winscreen, 0);
@@ -414,8 +411,8 @@ int main (int argc, char *argv[])
                         getch ();
                         free (buf);
                     } else {
-                        char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
-                        char *dest = strdupcat (dirname[panel], SEPARATOR, string, NULL);
+                        char *src = newfilename (dirname[panel], current->name);
+                        char *dest = newfilename (dirname[panel], string);
                         char *msg = processmove (dest, src);
                         if (msg) {
                             msgwindow (msg, winscreen, 0);
@@ -444,7 +441,7 @@ int main (int argc, char *argv[])
                 menuwindow (winmenu, "Help up(I) down(J) Quit", NULL);
                 elementwindow (winelem[0], current->name, NULL);
                 {
-                    char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
+                    char *src = newfilename (dirname[panel], current->name);
                     char *msg = filewindow (src, winscreen);
                     if (msg) {
                         msgwindow (msg, winscreen, 0);
@@ -469,7 +466,7 @@ int main (int argc, char *argv[])
                         for (i = 0; i < list[panel]->nb; i++) {
                             current = list[panel]->tab + i;
                             if (current->selected) {
-                                char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
+                                char *src = newfilename (dirname[panel], current->name);
                                 char *msg = processchmod (src, mode);
                                 if (msg) {
                                     msgwindow (msg, winscreen, 0);
index 6d74df04dbd00ea08e6b7b76996ad1a4c988aa0f..62cfd1bf357e00723dfbc27ffd3437a952d72db3 100644 (file)
@@ -42,12 +42,14 @@ char *strdupcat (char *init, ...)
     va_start (va, init);
 
     char *string = strdup (init);
+    CHECKALLOC (string);
     for (;;) {
         char *buf = va_arg (va, char *);
         if (buf == NULL) {
             break;
         }
         string = (char *) realloc (string, strlen (string) + strlen (buf) + 1);
+        CHECKALLOC (string);
         strcat (string, buf);
     }
 
@@ -83,9 +85,8 @@ char *itoo (int x)
 
 char *newfilename (char *dirname, char *filename)
 {
-    char *name = (char *) calloc (strlen (dirname) + strlen (SEPARATOR) + strlen (filename) + 1, 1);
+    char *name = (dirname) ? strdupcat (dirname, SEPARATOR, filename, NULL) : strdup (filename);
     CHECKALLOC (name);
-    strcat (strcat(strcpy (name, dirname), SEPARATOR), filename);
     return name;
 }
 
@@ -175,7 +176,7 @@ list_t *_addelement (list_t *list, char *dirname, char *filename, type_t type)
 
 list_t *exploredir (char *dirname)
 {
-    DIR *dir = opendir (dirname);
+    DIR *dir = opendir (dirname ? dirname : ".");
     if (dir == NULL) {
         return NULL;
     }
@@ -432,7 +433,7 @@ char *processcopy (char *dest, char *src)
             char *basename = strrchr (src, *SEPARATOR);
             basename = (basename) ? basename + 1 : src;
             VERBOSE (DEBUG, fprintf (stderr, "basename '%s'\n", basename));
-            char *nextdest = strdupcat (dest, SEPARATOR, basename, NULL);
+            char *nextdest = newfilename (dest, basename);
             VERBOSE (DEBUG, fprintf (stderr, "mkdir '%s'\n", nextdest));
             if (MKDIR (nextdest) != 0) {
                 msg = strdupcat ("Can't create directory '", nextdest, "'", NULL);
@@ -445,7 +446,7 @@ char *processcopy (char *dest, char *src)
                         if ((strcmp (dp->d_name, ".") == 0) || (strcmp (dp->d_name, "..") == 0)) {
                             continue;
                         }
-                        char *nextsrc = strdupcat (src, SEPARATOR, dp->d_name, NULL);
+                        char *nextsrc = newfilename (src, dp->d_name);
                         msg = processcopy (nextdest, nextsrc);
                         free (nextsrc);
                     }
@@ -459,7 +460,7 @@ char *processcopy (char *dest, char *src)
             char *basename = strrchr (src, *SEPARATOR);
             basename = (basename) ? basename + 1 : src;
             VERBOSE (DEBUG, fprintf (stderr, "basename '%s'\n", basename));
-            char *newdest = strdupcat (dest, SEPARATOR, basename, NULL);
+            char *newdest = newfilename (dest, basename);
             struct stat sb;
             if (STAT (newdest, &sb) == 0) {
                 msg = strdupcat ("File '", newdest, "' already exists", NULL);
@@ -492,7 +493,7 @@ char *processdelete (char *name)
                     if ((strcmp (dp->d_name, ".") == 0) || (strcmp (dp->d_name, "..") == 0)) {
                         continue;
                     }
-                    char *next = strdupcat (name, SEPARATOR, dp->d_name, NULL);
+                    char *next = newfilename (name, dp->d_name);
                     msg = processdelete (next);
                     free (next);
                 }
@@ -569,7 +570,7 @@ char *processchmod (char *name, int mode)
                     if ((strcmp (dp->d_name, ".") == 0) || (strcmp (dp->d_name, "..") == 0)) {
                         continue;
                     }
-                    char *next = strdupcat (name, SEPARATOR, dp->d_name, NULL);
+                    char *next = newfilename (name, dp->d_name);
                     msg = processchmod (next, mode);
                     free (next);
                 }