]> Sergey Matveev's repositories - nnn.git/commitdiff
realpath allocates memory
authorArun Prakash Jana <engineerarun@gmail.com>
Sat, 29 Feb 2020 07:26:10 +0000 (12:56 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sat, 29 Feb 2020 07:26:10 +0000 (12:56 +0530)
src/nnn.c

index 451158733f6b4e2a78c2fd6d9e49a9c2ca747f7d..d939eb6feead711b4ed22900b9c24a30b168b2f5 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -2926,12 +2926,10 @@ static bool parsekvpair(kv **arr, char **envcpy, const uchar id, ushort *items)
                return FALSE;
        }
 
-       if (nextkey - ptr > 1) {
-               --nextkey;
+       if (nextkey - ptr > 1)
                /* Clear trailing ; or / */
-               if (*nextkey == ';' || (*nextkey == '/' && *(nextkey - 1) != ':'))
+               if (*--nextkey == ';')
                        *(*envcpy + (nextkey - ptr)) = '\0';
-       }
 
        ptr = *envcpy;
        nextkey = ptr;
@@ -2950,10 +2948,6 @@ static bool parsekvpair(kv **arr, char **envcpy, const uchar id, ushort *items)
                }
 
                if (*ptr == ';') {
-                       /* Remove trailing space */
-                       if (i > 0 && *(ptr - 1) == '/')
-                               *(ptr - 1) = '\0';
-
                        *ptr = '\0';
                        nextkey = ptr + 1;
                }
@@ -2996,20 +2990,11 @@ static char *get_kv_val(kv *kvarr, char *buf, int key, uchar max, bool path)
                                ssize_t len = strlen(home);
                                ssize_t loclen = strlen(kvarr[r].val);
 
-                               if (!buf) {
-                                       buf = (char *)malloc(len + loclen);
-                                       if (!buf) {
-                                               DPRINTF_S(strerror(errno));
-                                               return NULL;
-                                       }
-                               }
-
-                               xstrlcpy(buf, home, len + 1);
-                               xstrlcpy(buf + len, kvarr[r].val + 1, loclen);
-                               return buf;
+                               xstrlcpy(g_buf, home, len + 1);
+                               xstrlcpy(g_buf + len, kvarr[r].val + 1, loclen);
                        }
 
-                       return realpath(kvarr[r].val, buf);
+                       return realpath(((kvarr[r].val[0] == '~') ? g_buf : kvarr[r].val), buf);
                }
        }