diff options
author | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2018-01-29 23:25:33 +0300 |
---|---|---|
committer | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2018-01-29 23:37:36 +0300 |
commit | 9cd059117a91c4011181b7499ccf21c844d0f0f1 (patch) | |
tree | 5645575989ca20d6b13902e5691f3b4ef46670f5 /redis_array.c | |
parent | 2828c2f187900a5ddc450ce857b467d9e0b483ac (diff) |
Refactor RedisArray
Change type of returning value from `char *` to `zend_string *` for
`ra_extract_key` and `ra_call_extractor` functions.
Store keys as `zend_string *` in RedisArray::mset.
Diffstat (limited to 'redis_array.c')
-rw-r--r-- | redis_array.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/redis_array.c b/redis_array.c index 684d54ca..7fbbc6b4 100644 --- a/redis_array.c +++ b/redis_array.c @@ -1059,9 +1059,9 @@ PHP_METHOD(RedisArray, mset) RedisArray *ra; int *pos, argc, *argc_each; HashTable *h_keys; - char *key, **keys, kbuf[40]; - int key_len, *key_lens; - zend_string *zkey; + char *key, kbuf[40]; + int key_len; + zend_string **keys, *zkey; ulong idx; if ((ra = redis_array_get(getThis() TSRMLS_CC)) == NULL) { @@ -1084,8 +1084,7 @@ PHP_METHOD(RedisArray, mset) } argv = emalloc(argc * sizeof(zval*)); pos = emalloc(argc * sizeof(int)); - keys = emalloc(argc * sizeof(char*)); - key_lens = emalloc(argc * sizeof(int)); + keys = ecalloc(argc, sizeof(zend_string *)); argc_each = emalloc(ra->count * sizeof(int)); memset(argc_each, 0, ra->count * sizeof(int)); @@ -1106,8 +1105,7 @@ PHP_METHOD(RedisArray, mset) } argc_each[pos[i]]++; /* count number of keys per node */ - keys[i] = estrndup(key, key_len); - key_lens[i] = (int)key_len; + keys[i] = zend_string_init(key, key_len, 0); argv[i] = data; i++; } ZEND_HASH_FOREACH_END(); @@ -1134,7 +1132,7 @@ PHP_METHOD(RedisArray, mset) } else { ZVAL_ZVAL(z_tmp, argv[i], 1, 0); } - add_assoc_zval_ex(&z_argarray, keys[i], key_lens[i], z_tmp); + add_assoc_zval_ex(&z_argarray, ZSTR_VAL(keys[i]), ZSTR_LEN(keys[i]), z_tmp); found++; } @@ -1167,12 +1165,11 @@ PHP_METHOD(RedisArray, mset) /* Free any keys that we needed to allocate memory for, because they weren't strings */ for(i = 0; i < argc; i++) { - efree(keys[i]); + zend_string_release(keys[i]); } /* cleanup */ efree(keys); - efree(key_lens); efree(argv); efree(pos); efree(argc_each); |