Changeset 932


Ignore:
Timestamp:
2012-06-26T19:27:35+02:00 (3 years ago)
Author:
moo
Message:

arKey should be NULL for numeric index

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/processor/hashtable.m4

    r930 r932  
    55        dnl {{{ dasm 
    66        IFDASM(` 
    7             Bucket *b; 
     7            const Bucket *srcBucket; 
    88            zval *zv; 
    99            int bufsize = 2; 
     
    3434 
    3535            DISABLECHECK(` 
    36             for (b = src->pListHead; b != NULL; b = b->pListNext) { 
     36            for (srcBucket = src->pListHead; srcBucket != NULL; srcBucket = srcBucket->pListNext) { 
    3737                ALLOC_INIT_ZVAL(zv); 
    3838                array_init(zv); 
    39                 FUNC_NAME (dasm, zv, (($2*)b->pData) TSRMLS_CC); 
    40                 keysize = BUCKET_KEY_SIZE(b) + 2; 
     39                FUNC_NAME (dasm, zv, (($2*)srcBucket->pData) TSRMLS_CC); 
     40                keysize = BUCKET_KEY_SIZE(srcBucket) + 2; 
    4141                if (keysize > bufsize) { 
    4242                    do { 
     
    4545                    buf = erealloc(buf, bufsize); 
    4646                } 
    47                 memcpy(buf, BUCKET_KEY_S(b), keysize); 
     47                memcpy(buf, BUCKET_KEY_S(srcBucket), keysize); 
    4848                buf[keysize - 2] = buf[keysize - 1] = ""[0]; 
    49                 keysize = b->nKeyLength; 
     49                keysize = srcBucket->nKeyLength; 
    5050#ifdef IS_UNICODE 
    51                 if (BUCKET_KEY_TYPE(b) == IS_UNICODE) { 
     51                if (BUCKET_KEY_TYPE(srcBucket) == IS_UNICODE) { 
    5252                    if (buf[0] == ""[0] && buf[1] == ""[0]) { 
    5353                        keysize ++; 
     
    6060                    } 
    6161                } 
    62                 add_u_assoc_zval_ex(dst, BUCKET_KEY_TYPE(b), ZSTR(buf), keysize, zv); 
     62                add_u_assoc_zval_ex(dst, BUCKET_KEY_TYPE(srcBucket), ZSTR(buf), keysize, zv); 
    6363            } 
    6464            ') 
     
    6767        ', ` 
    6868        dnl }}} 
    69         Bucket *b, *pnew = NULL, *prev = NULL; 
     69        Bucket *srcBucket; 
     70        Bucket *pnew = NULL, *prev = NULL; 
    7071        zend_bool first = 1; 
    7172        dnl only used for copy 
     
    9495        DONE(arBuckets) 
    9596        DISABLECHECK(` 
    96         for (b = src->pListHead; b != NULL; b = b->pListNext) { 
     97        for (srcBucket = src->pListHead; srcBucket != NULL; srcBucket = srcBucket->pListNext) { 
    9798            ifelse($4, `', `', ` 
    98                 pushdef(`BUCKET', `b') 
     99                pushdef(`BUCKET', `srcBucket') 
    99100                if ($4 == ZEND_HASH_APPLY_REMOVE) { 
    100101                    IFCOPY(`dst->nNumOfElements --;') 
     
    104105            ') 
    105106 
    106             IFCALCCOPY(`bucketsize = BUCKET_SIZE(b);') 
     107            IFCALCCOPY(`bucketsize = BUCKET_SIZE(srcBucket);') 
    107108            ALLOC(pnew, char, bucketsize, , Bucket) 
    108109            IFCOPY(` 
    109110#ifdef ZEND_ENGINE_2_4 
    110             memcpy(pnew, b, BUCKET_HEAD_SIZE(Bucket)); 
    111             memcpy((char *) (pnew + 1), b->arKey, BUCKET_KEY_SIZE(b)); 
    112             pnew->arKey = (const char *) (pnew + 1); 
     111            memcpy(pnew, srcBucket, BUCKET_HEAD_SIZE(Bucket)); 
     112            if (BUCKET_KEY_SIZE(srcBucket)) { 
     113                memcpy((char *) (pnew + 1), srcBucket->arKey, BUCKET_KEY_SIZE(srcBucket)); 
     114                pnew->arKey = (const char *) (pnew + 1); 
     115            } 
     116            else { 
     117                pnew->arKey = NULL; 
     118            } 
    113119#else 
    114             memcpy(pnew, b, bucketsize); 
    115     #endif 
     120            memcpy(pnew, srcBucket, bucketsize); 
     121#endif 
    116122            ') 
    117123            IFCOPY(` 
    118                 n = b->h & src->nTableMask; 
     124                n = srcBucket->h & src->nTableMask; 
    119125                /* pnew into hash node chain */ 
    120126                pnew->pLast = NULL; 
     
    128134                INDENT() 
    129135                fprintf(stderr, "$2:\""); 
    130                 xc_dprint_str_len(BUCKET_KEY_S(b), BUCKET_KEY_SIZE(b)); 
    131                 fprintf(stderr, "\" %d:h=%lu ", BUCKET_KEY_SIZE(b), b->h); 
     136                xc_dprint_str_len(BUCKET_KEY_S(srcBucket), BUCKET_KEY_SIZE(srcBucket)); 
     137                fprintf(stderr, "\" %d:h=%lu ", BUCKET_KEY_SIZE(srcBucket), srcBucket->h); 
    132138            ') 
    133139            if (sizeof(void *) == sizeof($2)) { 
    134140                IFCOPY(`pnew->pData = &pnew->pDataPtr;') 
    135141                dnl no alloc 
    136                 STRUCT_P_EX(`$2', pnew->pData, (($2*)b->pData), `', `$3', ` ') 
     142                STRUCT_P_EX(`$2', pnew->pData, (($2*)srcBucket->pData), `', `$3', ` ') 
    137143            } 
    138144            else { 
    139                 STRUCT_P_EX(`$2', pnew->pData, (($2*)b->pData), `', `$3') 
     145                STRUCT_P_EX(`$2', pnew->pData, (($2*)srcBucket->pData), `', `$3') 
    140146                IFCOPY(`pnew->pDataPtr = NULL;') 
    141147            } 
Note: See TracChangeset for help on using the changeset viewer.