]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Correctly count variables when parsing the configfile (Thanks dbp)
authorMichael Stapelberg <michael@stapelberg.de>
Fri, 26 Nov 2010 10:25:02 +0000 (11:25 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Fri, 26 Nov 2010 10:25:02 +0000 (11:25 +0100)
src/cfgparse.y

index 58ff6e9caf6e4c16f9d1655be4536354137f6388..a9bda33d145341e6245182c5f5cc9a07581b020d 100644 (file)
@@ -119,14 +119,21 @@ void parse_file(const char *f) {
          * how much extra bytes it requires when replaced. */
         struct Variable *current, *nearest;
         int extra_bytes = 0;
+        /* We need to copy the buffer because we need to invalidate the
+         * variables (otherwise we will count them twice, which is bad when
+         * 'extra' is negative) */
+        char *bufcopy = sstrdup(buf);
         SLIST_FOREACH(current, &variables, variables) {
                 int extra = (strlen(current->value) - strlen(current->key));
                 char *next;
                 for (next = buf;
                      (next = strcasestr(buf + (next - buf), current->key)) != NULL;
-                     next += strlen(current->key))
+                     next += strlen(current->key)) {
+                        *next = '_';
                         extra_bytes += extra;
+                }
         }
+        FREE(bufcopy);
 
         /* Then, allocate a new buffer and copy the file over to the new one,
          * but replace occurences of our variables */