#include "ext/standard/php_smart_str.h"
#include "ext/standard/html.h"
#include "ext/standard/php_string.h"
+#include "ext/standard/php_parsedate.h"
#define WDDX_BUF_LEN 256
#define PHP_CLASS_NAME_VAR "php_class_name"
#define EL_VERSION "version"
#define EL_RECORDSET "recordset"
#define EL_FIELD "field"
+#define EL_DATETIME "dateTime"
#define php_wddx_deserialize(a,b) \
php_wddx_deserialize_ex((a)->value.str.val, (a)->value.str.len, (b))
ST_BINARY,
ST_STRUCT,
ST_RECORDSET,
- ST_FIELD
+ ST_FIELD,
+ ST_DATETIME
} type;
char *varname;
} st_entry;
}
}
+ wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
+ } else if (!strcmp(name, EL_DATETIME)) {
+ ent.type = ST_DATETIME;
+ SET_STACK_VARNAME;
+
+ ALLOC_ZVAL(ent.data);
+ INIT_PZVAL(ent.data);
+ Z_TYPE_P(ent.data) = IS_LONG;
wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
}
}
if (!strcmp(name, EL_STRING) || !strcmp(name, EL_NUMBER) ||
!strcmp(name, EL_BOOLEAN) || !strcmp(name, EL_NULL) ||
!strcmp(name, EL_ARRAY) || !strcmp(name, EL_STRUCT) ||
- !strcmp(name, EL_RECORDSET) || !strcmp(name, EL_BINARY)) {
+ !strcmp(name, EL_RECORDSET) || !strcmp(name, EL_BINARY) ||
+ !strcmp(name, EL_DATETIME)) {
wddx_stack_top(stack, (void**)&ent1);
if (!strcmp(name, EL_BINARY)) {
}
break;
+ case ST_DATETIME: {
+ char *tmp;
+
+ tmp = do_alloca(len + 1);
+ memcpy(tmp, s, len);
+ tmp[len] = '\0';
+
+ Z_LVAL_P(ent->data) = php_parse_date(tmp, NULL);
+ /* date out of range < 1969 or > 2038 */
+ if (Z_LVAL_P(ent->data) == -1) {
+ Z_TYPE_P(ent->data) = IS_STRING;
+ Z_STRLEN_P(ent->data) = len;
+ Z_STRVAL_P(ent->data) = estrndup(s, len);
+ }
+ free_alloca(tmp);
+ }
default:
break;
}