]> Sergey Matveev's repositories - nnn.git/commitdiff
1-pass bookmark parsing
authorArun Prakash Jana <engineerarun@gmail.com>
Fri, 25 Jan 2019 16:33:08 +0000 (22:03 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Fri, 25 Jan 2019 16:33:08 +0000 (22:03 +0530)
src/nnn.c

index 3187a4035f3975e5970af67dde7d4845062e3fd6..7e4c1031110e2f9f6081e021f92070ba59c25c9d 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -1648,36 +1648,33 @@ static bool parsebmstr()
 {
        int i = 0;
        char *bms = getenv(env_cfg[NNN_BMS]);
-       if (!bms)
+       char *nextkey = bms;
+       if (!bms | !*bms)
                return TRUE;
 
        while (*bms && i < BM_MAX) {
-               bookmark[i].key = *bms;
-
-               if (!*++bms) {
-                       bookmark[i].key = '\0';
-                       break;
-               }
-
-               if (*bms != ':')
-                       return FALSE; /* We support single char keys only */
-
-               bookmark[i].loc = ++bms;
-               if (bookmark[i].loc[0] == '\0' || bookmark[i].loc[0] == ';') {
-                       bookmark[i].key = '\0';
-                       break;
+               if (bms == nextkey) {
+                       bookmark[i].key = *bms;
+                       if (*++bms != ':')
+                               return FALSE;
+                       if (*++bms == '\0')
+                               return FALSE;
+                       bookmark[i].loc = bms;
+                       ++i;
                }
 
-               while (*bms && *bms != ';')
-                       ++bms;
-
-               if (*bms)
+               if (*bms == ';') {
                        *bms = '\0';
-               else
-                       break;
+                       nextkey = bms + 1;
+               }
 
                ++bms;
-               ++i;
+       }
+
+       if (i < BM_MAX) {
+               if (*bookmark[i - 1].loc == '\0')
+                       return FALSE;
+               bookmark[i].key = '\0';
        }
 
        return TRUE;
@@ -3903,7 +3900,7 @@ int main(int argc, char *argv[])
 
        /* Parse bookmarks string */
         if (!parsebmstr()) {
-               fprintf(stderr, "%s: 1 char per key\n", env_cfg[NNN_BMS]);
+               fprintf(stderr, "%s: malformed\n", env_cfg[NNN_BMS]);
                return 1;
         }