]> granicus.if.org Git - php/commitdiff
fix getting/setting of all 16/32 values in zip
authorGreg Beaver <cellog@php.net>
Sun, 15 Feb 2009 19:22:42 +0000 (19:22 +0000)
committerGreg Beaver <cellog@php.net>
Sun, 15 Feb 2009 19:22:42 +0000 (19:22 +0000)
ext/phar/zip.c

index b03b246dc6b7b6a55a6dc9a11c9123b6319f1208..c12f53b5b960eb3d8f48590f5bc3718b60f2e9f3 100644 (file)
 #include "phar_internal.h"
 
 #ifdef WORDS_BIGENDIAN
-# define PHAR_GET_32(buffer) (((((unsigned char*)(buffer))[3]) << 24) \
-               | ((((unsigned char*)(buffer))[2]) << 16) \
-               | ((((unsigned char*)(buffer))[1]) <<  8) \
-               | (((unsigned char*)(buffer))[0]))
-# define PHAR_GET_16(buffer) (((((unsigned char*)(buffer))[1]) <<  8) \
-               | (((unsigned char*)(buffer))[0]))
+static inline php_uint32 phar_fix_32(php_uint32 buffer)
+{
+       return ((((unsigned char *)&buffer)[3]) << 24) |
+               ((((unsigned char *)&buffer)[2]) << 16) |
+               ((((unsigned char *)&buffer)[1]) << 8) |
+               (((unsigned char *)&buffer)[0]);
+}
+static inline php_uint16 phar_fix_16(php_uint16 buffer)
+{
+       return ((((unsigned char *)&buffer)[1]) << 8) | ((unsigned char *)&buffer)[0];
+}
+# define PHAR_GET_32(buffer) phar_fix_32((php_uint32)(buffer))
+# define PHAR_GET_16(buffer) phar_fix_16((php_uint16)(buffer))
 # define PHAR_SET_32(buffer) PHAR_GET_32(buffer)
 # define PHAR_SET_16(buffer) PHAR_GET_16(buffer)
 #else
@@ -687,7 +694,6 @@ static int phar_zip_changed_apply(void *data, void *arg TSRMLS_DC) /* {{{ */
        php_uint32 newcrc32;
        off_t offset;
        int not_really_modified = 0;
-
        entry = (phar_entry_info *)data;
        p = (struct _phar_zip_pass*) arg;