From 75d2bbcf0f39b9c85bc270728343f61dabebce2d Mon Sep 17 00:00:00 2001 From: marha Date: Tue, 8 Dec 2009 11:23:34 +0000 Subject: Git update 8/12/2009 --- xorg-server/hw/xquartz/mach-startup/stub.c | 12 ++++++++---- xorg-server/hw/xquartz/xpr/x-hook.c | 12 ++++++++++-- xorg-server/hw/xquartz/xpr/xprCursor.c | 13 ++++++++++--- 3 files changed, 28 insertions(+), 9 deletions(-) (limited to 'xorg-server/hw/xquartz') diff --git a/xorg-server/hw/xquartz/mach-startup/stub.c b/xorg-server/hw/xquartz/mach-startup/stub.c index af1c59efb..c8686e78f 100644 --- a/xorg-server/hw/xquartz/mach-startup/stub.c +++ b/xorg-server/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/xorg-server/hw/xquartz/xpr/x-hook.c b/xorg-server/hw/xquartz/xpr/x-hook.c index bb873bbfb..03e7f8553 100644 --- a/xorg-server/hw/xquartz/xpr/x-hook.c +++ b/xorg-server/hw/xquartz/xpr/x-hook.c @@ -34,6 +34,7 @@ #include "x-hook.h" #include #include +#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/xorg-server/hw/xquartz/xpr/xprCursor.c b/xorg-server/hw/xquartz/xpr/xprCursor.c index b577fc099..fbaf825de 100644 --- a/xorg-server/hw/xquartz/xpr/xprCursor.c +++ b/xorg-server/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; } -- cgit v1.2.3