From: Michael Wallner Date: Wed, 7 Sep 2005 10:17:56 +0000 (+0000) Subject: - improve libmagic support X-Git-Tag: RELEASE_0_13_0~19 X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=commitdiff_plain;h=c71fd3a3bcc7231f2efc4c7520888880f42a6b3c - improve libmagic support --- diff --git a/config.w32 b/config.w32 index f6cf489..a537fb9 100644 --- a/config.w32 +++ b/config.w32 @@ -38,8 +38,10 @@ if (PHP_HTTP != "no") { WARNING("curl convenience functions not enabled; libraries and headers not found"); } + MAGIC_LIB = PHP_DEBUG != "no" ? "libmagic-staticd.lib":"libmagic-static.lib"; + if (CHECK_HEADER_ADD_INCLUDE("magic.h", "CFLAGS_HTTP") && - CHECK_LIB("magic.lib", "http", PHP_HTTP)) { + CHECK_LIB(MAGIC_LIB, "http", PHP_HTTP)) { AC_DEFINE("HTTP_HAVE_MAGIC", 1, "Have magic library"); } else { WARNING("content type guessing not enabled; libraries and headers not found"); diff --git a/http.c b/http.c index 3d634d3..8d65cd1 100644 --- a/http.c +++ b/http.c @@ -340,6 +340,11 @@ PHP_MINFO_FUNCTION(http) } #else php_info_print_table_row(2, "mhash ETag Generator:", "disabled"); +#endif +#if defined(HTTP_HAVE_MAGIC) && !defined(WONKY) + php_info_print_table_row(2, "magic MIME Guessing:", "libmagic/unknown"); +#else + php_info_print_table_row(2, "magic MIME Guessing:", "disabled"); #endif php_info_print_table_row(2, "Registered Classes:", #ifndef ZEND_ENGINE_2 diff --git a/http_api.c b/http_api.c index e2019ad..4e6942a 100644 --- a/http_api.c +++ b/http_api.c @@ -37,6 +37,9 @@ #include #ifdef HTTP_HAVE_MAGIC +# if defined(PHP_WIN32) && !defined(USE_MAGIC_DLL) +# define USE_MAGIC_STATIC +# endif # include #endif @@ -164,21 +167,26 @@ STATUS _http_parse_key_list(const char *list, HashTable *items, char separator, void _http_error_ex(long type, long code, const char *format, ...) { va_list args; + zend_bool throw_exception = 0; TSRMLS_FETCH(); - va_start(args, format); 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) { char *message; + vspprintf(&message, 0, format, args); zend_throw_exception(http_exception_get_for_code(code), message, code TSRMLS_CC); -#else - type = E_WARNING; + } else #endif - } - if (type != E_THROW) { - php_verror(NULL, "", type, format, args TSRMLS_CC); - } + php_verror(NULL, "", type, format, args TSRMLS_CC); va_end(args); } /* }}} */ @@ -393,13 +401,12 @@ PHP_HTTP_API char *_http_guess_content_type(const char *magicfile, long magicmod if (ctype) { ct = estrdup(ctype); } else { - http_error(HE_WARNING, HTTP_E_RUNTIME, "Failed to guess Content-Type"); - } - - if (magic) { - magic_close(magic); + http_error_ex(HE_WARNING, HTTP_E_RUNTIME, "Failed to guess Content-Type: %s", magic_error(magic)); } } + if (magic) { + magic_close(magic); + } #else http_error(HE_WARNING, HTTP_E_RUNTIME, "Cannot guess Content-Type; libmagic not available"); #endif