iliaa           Sat Jun 28 02:59:31 2003 EDT

  Added files:                 (Branch: PHP_4_3)
    /php-src/ext/wddx/tests     .cvsignore 001.phpt wddx.xml 

  Modified files:              
    /php-src/ext/wddx   wddx.c 
  Log:
  MFH: Added missing handling of dateTime
  
  
Index: php-src/ext/wddx/wddx.c
diff -u php-src/ext/wddx/wddx.c:1.96.2.3 php-src/ext/wddx/wddx.c:1.96.2.4
--- php-src/ext/wddx/wddx.c:1.96.2.3    Sat Jan  4 14:51:46 2003
+++ php-src/ext/wddx/wddx.c     Sat Jun 28 02:59:31 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: wddx.c,v 1.96.2.3 2003/01/04 19:51:46 helly Exp $ */
+/* $Id: wddx.c,v 1.96.2.4 2003/06/28 06:59:31 iliaa Exp $ */
 
 #include "php.h"
 #include "php_wddx.h"
@@ -32,6 +32,7 @@
 #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"
@@ -52,6 +53,7 @@
 #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))
@@ -77,7 +79,8 @@
                ST_BINARY,
                ST_STRUCT,
                ST_RECORDSET,
-               ST_FIELD
+               ST_FIELD,
+               ST_DATETIME
        } type;
        char *varname;
 } st_entry;
@@ -867,6 +870,14 @@
                }
 
                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));
        }
 }
 /* }}} */
@@ -890,7 +901,8 @@
        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)) {
@@ -1054,6 +1066,22 @@
                                }
                                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;
                }

Index: php-src/ext/wddx/tests/.cvsignore
+++ php-src/ext/wddx/tests/.cvsignore
phpt.*
*.diff
*.log
*.exp
*.out
*.php

Index: php-src/ext/wddx/tests/001.phpt
+++ php-src/ext/wddx/tests/001.phpt
--TEST--
wddz deserialization test
--FILE--
<?php
        $path = dirname(__FILE__);
        var_dump(wddx_deserialize(file_get_contents("{$path}/wddx.xml")));
?>
--EXPECT--
array(11) {
  ["aNull"]=>
  NULL
  ["aString"]=>
  string(8) "a string"
  ["aNumber"]=>
  float(-12.456)
  ["aDateTime"]=>
  int(897600732)
  ["aDateTime2"]=>
  string(19) "1930-06-12T04:32:12"
  ["aDateTime3"]=>
  string(19) "2040-06-12T04:32:12"
  ["aBoolean"]=>
  bool(true)
  ["anArray"]=>
  array(2) {
    [0]=>
    int(10)
    [1]=>
    string(14) "second element"
  }
  ["aBinary"]=>
  string(11) "binary data"
  ["anObject"]=>
  array(2) {
    ["s"]=>
    string(8) "a string"
    ["n"]=>
    float(-12.456)
  }
  ["aRecordset"]=>
  array(2) {
    ["NAME"]=>
    array(2) {
      [0]=>
      string(8) "John Doe"
      [1]=>
      string(8) "Jane Doe"
    }
    ["AGE"]=>
    array(2) {
      [0]=>
      int(34)
      [1]=>
      int(31)
    }
  }
}

Index: php-src/ext/wddx/tests/wddx.xml
+++ php-src/ext/wddx/tests/wddx.xml
<?xml version='1.0'?>
<!DOCTYPE wddxPacket SYSTEM 'wddx_0100.dtd'>
<wddxPacket version='1.0'>
<header/>
        <data>
                <struct>
                     <var name='aNull'>
                         <null/>
                     </var>
                     <var name='aString'>
                         <string>a string</string>
                     </var>
                     <var name='aNumber'>
                         <number>-12.456</number>
                     </var>
                     <var name='aDateTime'>
                         <dateTime>1998-06-12T04:32:12</dateTime>
                     </var>
                     <var name='aDateTime2'>
                         <dateTime>1930-06-12T04:32:12</dateTime>
                     </var>
                     <var name='aDateTime3'>
                         <dateTime>2040-06-12T04:32:12</dateTime>
                     </var>
                     <var name='aBoolean'>
                         <boolean value='true'/>
                     </var>
                     <var name='anArray'>
                         <array length='2'>
                             <number>10</number>
                             <string>second element</string>
                        </array>
                     </var>
                     <var name='aBinary'>
                         <binary length='11'>YmluYXJ5IGRhdGE=</binary>
                     </var>
                     <var name='anObject'>
                         <struct>
                             <var name='s'>
                                 <string>a string</string>
                             </var>
                             <var name='n'>
                                 <number>-12.456</number>
                             </var>
                         </struct>
                     </var>
                     <var name='aRecordset'>
                         <recordset rowCount='2' fieldNames='NAME,AGE'>
                                <field name='NAME'>
                                         <string>John Doe</string>
                                         <string>Jane Doe</string>
                                </field>
                                <field name='AGE'>
                                        <number>34</number>
                                        <number>31</number>
                                </field>
                        </recordset>
                 </struct>
        </data>
</wddxPacket>



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to