summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/tidy/php_tidy.h7
-rw-r--r--ext/tidy/tidy.c20
2 files changed, 27 insertions, 0 deletions
diff --git a/ext/tidy/php_tidy.h b/ext/tidy/php_tidy.h
index e7adef7f2c..7bad74627e 100644
--- a/ext/tidy/php_tidy.h
+++ b/ext/tidy/php_tidy.h
@@ -92,7 +92,14 @@ extern zend_module_entry tidy_module_entry;
}
+/* This is necessary, as apparently some Win32 compilers aren't C99
+ compliant. When that isn't the case we can't use variable arg preprocessor
+ macros and need to instead call a wrapper function */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define TIDY_THROW(...) zend_throw_exception_ex(tidy_ce_exception, 0 TSRMLS_CC, __VA_ARGS__)
+#else
+#define TIDY_THROW _php_tidy_throw_exception
+#endif
#define TIDY_NODE_METHOD(name) PHP_FUNCTION(tnm_ ##name)
#define TIDY_NODE_ME(name, param) TIDY_METHOD_MAP(name, tnm_ ##name, param)
diff --git a/ext/tidy/tidy.c b/ext/tidy/tidy.c
index 9315d2d9a0..61ba2312dd 100644
--- a/ext/tidy/tidy.c
+++ b/ext/tidy/tidy.c
@@ -157,6 +157,22 @@ void php_tidy_panic(ctmbstr msg)
zend_error(E_ERROR, "Could not allocate memory for tidy! (Reason: %s)", (char *)msg);
}
+/* Workaround for compilers that are not C99 complaint */
+static void _php_tidy_throw_exception(char *message, ...)
+{
+ char *msg;
+ va_list ap;
+
+ TSRMLS_FETCH();
+
+ va_start(ap, message);
+ vspprintf(&msg, 0, message, ap);
+ zend_throw_exception(tidy_ce_exception, msg, 0 TSRMLS_CC);
+ va_end(ap);
+ efree(msg);
+
+}
+
static int _php_tidy_set_tidy_opt(TidyDoc doc, char *optname, zval *value TSRMLS_DC)
{
TidyOption opt;
@@ -700,6 +716,10 @@ static void tidy_globals_ctor(void *global TSRMLS_DC)
{
}
+static void tidy_globals_dtor(void *global TSRMLS_DC)
+{
+}
+
PHP_MINIT_FUNCTION(tidy)
{
ZEND_INIT_MODULE_GLOBALS(tidy, tidy_globals_ctor, tidy_globals_dtor);