]> git.sur5r.net Git - i3/i3/blobdiff - src/fake_outputs.c
fake_outputs: Use %n format specifier instead of sprintf
[i3/i3] / src / fake_outputs.c
index 6639b3611005b3a393a1c493558724ff0122490c..447409d2a024503f6f83cd6d494070349b66d88a 100644 (file)
@@ -33,10 +33,10 @@ static Output *get_screen_at(unsigned int x, unsigned int y) {
  *
  */
 void fake_outputs_init(const char *output_spec) {
-    char useless_buffer[1024];
     const char *walk = output_spec;
     unsigned int x, y, width, height;
-    while (sscanf(walk, "%ux%u+%u+%u", &width, &height, &x, &y) == 4) {
+    int chars_consumed;
+    while (sscanf(walk, "%ux%u+%u+%u%n", &width, &height, &x, &y, &chars_consumed) == 4) {
         DLOG("Parsed output as width = %u, height = %u at (%u, %u)\n",
              width, height, x, y);
         Output *new_output = get_screen_at(x, y);
@@ -68,8 +68,7 @@ void fake_outputs_init(const char *output_spec) {
             num_screens++;
         }
 
-        /* Figure out how long the input was to skip it */
-        walk += sprintf(useless_buffer, "%ux%u+%u+%u", width, height, x, y) + 1;
+        walk += chars_consumed + 1;
     }
 
     if (num_screens == 0) {