Changeset 674 for branches/1.3


Ignore:
Timestamp:
2009-08-26T04:19:36+02:00 (5 years ago)
Author:
moo
Message:

merged r673 from trunk: unset by prefix
--此行及以下内容将会被忽略--

_M 1.3
M 1.3/xcache.c

Location:
branches/1.3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/1.3

    • Property svn:mergeinfo changed
      /trunkmerged: 673
  • branches/1.3/xcache.c

    r641 r674  
    146146                    return memcmp(a->name.ustr.val, b->name.ustr.val, (a->name.ustr.len + 1) * sizeof(UChar)) == 0; 
    147147                } 
    148                 else { 
    149                     return memcmp(a->name.str.val, b->name.str.val, a->name.str.len + 1) == 0; 
     148#endif 
     149                if (a->name.str.len != b->name.str.len) { 
     150                    return 0; 
    150151                } 
    151 #else 
    152152                return memcmp(a->name.str.val, b->name.str.val, a->name.str.len + 1) == 0; 
    153 #endif 
     153 
     154            } while(0); 
     155        default: 
     156            assert(0); 
     157    } 
     158    return 0; 
     159} 
     160/* }}} */ 
     161static inline int xc_entry_has_prefix_dmz(xc_entry_t *entry, zval *prefix) /* {{{ */ 
     162{ 
     163    /* this function isn't required but can be in dmz */ 
     164 
     165    switch (entry->type) { 
     166        case XC_TYPE_PHP: 
     167        case XC_TYPE_VAR: 
     168            do { 
     169#ifdef IS_UNICODE 
     170                if (entry->name_type != prefix->type) { 
     171                    return 0; 
     172                } 
     173 
     174                if (entry->name_type == IS_UNICODE) { 
     175                    if (entry->name.ustr.len < Z_USTRLEN_P(prefix)) { 
     176                        return 0; 
     177                    } 
     178                    return memcmp(entry->name.ustr.val, Z_USTRVAL_P(prefix), Z_USTRLEN_P(prefix) * sizeof(UChar)) == 0; 
     179                } 
     180#endif 
     181                if (prefix->type != IS_STRING) { 
     182                    return 0; 
     183                } 
     184 
     185                if (entry->name.str.len < Z_STRLEN_P(prefix)) { 
     186                    return 0; 
     187                } 
     188 
     189                return memcmp(entry->name.str.val, Z_STRVAL_P(prefix), Z_STRLEN_P(prefix)) == 0; 
    154190 
    155191            } while(0); 
     
    21242160} 
    21252161/* }}} */ 
     2162/* {{{ proto bool  xcache_unset_by_prefix(string prefix) 
     2163   Unset existing data in cache by specified prefix */ 
     2164PHP_FUNCTION(xcache_unset_by_prefix) 
     2165{ 
     2166    zval *prefix; 
     2167    int i, iend; 
     2168 
     2169    if (!xc_var_caches) { 
     2170        VAR_DISABLED_WARNING(); 
     2171        RETURN_FALSE; 
     2172    } 
     2173 
     2174    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &prefix) == FAILURE) { 
     2175        return; 
     2176    } 
     2177 
     2178    for (i = 0, iend = xc_var_hcache.size; i < iend; i ++) { 
     2179        xc_cache_t *cache = xc_var_caches[i]; 
     2180        ENTER_LOCK(cache) { 
     2181            int j, jend; 
     2182            for (j = 0, jend = cache->hentry->size; j < jend; j ++) { 
     2183                xc_entry_t *entry, *next; 
     2184                for (entry = cache->entries[j]; entry; entry = next) { 
     2185                    next = entry->next; 
     2186                    if (xc_entry_has_prefix_dmz(entry, prefix)) { 
     2187                        xc_entry_remove_dmz(entry TSRMLS_CC); 
     2188                    } 
     2189                } 
     2190            } 
     2191        } LEAVE_LOCK(cache); 
     2192    } 
     2193} 
     2194/* }}} */ 
    21262195static inline void xc_var_inc_dec(int inc, INTERNAL_FUNCTION_PARAMETERS) /* {{{ */ 
    21272196{ 
     
    24582527    PHP_FE(xcache_isset,             NULL) 
    24592528    PHP_FE(xcache_unset,             NULL) 
     2529    PHP_FE(xcache_unset_by_prefix,   NULL) 
    24602530#ifdef HAVE_XCACHE_DPRINT 
    24612531    PHP_FE(xcache_dprint,            NULL) 
Note: See TracChangeset for help on using the changeset viewer.