back to dev
[m6w6/ext-http] / php_http_etag.c
index 3a69756b70f53259e6fd5cd2709ca498010a3456..3604ad8673957f6ca4f52f35420fe06cb15eae14 100644 (file)
@@ -6,7 +6,7 @@
     | modification, are permitted provided that the conditions mentioned |
     | in the accompanying LICENSE file are met.                          |
     +--------------------------------------------------------------------+
-    | Copyright (c) 2004-2011, Michael Wallner <mike@php.net>            |
+    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
     +--------------------------------------------------------------------+
 */
 
@@ -20,7 +20,7 @@
 #include <ext/standard/sha1.h>
 #include <ext/standard/md5.h>
 
-PHP_HTTP_API php_http_etag_t *php_http_etag_init(const char *mode TSRMLS_DC)
+php_http_etag_t *php_http_etag_init(const char *mode TSRMLS_DC)
 {
        void *ctx;
        php_http_etag_t *e;
@@ -52,7 +52,7 @@ PHP_HTTP_API php_http_etag_t *php_http_etag_init(const char *mode TSRMLS_DC)
        return e;
 }
 
-PHP_HTTP_API char *php_http_etag_finish(php_http_etag_t *e)
+char *php_http_etag_finish(php_http_etag_t *e)
 {
        unsigned char digest[128] = {0};
        char *etag = NULL;
@@ -61,11 +61,15 @@ PHP_HTTP_API char *php_http_etag_finish(php_http_etag_t *e)
                unsigned char buf[4];
 
                *((uint *) e->ctx) = ~*((uint *) e->ctx);
+#ifdef WORDS_BIGENDIAN
+               etag = php_http_etag_digest((unsigned char *) e->ctx, 4);
+#else
                buf[0] = ((unsigned char *) e->ctx)[3];
                buf[1] = ((unsigned char *) e->ctx)[2];
                buf[2] = ((unsigned char *) e->ctx)[1];
                buf[3] = ((unsigned char *) e->ctx)[0];
                etag = php_http_etag_digest(buf, 4);
+#endif
        } else if ((!strcasecmp(e->mode, "sha1"))) {
                PHP_SHA1Final(digest, e->ctx);
                etag = php_http_etag_digest(digest, 20);
@@ -90,7 +94,7 @@ PHP_HTTP_API char *php_http_etag_finish(php_http_etag_t *e)
        return etag;
 }
 
-PHP_HTTP_API size_t php_http_etag_update(php_http_etag_t *e, const char *data_ptr, size_t data_len)
+size_t php_http_etag_update(php_http_etag_t *e, const char *data_ptr, size_t data_len)
 {
        if (!strcasecmp(e->mode, "crc32b")) {
                uint i, c = *((uint *) e->ctx);