summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Huddleston <jeremyhu@apple.com>2009-11-30 11:03:59 -0800
committerKeith Packard <keithp@keithp.com>2009-11-30 17:06:58 -0800
commitf4fc3406720410e37a2bce1b782cba0f0b734e42 (patch)
treefae9fafe872321bef4ae794f23f8d551472d89c4
parent66a9616d645f5a23225251d197e00b94c79274f6 (diff)
XQuartz: Drop calls to alloca
This makes us more consistent with the rest of the codebase, using xalloc/xfree Signed-off-by: Jeremy Huddleston <jeremyhu@freedesktop.org> Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--hw/xquartz/mach-startup/stub.c12
-rw-r--r--hw/xquartz/xpr/x-hook.c12
-rw-r--r--hw/xquartz/xpr/xprCursor.c13
3 files changed, 28 insertions, 9 deletions
diff --git a/hw/xquartz/mach-startup/stub.c b/hw/xquartz/mach-startup/stub.c
index af1c59efb..c8686e78f 100644
--- a/hw/xquartz/mach-startup/stub.c
+++ b/hw/xquartz/mach-startup/stub.c
@@ -306,12 +306,12 @@ int main(int argc, char **argv, char **envp) {
/* We have fixed-size string lengths due to limitations in IPC,
* so we need to copy our argv and envp.
*/
- newargv = (string_array_t)alloca(argc * sizeof(string_t));
- newenvp = (string_array_t)alloca(envpc * sizeof(string_t));
-
+ newargv = (string_array_t)malloc(argc * sizeof(string_t));
+ newenvp = (string_array_t)malloc(envpc * sizeof(string_t));
+
if(!newargv || !newenvp) {
fprintf(stderr, "Xquartz: Memory allocation failure\n");
- exit(EXIT_FAILURE);
+ return EXIT_FAILURE;
}
for(i=0; i < argc; i++) {
@@ -322,6 +322,10 @@ int main(int argc, char **argv, char **envp) {
}
kr = start_x11_server(mp, newargv, argc, newenvp, envpc);
+
+ free(newargv);
+ free(newenvp);
+
if (kr != KERN_SUCCESS) {
fprintf(stderr, "Xquartz: start_x11_server: %s\n", mach_error_string(kr));
return EXIT_FAILURE;
diff --git a/hw/xquartz/xpr/x-hook.c b/hw/xquartz/xpr/x-hook.c
index bb873bbfb..03e7f8553 100644
--- a/hw/xquartz/xpr/x-hook.c
+++ b/hw/xquartz/xpr/x-hook.c
@@ -34,6 +34,7 @@
#include "x-hook.h"
#include <stdlib.h>
#include <assert.h>
+#include "os.h"
#define CELL_NEW(f,d) X_PFX (list_prepend) ((x_list *) (f), (d))
#define CELL_FREE(c) X_PFX (list_free_1) (c)
@@ -79,9 +80,13 @@ X_PFX (hook_run) (x_list *lst, void *arg)
int length, i;
length = X_PFX (list_length) (lst);
- fun = alloca (sizeof (x_hook_function *) * length);
- data = alloca (sizeof (void *) * length);
+ fun = xalloc (sizeof (x_hook_function *) * length);
+ data = xalloc (sizeof (void *) * length);
+ if(!fun || !data) {
+ FatalError("Failed to allocate memory in %s\n", __func__);
+ }
+
for (i = 0, node = lst; node != NULL; node = node->next, i++)
{
cell = node->data;
@@ -93,6 +98,9 @@ X_PFX (hook_run) (x_list *lst, void *arg)
{
(*fun[i]) (arg, data[i]);
}
+
+ xfree(fun);
+ xfree(data);
}
X_EXTERN void
diff --git a/hw/xquartz/xpr/xprCursor.c b/hw/xquartz/xpr/xprCursor.c
index b577fc099..fbaf825de 100644
--- a/hw/xquartz/xpr/xprCursor.c
+++ b/hw/xquartz/xpr/xprCursor.c
@@ -95,7 +95,10 @@ load_cursor(CursorPtr src, int screen)
const uint32_t *be_data=(uint32_t *) src->bits->argb;
unsigned i;
rowbytes = src->bits->width * sizeof (CARD32);
- data=alloca (rowbytes * src->bits->height);
+ data = xalloc(rowbytes * src->bits->height);
+ if(!data) {
+ FatalError("Failed to allocate memory in %s\n", __func__);
+ }
for(i=0;i<(src->bits->width*src->bits->height);i++)
data[i]=ntohl(be_data[i]);
#endif
@@ -118,8 +121,11 @@ load_cursor(CursorPtr src, int screen)
/* round up to 8 pixel boundary so we can convert whole bytes */
rowbytes = ((src->bits->width * 4) + 31) & ~31;
- data = alloca(rowbytes * src->bits->height);
-
+ data = xalloc(rowbytes * src->bits->height);
+ if(!data) {
+ FatalError("Failed to allocate memory in %s\n", __func__);
+ }
+
if (!src->bits->emptyMask)
{
ycount = src->bits->height;
@@ -168,6 +174,7 @@ load_cursor(CursorPtr src, int screen)
}
err = xp_set_cursor(width, height, hot_x, hot_y, data, rowbytes);
+ xfree(data);
return err == Success;
}