diff options
| author | Karl Heuer | 1995-04-19 21:04:01 +0000 |
|---|---|---|
| committer | Karl Heuer | 1995-04-19 21:04:01 +0000 |
| commit | cca176a050c1a7a4ce91206f64b4f8bb0febfe58 (patch) | |
| tree | 8be92503fd5e55d46051b87c310e8c65e980ea3c /src | |
| parent | 60a8823e0bb5d17c322f13dae2702aab2c80e8c8 (diff) | |
| download | emacs-cca176a050c1a7a4ce91206f64b4f8bb0febfe58.tar.gz emacs-cca176a050c1a7a4ce91206f64b4f8bb0febfe58.zip | |
(x_window): Use (or reuse) frame's namebuf instead of a
temp var. This avoids a storage leak.
Diffstat (limited to 'src')
| -rw-r--r-- | src/xfns.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/src/xfns.c b/src/xfns.c index 19fc63ed7d4..28208a874f8 100644 --- a/src/xfns.c +++ b/src/xfns.c | |||
| @@ -2325,27 +2325,21 @@ x_window (f, window_prompting, minibuffer_only) | |||
| 2325 | Widget shell_widget; | 2325 | Widget shell_widget; |
| 2326 | Widget pane_widget; | 2326 | Widget pane_widget; |
| 2327 | Widget frame_widget; | 2327 | Widget frame_widget; |
| 2328 | char* name; | ||
| 2329 | Arg al [25]; | 2328 | Arg al [25]; |
| 2330 | int ac; | 2329 | int ac; |
| 2331 | 2330 | ||
| 2332 | BLOCK_INPUT; | 2331 | BLOCK_INPUT; |
| 2333 | 2332 | ||
| 2334 | if (STRINGP (f->name)) | 2333 | { |
| 2335 | { | 2334 | char *str = (STRINGP (f->name) ? XSTRING (f->name)->data : "emacs"); |
| 2336 | /* This is a storage leak, but unless people create | 2335 | f->namebuf = (char *) xrealloc (f->namebuf, strlen (str) + 1); |
| 2337 | thousands of frames, that's ok. | 2336 | strcpy (f->namebuf, str); |
| 2338 | Fix it later by making a new slot in the frame to hold this. */ | 2337 | } |
| 2339 | name = (char *) xmalloc (XSTRING (f->name)->size + 1); | ||
| 2340 | bcopy (XSTRING (f->name)->data, name, XSTRING (f->name)->size + 1); | ||
| 2341 | } | ||
| 2342 | else | ||
| 2343 | name = "emacs"; | ||
| 2344 | 2338 | ||
| 2345 | ac = 0; | 2339 | ac = 0; |
| 2346 | XtSetArg (al[ac], XtNallowShellResize, 1); ac++; | 2340 | XtSetArg (al[ac], XtNallowShellResize, 1); ac++; |
| 2347 | XtSetArg (al[ac], XtNinput, 1); ac++; | 2341 | XtSetArg (al[ac], XtNinput, 1); ac++; |
| 2348 | shell_widget = XtAppCreateShell (name, EMACS_CLASS, | 2342 | shell_widget = XtAppCreateShell (f->namebuf, EMACS_CLASS, |
| 2349 | topLevelShellWidgetClass, | 2343 | topLevelShellWidgetClass, |
| 2350 | FRAME_X_DISPLAY (f), al, ac); | 2344 | FRAME_X_DISPLAY (f), al, ac); |
| 2351 | 2345 | ||
| @@ -2373,7 +2367,7 @@ x_window (f, window_prompting, minibuffer_only) | |||
| 2373 | XtSetArg (al[ac], XtNallowResize, 1); ac++; | 2367 | XtSetArg (al[ac], XtNallowResize, 1); ac++; |
| 2374 | XtSetArg (al[ac], XtNresizeToPreferred, 1); ac++; | 2368 | XtSetArg (al[ac], XtNresizeToPreferred, 1); ac++; |
| 2375 | XtSetArg (al[ac], XtNemacsFrame, f); ac++; | 2369 | XtSetArg (al[ac], XtNemacsFrame, f); ac++; |
| 2376 | frame_widget = XtCreateWidget (name, | 2370 | frame_widget = XtCreateWidget (f->namebuf, |
| 2377 | emacsFrameClass, | 2371 | emacsFrameClass, |
| 2378 | pane_widget, al, ac); | 2372 | pane_widget, al, ac); |
| 2379 | lw_set_main_areas (pane_widget, f->display.x->menubar_widget, frame_widget); | 2373 | lw_set_main_areas (pane_widget, f->display.x->menubar_widget, frame_widget); |