Hello all, 

After attempting to compile php on solaris as a 64 bit executable, and
resolving the attempt to link libcrack (32bit lib), I was greated with a
nice Bus Error. 

Upon examining the source, it looks like their are alot of areas where
longs and ints are used interchangeably. This is not good since a 64 bit
solaris executable has 64 bit longs, and 32 bit ints.

I have thrown together an initial patch that fixes this, but it does
make make some changes that should be thought about. (such as using a
long instead of an int for memmory limit and size counting) However,
Overall it should not make too big a difference. (especially on the
primarily targetted platforms whose ints and longs are the same)

I did not check anything but the core extensions, so those will need to
be looked at next.

If no one throws any major objects, I will put together a better version
of this patch and commit it upon completion.

Thanks,

-- 
Jason Greene <[EMAIL PROTECTED]>
? log_errors_max_len
? long_errors_max_len=10
? phpt
? longint.patch
Index: Zend/zend_alloc.c
===================================================================
RCS file: /repository/Zend/zend_alloc.c,v
retrieving revision 1.105
diff -u -r1.105 zend_alloc.c
--- Zend/zend_alloc.c   18 Aug 2002 21:39:05 -0000      1.105
+++ Zend/zend_alloc.c   26 Sep 2002 03:41:57 -0000
@@ -376,7 +376,7 @@
 }
 
 
-ZEND_API int zend_set_memory_limit(unsigned int memory_limit)
+ZEND_API long zend_set_memory_limit(unsigned long memory_limit)
 {
 #if MEMORY_LIMIT
        TSRMLS_FETCH();
Index: Zend/zend_alloc.h
===================================================================
RCS file: /repository/Zend/zend_alloc.h,v
retrieving revision 1.39
diff -u -r1.39 zend_alloc.h
--- Zend/zend_alloc.h   18 Aug 2002 21:39:05 -0000      1.39
+++ Zend/zend_alloc.h   26 Sep 2002 03:41:57 -0000
@@ -108,7 +108,7 @@
 #define safe_estrdup(ptr)  ((ptr)?(estrdup(ptr)):(empty_string))
 #define safe_estrndup(ptr, len) ((ptr)?(estrndup((ptr), (len))):(empty_string))
 
-ZEND_API int zend_set_memory_limit(unsigned int memory_limit);
+ZEND_API long zend_set_memory_limit(unsigned long memory_limit);
 
 ZEND_API void start_memory_manager(TSRMLS_D);
 ZEND_API void shutdown_memory_manager(int silent, int clean_cache TSRMLS_DC);
Index: Zend/zend_globals.h
===================================================================
RCS file: /repository/Zend/zend_globals.h,v
retrieving revision 1.91
diff -u -r1.91 zend_globals.h
--- Zend/zend_globals.h 23 Sep 2002 12:00:38 -0000      1.91
+++ Zend/zend_globals.h 26 Sep 2002 03:41:57 -0000
@@ -227,9 +227,9 @@
        int fast_cache_stats[MAX_FAST_CACHE_TYPES][2];
 #endif
 #if MEMORY_LIMIT
-       unsigned int memory_limit;
-       unsigned int allocated_memory;
-       unsigned int allocated_memory_peak;
+       unsigned long memory_limit;
+       unsigned long allocated_memory;
+       unsigned long allocated_memory_peak;
        unsigned char memory_exhausted;
 #endif
 };
Index: Zend/zend_ini.c
===================================================================
RCS file: /repository/Zend/zend_ini.c,v
retrieving revision 1.23
diff -u -r1.23 zend_ini.c
--- Zend/zend_ini.c     23 Sep 2002 12:00:39 -0000      1.23
+++ Zend/zend_ini.c     26 Sep 2002 03:41:57 -0000
@@ -436,12 +436,12 @@
 #else
        char *base;
 
-       base = (char *) ts_resource(*((int *) mh_arg2));
+       base = (char *) ts_resource(*((long *) mh_arg2));
 #endif
 
        p = (long *) (base+(size_t) mh_arg1);
 
-       *p = zend_atoi(new_value, new_value_length);
+       *p = zend_atol(new_value, new_value_length);
        return SUCCESS;
 }
 
Index: Zend/zend_operators.c
===================================================================
RCS file: /repository/Zend/zend_operators.c,v
retrieving revision 1.124
diff -u -r1.124 zend_operators.c
--- Zend/zend_operators.c       31 Aug 2002 20:53:48 -0000      1.124
+++ Zend/zend_operators.c       26 Sep 2002 03:41:57 -0000
@@ -36,9 +36,9 @@
 #include "ext/bcmath/number.h"
 #endif
 
-ZEND_API int zend_atoi(const char *str, int str_len)
+ZEND_API long zend_atol(const char *str, int str_len)
 {
-       int retval;
+       long retval;
 
        if (!str_len) {
                str_len = strlen(str);
Index: Zend/zend_operators.h
===================================================================
RCS file: /repository/Zend/zend_operators.h,v
retrieving revision 1.51
diff -u -r1.51 zend_operators.h
--- Zend/zend_operators.h       30 Apr 2002 14:47:29 -0000      1.51
+++ Zend/zend_operators.h       26 Sep 2002 03:41:57 -0000
@@ -183,7 +183,7 @@
 ZEND_API void zend_compare_arrays(zval *result, zval *a1, zval *a2 TSRMLS_DC);
 ZEND_API void zend_compare_objects(zval *result, zval *o1, zval *o2 TSRMLS_DC);
 
-ZEND_API int zend_atoi(const char *str, int str_len);
+ZEND_API long zend_atol(const char *str, int str_len);
 
 #define convert_to_ex_master(ppzv, lower_type, upper_type)     \
        if ((*ppzv)->type!=IS_##upper_type) {                                   \
Index: ext/mbstring/mbstring.c
===================================================================
RCS file: /repository/php4/ext/mbstring/mbstring.c,v
retrieving revision 1.99
diff -u -r1.99 mbstring.c
--- ext/mbstring/mbstring.c     26 Sep 2002 00:53:47 -0000      1.99
+++ ext/mbstring/mbstring.c     26 Sep 2002 03:41:57 -0000
@@ -631,7 +631,7 @@
                        MBSTRG(filter_illegal_mode) = 
MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG;
                } else {
                        MBSTRG(filter_illegal_mode) = 
MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
-                       MBSTRG(filter_illegal_substchar) = zend_atoi(new_value, 
new_value_length);
+                       MBSTRG(filter_illegal_substchar) = zend_atol(new_value, 
+new_value_length);
                }
        }
 
Index: ext/standard/file.h
===================================================================
RCS file: /repository/php4/ext/standard/file.h,v
retrieving revision 1.65
diff -u -r1.65 file.h
--- ext/standard/file.h 25 Sep 2002 15:25:11 -0000      1.65
+++ ext/standard/file.h 26 Sep 2002 03:41:57 -0000
@@ -114,7 +114,7 @@
        int pclose_ret;
        size_t def_chunk_size;
        int auto_detect_line_endings;
-       int default_socket_timeout;
+       long default_socket_timeout;
        char *user_agent;
 } php_file_globals;
 
Index: main/main.c
===================================================================
RCS file: /repository/php4/main/main.c,v
retrieving revision 1.491
diff -u -r1.491 main.c
--- main/main.c 25 Sep 2002 16:11:31 -0000      1.491
+++ main/main.c 26 Sep 2002 03:41:58 -0000
@@ -152,10 +152,10 @@
  */
 static PHP_INI_MH(OnChangeMemoryLimit)
 {
-       int new_limit;
+       long new_limit;
 
        if (new_value) {
-               new_limit = zend_atoi(new_value, new_value_length);
+               new_limit = zend_atol(new_value, new_value_length);
        } else {
                new_limit = 1<<30;              /* effectively, no limit */
        }
Index: main/php_globals.h
===================================================================
RCS file: /repository/php4/main/php_globals.h,v
retrieving revision 1.82
diff -u -r1.82 php_globals.h
--- main/php_globals.h  1 Sep 2002 11:33:19 -0000       1.82
+++ main/php_globals.h  26 Sep 2002 03:41:58 -0000
@@ -76,7 +76,7 @@
        zend_bool display_errors;
        zend_bool display_startup_errors;
        zend_bool log_errors;
-       int       log_errors_max_len;
+       long       log_errors_max_len;
        zend_bool ignore_repeated_errors;
        zend_bool ignore_repeated_source;
        zend_bool report_memleaks;

-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to