[Xquartz-changes] xserver: Branch 'server-1.4-apple' - 2 commits

Jeremy Huddleston jeremyhu at freedesktop.org
Wed Jan 13 14:45:56 PST 2010


 hw/xquartz/mach-startup/stub.c |   12 ++++++++----
 hw/xquartz/xpr/x-hook.c        |   15 +++++++++++++--
 hw/xquartz/xpr/xprCursor.c     |   13 ++++++++++---
 3 files changed, 31 insertions(+), 9 deletions(-)

New commits:
commit 3f75966023f4cf3510ca68eee412ef312879d013
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Wed Jan 13 14:39:54 2010 -0800

    XQuartz: Don't FatalError in x_hook_run if the list is empty
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at freedesktop.org>
    (cherry picked from commit 6f6a99abc12ddee82898fdabfb50c17e90e094b9)

diff --git a/hw/xquartz/xpr/x-hook.c b/hw/xquartz/xpr/x-hook.c
index 03e7f85..5b850fe 100644
--- a/hw/xquartz/xpr/x-hook.c
+++ b/hw/xquartz/xpr/x-hook.c
@@ -79,6 +79,9 @@ X_PFX (hook_run) (x_list *lst, void *arg)
     void **data;
     int length, i;
 
+    if(!lst)
+        return;
+
     length = X_PFX (list_length) (lst);
     fun = xalloc (sizeof (x_hook_function *) * length);
     data = xalloc (sizeof (void *) * length);
commit 27a5b8f6cd1868dbb3fca49ff12eda7b14d0eb5f
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Mon Nov 30 11:03:59 2009 -0800

    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 at freedesktop.org>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit f4fc3406720410e37a2bce1b782cba0f0b734e42)

diff --git a/hw/xquartz/mach-startup/stub.c b/hw/xquartz/mach-startup/stub.c
index dad689e..ca88795 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 bb873bb..03e7f85 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 4750056..9b960b3 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;
 }
 


More information about the Xquartz-changes mailing list