]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Correctly handle workspace names which do not start with a zero
authorMichael Stapelberg <michael@stapelberg.de>
Mon, 5 Sep 2011 20:21:10 +0000 (22:21 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 5 Sep 2011 20:21:10 +0000 (22:21 +0200)
src/randr.c
src/workspace.c

index 6b6cd67d0e35ba524def157e7c0fa138c1f8691d..dd30925b9301c654132105bda8a23f325e452203 100644 (file)
@@ -447,10 +447,12 @@ void init_ws_for_output(Output *output, Con *content) {
         if (!exists) {
             /* Set ->num to the number of the workspace, if the name actually
              * is a number or starts with a number */
-            long parsed_num = strtol(ws->name, NULL, 10);
+            char *endptr = NULL;
+            long parsed_num = strtol(ws->name, &endptr, 10);
             if (parsed_num == LONG_MIN ||
                 parsed_num == LONG_MAX ||
-                parsed_num <= 0)
+                parsed_num < 0 ||
+                endptr == ws->name)
                 ws->num = -1;
             else ws->num = parsed_num;
             LOG("Used number %d for workspace with name %s\n", ws->num, ws->name);
index 963fa64bb5e994c2c2112925f54611e189fe9dcf..27899a3781656ce61b301b217704aef3f11c2f8e 100644 (file)
@@ -49,11 +49,12 @@ Con *workspace_get(const char *num, bool *created) {
         workspace->name = sstrdup(num);
         /* We set ->num to the number if this workspace’s name consists only of
          * a positive number. Otherwise it’s a named ws and num will be -1. */
-
-        long parsed_num = strtol(num, NULL, 10);
+        char *endptr = NULL;
+        long parsed_num = strtol(num, &endptr, 10);
         if (parsed_num == LONG_MIN ||
             parsed_num == LONG_MAX ||
-            parsed_num < 0)
+            parsed_num < 0 ||
+            endptr == num)
             workspace->num = -1;
         else workspace->num = parsed_num;
         LOG("num = %d\n", workspace->num);