static int _php_tidy_set_tidy_opt(TidyDoc doc, char *optname, zval *value TSRMLS_DC)
{
- TidyOption opt;
-
- opt = tidyGetOptionByName(doc, optname);
+ TidyOption opt = tidyGetOptionByName(doc, optname);
+ zval conv = *value;
if (!opt) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unknown Tidy Configuration Option '%s'", optname);
+ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unknown Tidy Configuration Option '%s'", optname);
return FAILURE;
}
if (tidyOptIsReadOnly(opt)) {
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Attempting to set read-only option '%s'", optname);
+ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Attempting to set read-only option '%s'", optname);
return FAILURE;
}
switch(tidyOptGetType(opt)) {
case TidyString:
- convert_to_string_ex(&value);
- if (tidyOptSetValue(doc, tidyOptGetId(opt), Z_STRVAL_P(value))) {
+ if (Z_TYPE(conv) != IS_STRING) {
+ zval_copy_ctor(&conv);
+ convert_to_string(&conv);
+ }
+ if (tidyOptSetValue(doc, tidyOptGetId(opt), Z_STRVAL(conv))) {
+ if (Z_TYPE(conv) != Z_TYPE_P(value)) {
+ zval_dtor(&conv);
+ }
return SUCCESS;
}
+ if (Z_TYPE(conv) != Z_TYPE_P(value)) {
+ zval_dtor(&conv);
+ }
break;
case TidyInteger:
- convert_to_long_ex(&value);
- if (tidyOptSetInt(doc, tidyOptGetId(opt), Z_LVAL_P(value))) {
+ if (Z_TYPE(conv) != IS_LONG) {
+ zval_copy_ctor(&conv);
+ convert_to_long(&conv);
+ }
+ if (tidyOptSetInt(doc, tidyOptGetId(opt), Z_LVAL(conv))) {
return SUCCESS;
}
break;
case TidyBoolean:
- convert_to_long_ex(&value);
- if (tidyOptSetBool(doc, tidyOptGetId(opt), Z_LVAL_P(value))) {
+ if (Z_TYPE(conv) != IS_LONG) {
+ zval_copy_ctor(&conv);
+ convert_to_long(&conv);
+ }
+ if (tidyOptSetBool(doc, tidyOptGetId(opt), Z_LVAL(conv))) {
return SUCCESS;
}
break;
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to determine type of configuration option");
break;
}
-
+
return FAILURE;
}