#include <ctype.h>
#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 <magic.h>
int vallen = 0, keylen = 0, done = 0;
zval array;
- Z_ARRVAL(array) = items;
+ INIT_ZARR(array, items);
if (!(val = strchr(list, '='))) {
return FAILURE;
/* }}} */
/* {{{ 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);
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); \
} \
\
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: