helly           Fri Feb 14 14:43:07 2003 EDT

  Modified files:              
    /php4/ext/standard  image.c 
  Log:
  a little bit slower but somewhat tricky and more flexible and it does not 
  allocate static buffers anymore
  
Index: php4/ext/standard/image.c
diff -u php4/ext/standard/image.c:1.90 php4/ext/standard/image.c:1.91
--- php4/ext/standard/image.c:1.90      Thu Feb 13 02:02:53 2003
+++ php4/ext/standard/image.c   Fri Feb 14 14:43:06 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: image.c,v 1.90 2003/02/13 07:02:53 sniper Exp $ */
+/* $Id: image.c,v 1.91 2003/02/14 19:43:06 helly Exp $ */
 
 #include "php.h"
 #include <stdio.h>
@@ -956,11 +956,10 @@
 
 /* {{{ php_get_xbm
  */
-#define MAX_XBM_LINE_SIZE 255
 static int php_get_xbm(php_stream *stream, struct gfxinfo **result TSRMLS_DC)
 {
-    char fline[MAX_XBM_LINE_SIZE];
-    char iname[MAX_XBM_LINE_SIZE];
+    char *fline;
+    char *iname;
     char *type;
     int value;
     unsigned int width = 0, height = 0;
@@ -971,12 +970,8 @@
        if (php_stream_rewind(stream)) {
                return 0;
        }
-       while (php_stream_gets(stream, fline, MAX_XBM_LINE_SIZE)) {
-               fline[MAX_XBM_LINE_SIZE-1] = '\0';
-               if (strlen(fline) == MAX_XBM_LINE_SIZE-1) {
-                       return 0;
-               }
-       
+       while ((fline=php_stream_gets(stream, NULL, 0)) != NULL) {
+               iname = estrdup(fline); /* simple way to get necessary buffer of 
+required size */
                if (sscanf(fline, "#define %s %d", iname, &value) == 2) {
                        if (!(type = strrchr(iname, '_'))) {
                                type = iname;
@@ -987,16 +982,23 @@
                        if (!strcmp("width", type)) {
                                width = (unsigned int) value;
                                if (height) {
+                                       efree(iname);
                                        break;
                                }
                        }
                        if (!strcmp("height", type)) {
                                height = (unsigned int) value;
                                if (width) {
+                                       efree(iname);
                                        break;
                                }
                        }
                }
+               efree(fline);
+               efree(iname);
+       }
+       if (fline) {
+               efree(fline);
        }
 
        if (width && height) {



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to