- improve libmagic support
authorMichael Wallner <mike@php.net>
Wed, 7 Sep 2005 10:17:56 +0000 (10:17 +0000)
committerMichael Wallner <mike@php.net>
Wed, 7 Sep 2005 10:17:56 +0000 (10:17 +0000)
config.w32
http.c
http_api.c

index f6cf48977166f059ce230a7266604830472120cb..a537fb95f45c00431e4900d67694772abd3e2ee1 100644 (file)
@@ -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 3d634d357e8bccdcba5ed4df38f2c884ce73df5c..8d65cd155ea50d3a7f0803eb5f8acedbd08a502c 100644 (file)
--- 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
index e2019ad47a4a4de301b7bc0f0a902ab9e4e7b3b9..4e6942ad6ab1a466ac47eb738c3c93f48e75b706 100644 (file)
@@ -37,6 +37,9 @@
 #include <ctype.h>
 
 #ifdef HTTP_HAVE_MAGIC
+#      if defined(PHP_WIN32) && !defined(USE_MAGIC_DLL)
+#              define USE_MAGIC_STATIC
+#      endif
 #      include <magic.h>
 #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