X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_api.c;h=eec41daa0d7068d964cc26ab7377e15dc6b78fba;hp=4e6942ad6ab1a466ac47eb738c3c93f48e75b706;hb=c04184b2188a60efed4753d7eef7f3952aed9cef;hpb=c71fd3a3bcc7231f2efc4c7520888880f42a6b3c diff --git a/http_api.c b/http_api.c index 4e6942a..eec41da 100644 --- a/http_api.c +++ b/http_api.c @@ -37,7 +37,7 @@ #include #ifdef HTTP_HAVE_MAGIC -# if defined(PHP_WIN32) && !defined(USE_MAGIC_DLL) +# if defined(PHP_WIN32) && !defined(USE_MAGIC_DLL) && !defined(USE_MAGIC_STATIC) # define USE_MAGIC_STATIC # endif # include @@ -85,7 +85,7 @@ STATUS _http_parse_key_list(const char *list, HashTable *items, char separator, int vallen = 0, keylen = 0, done = 0; zval array; - Z_ARRVAL(array) = items; + INIT_ZARR(array, items); if (!(val = strchr(list, '='))) { return FAILURE; @@ -164,22 +164,13 @@ STATUS _http_parse_key_list(const char *list, HashTable *items, char separator, /* }}} */ /* {{{ void http_error(long, long, char*) */ -void _http_error_ex(long type, long code, const char *format, ...) +void _http_error_ex(long type TSRMLS_DC, long code, const char *format, ...) { va_list args; - zend_bool throw_exception = 0; - TSRMLS_FETCH(); - - if (type == E_THROW) { - throw_exception = 1; - type = E_WARNING; - } else if (PG(error_handling) == EH_THROW) { - throw_exception = 1; - } - + va_start(args, format); #ifdef ZEND_ENGINE_2 - if (throw_exception) { + if ((type == E_THROW) || (PG(error_handling) == EH_THROW)) { char *message; vspprintf(&message, 0, format, args); @@ -206,7 +197,7 @@ void _http_log_ex(char *file, const char *ident, const char *message TSRMLS_DC) php_stream *log = php_stream_open_wrapper(file, "ab", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL); \ \ if (log) { \ - php_stream_printf(log TSRMLS_CC, "%s [%12s] %32s <%s>%s", datetime, type, msg, SG(request_info).request_uri, PHP_EOL); \ + php_stream_printf(log TSRMLS_CC, "%s\t[%s]\t%s\t<%s>%s", datetime, type, msg, SG(request_info).request_uri, PHP_EOL); \ php_stream_close(log); \ } \ \ @@ -367,15 +358,19 @@ PHP_HTTP_API char *_http_guess_content_type(const char *magicfile, long magicmod char *ct = NULL; #ifdef HTTP_HAVE_MAGIC - struct magic_set *magic = magic_open(magicmode); + /* magic_load() fails if MAGIC_MIME is set because it + cowardly adds .mime to the file name */ + struct magic_set *magic = magic_open(magicmode &~ MAGIC_MIME); if (!magic) { http_error_ex(HE_WARNING, HTTP_E_INVALID_PARAM, "Invalid magic mode: %ld", magicmode); } else if (-1 == magic_load(magic, magicfile)) { - http_error_ex(HE_WARNING, HTTP_E_RUNTIME, "Failed to load magic database '%s'", magicfile); + http_error_ex(HE_WARNING, HTTP_E_RUNTIME, "Failed to load magic database '%s' (%s)", magicfile, magic_error(magic)); } else { const char *ctype = NULL; + magic_setflags(magic, magicmode); + switch (data_mode) { case SEND_RSRC: