]> git.sur5r.net Git - i3/i3/commitdiff
cmdparse: correctly parse con_id/id (fixes warning)
authorMichael Stapelberg <michael@stapelberg.de>
Mon, 14 Mar 2011 22:14:40 +0000 (23:14 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 14 Mar 2011 22:14:40 +0000 (23:14 +0100)
src/cmdparse.y

index 476f7977dd2823b4eaff025ba6b9f6a2d708b31d..37605bb8f380c4b7f6ad56a31bf334359c3bbed8 100644 (file)
@@ -13,6 +13,7 @@
 #include <sys/stat.h>
 #include <unistd.h>
 #include <fcntl.h>
+#include <limits.h>
 
 #include "all.h"
 
@@ -259,16 +260,32 @@ criteria:
     | TOK_CON_ID '=' STR
     {
         printf("criteria: id = %s\n", $<string>3);
-        /* TODO: correctly parse number */
-        current_match.con_id = (Con*)atoi($<string>3);
-        printf("id as int = %p\n", current_match.con_id);
+        char *end;
+        long parsed = strtol($<string>3, &end, 10);
+        if (parsed == LONG_MIN ||
+            parsed == LONG_MAX ||
+            parsed < 0 ||
+            (end && *end != '\0')) {
+            ELOG("Could not parse con id \"%s\"\n", $<string>3);
+        } else {
+            current_match.con_id = (Con*)parsed;
+            printf("id as int = %p\n", current_match.con_id);
+        }
     }
     | TOK_ID '=' STR
     {
         printf("criteria: window id = %s\n", $<string>3);
-        /* TODO: correctly parse number */
-        current_match.id = atoi($<string>3);
-        printf("window id as int = %d\n", current_match.id);
+        char *end;
+        long parsed = strtol($<string>3, &end, 10);
+        if (parsed == LONG_MIN ||
+            parsed == LONG_MAX ||
+            parsed < 0 ||
+            (end && *end != '\0')) {
+            ELOG("Could not parse window id \"%s\"\n", $<string>3);
+        } else {
+            current_match.id = parsed;
+            printf("window id as int = %d\n", current_match.id);
+        }
     }
     | TOK_MARK '=' STR
     {