]> git.sur5r.net Git - i3/i3/commitdiff
Fix memory leaks
authorMichael Stapelberg <michael@stapelberg.de>
Fri, 26 Mar 2010 00:52:39 +0000 (01:52 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Fri, 26 Mar 2010 00:52:39 +0000 (01:52 +0100)
include/data.h
src/cfgparse.y
src/randr.c

index 2d8c7b1a66a83a9a048eff456f036099bba3becb..3618dfb8560f938f3f234c2174c6e89459ecdc57 100644 (file)
@@ -212,9 +212,6 @@ struct Workspace {
         /** The name of the RandR output this screen should be on */
         char *preferred_output;
 
-        /** Temporary flag needed for re-querying xinerama screens */
-        bool reassigned;
-
         /** True if any client on this workspace has its urgent flag set */
         bool urgent;
 
index b9fae726c9dbfc7802d23f59383a3d03e0200432..e2b034126c1ae8902e68cad5a9dca5e4733befef 100644 (file)
@@ -176,6 +176,14 @@ void parse_file(const char *f) {
         free(context);
         free(new);
         free(buf);
+
+        while (!SLIST_EMPTY(&variables)) {
+                current = SLIST_FIRST(&variables);
+                FREE(current->key);
+                FREE(current->value);
+                SLIST_REMOVE_HEAD(&variables, variables);
+                FREE(current);
+        }
 }
 
 %}
@@ -279,7 +287,7 @@ bind:
 
                 new->keycode = $<number>2;
                 new->mods = $<number>1;
-                new->command = sstrdup($<string>4);
+                new->command = $<string>4;
 
                 $<binding>$ = new;
         }
@@ -291,9 +299,9 @@ bindsym:
                 printf("\tFound symbolic mod%d with key %s and command %s\n", $<number>1, $<string>2, $<string>4);
                 Binding *new = scalloc(sizeof(Binding));
 
-                new->symbol = sstrdup($<string>2);
+                new->symbol = $<string>2;
                 new->mods = $<number>1;
-                new->command = sstrdup($<string>4);
+                new->command = $<string>4;
 
                 $<binding>$ = new;
         }
@@ -323,7 +331,7 @@ mode:
                 }
 
                 struct Mode *mode = scalloc(sizeof(struct Mode));
-                mode->name = strdup($<string>3);
+                mode->name = $<string>3;
                 mode->bindings = current_bindings;
                 current_bindings = NULL;
                 SLIST_INSERT_HEAD(&modes, mode, modes);
@@ -403,7 +411,7 @@ new_window:
         TOKNEWWINDOW WHITESPACE WORD
         {
                 DLOG("new windows should start in mode %s\n", $<string>3);
-                config.default_border = strdup($<string>3);
+                config.default_border = sstrdup($<string>3);
         }
         ;
 
@@ -447,9 +455,11 @@ workspace:
                         DLOG("Invalid workspace assignment, workspace number %d out of range\n", ws_num);
                 } else {
                         Workspace *ws = workspace_get(ws_num - 1);
-                        ws->preferred_output = sstrdup($<string>7);
-                        if ($<string>8 != NULL)
+                        ws->preferred_output = $<string>7;
+                        if ($<string>8 != NULL) {
                                 workspace_set_name(ws, $<string>8);
+                                free($<string>8);
+                        }
                 }
         }
         | TOKWORKSPACE WHITESPACE NUMBER WHITESPACE workspace_name
@@ -459,8 +469,10 @@ workspace:
                         DLOG("Invalid workspace assignment, workspace number %d out of range\n", ws_num);
                 } else {
                         DLOG("workspace name to: %s\n", $<string>5);
-                        if ($<string>5 != NULL)
+                        if ($<string>5 != NULL) {
                                 workspace_set_name(workspace_get(ws_num - 1), $<string>5);
+                                free($<string>5);
+                        }
                 }
         }
         ;
@@ -484,7 +496,7 @@ assign:
                 struct Assignment *new = $<assignment>6;
                 printf("  to %d\n", new->workspace);
                 printf("  floating = %d\n", new->floating);
-                new->windowclass_title = strdup($<string>3);
+                new->windowclass_title = $<string>3;
                 TAILQ_INSERT_TAIL(&assignments, new, assignments);
         }
         ;
@@ -525,7 +537,7 @@ optional_arrow:
 ipcsocket:
         TOKIPCSOCKET WHITESPACE STR
         {
-                config.ipc_socket_path = sstrdup($<string>3);
+                config.ipc_socket_path = $<string>3;
         }
         ;
 
@@ -533,7 +545,7 @@ exec:
         TOKEXEC WHITESPACE STR
         {
                 struct Autostart *new = smalloc(sizeof(struct Autostart));
-                new->command = sstrdup($<string>3);
+                new->command = $<string>3;
                 TAILQ_INSERT_TAIL(&autostarts, new, autostarts);
         }
         ;
@@ -549,7 +561,7 @@ terminal:
 font:
         TOKFONT WHITESPACE STR
         {
-                config.font = sstrdup($<string>3);
+                config.font = $<string>3;
                 printf("font %s\n", config.font);
         }
         ;
index d46ffbc4b866a36f5e26557d21e7209e62e5acf9..e61fd9b21b5a29458fd7641ac3c1011182f2f565 100644 (file)
@@ -311,6 +311,7 @@ static void handle_output(xcb_connection_t *conn, xcb_randr_output_t id,
         if (!existing)
                 new = scalloc(sizeof(Output));
         new->id = id;
+        FREE(new->name);
         asprintf(&new->name, "%.*s",
                         xcb_randr_get_output_info_name_length(output),
                         xcb_randr_get_output_info_name(output));
@@ -325,7 +326,6 @@ static void handle_output(xcb_connection_t *conn, xcb_randr_output_t id,
                         TAILQ_INSERT_TAIL(&outputs, new, outputs);
                 else if (new->active)
                         new->to_be_disabled = true;
-                free(output);
                 return;
         }
 
@@ -335,7 +335,6 @@ static void handle_output(xcb_connection_t *conn, xcb_randr_output_t id,
                 DLOG("Skipping output %s: could not get CRTC (%p)\n",
                      new->name, crtc);
                 free(new);
-                free(output);
                 return;
         }
 
@@ -359,7 +358,6 @@ static void handle_output(xcb_connection_t *conn, xcb_randr_output_t id,
         if (!updated || !existing) {
                 if (!existing)
                         TAILQ_INSERT_TAIL(&outputs, new, outputs);
-                free(output);
                 return;
         }
 
@@ -409,6 +407,7 @@ void randr_query_outputs(xcb_connection_t *conn) {
                         continue;
 
                 handle_output(conn, randr_outputs[i], output, cts, res);
+                free(output);
         }
 
         free(res);