8000 _prefix, _unserialize methods · devsnippet/phpredis@dc36368 · GitHub
[go: up one dir, main page]

Skip to content

Commit dc36368

Browse files
_prefix, _unserialize methods
1 parent d1d5a31 commit dc36368

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed

php_redis.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,9 @@ PHP_METHOD(Redis, script);
133133
PHP_METHOD(Redis, dump);
134134
PHP_METHOD(Redis, restore);
135135

136+
PHP_METHOD(Redis, _prefix);
137+
PHP_METHOD(Redis, _unserialize);
138+
136139
PHP_METHOD(Redis, mset);
137140
PHP_METHOD(Redis, msetnx);
138141
PHP_METHOD(Redis, rpoplpush);

redis.c

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,9 @@ static zend_function_entry redis_functions[] = {
161161
PHP_ME(Redis, dump, NULL, ZEND_ACC_PUBLIC)
162162
PHP_ME(Redis, restore, NULL, ZEND_ACC_PUBLIC)
163163

164+
PHP_ME(Redis, _prefix, NULL, ZEND_ACC_PUBLIC)
165+
PHP_ME(Redis, _unserialize, NULL, ZEND_ACC_PUBLIC)
166+
164167
/* 1.1 */
165168
PHP_ME(Redis, mset, NULL, ZEND_ACC_PUBLIC)
166169
PHP_ME(Redis, msetnx, NULL, ZEND_ACC_PUBLIC)
@@ -5861,7 +5864,7 @@ PHP_METHOD(Redis, dump) {
58615864
}
58625865

58635866
/*
5864-
* {{{ proto RESTORE ttl key value
5867+
* {{{ proto Redis::restore(ttl, key, value)
58655868
*/
58665869
PHP_METHOD(Redis, restore) {
58675870
zval *object;
@@ -5894,5 +5897,64 @@ PHP_METHOD(Redis, restore) {
58945897
REDIS_PROCESS_RESPONSE(redis_boolean_response);
58955898
}
58965899

5900+
/*
5901+
* {{{ proto Redis::_prefix(key)
5902+
*/
5903+
PHP_METHOD(Redis, _prefix) {
5904+
zval *object;
5905+
RedisSock *redis_sock;
5906+
char *key;
5907+
int key_len;
5908+
5909+
// Parse our arguments
5910+
if(zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, redis_ce,
5911+
&key, &key_len) == FAILURE) {
5912+
RETURN_FALSE;
5913+
}
5914+
// Grab socket
5915+
if(redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
5916+
RETURN_FALSE;
5917+
}
5918+
5919+
// Prefix our key if we need to
5920+
if(redis_sock->prefix != NULL && redis_sock->prefix_len > 0) {
5921+
redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC);
5922+
RETURN_STRINGL(key, key_len, 0);
5923+
} else {
5924+
RETURN_STRINGL(key, key_len, 1);
5925+
}
5926+
}
5927+
5928+
/*
5929+
* {{{ proto Redis::_unserialize(value)
5930+
*/
5931+
PHP_METHOD(Redis, _unserialize) {
5932+
zval *object;
5933+
RedisSock *redis_sock;
5934+
char *value;
5935+
int value_len;
5936+
5937+
// Parse our arguments
5938+
if(zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, redis_ce,
5939+
&value, &value_len) == FAILURE) {
5940+
RETURN_FALSE;
5941+
}
5942+
// Grab socket
5943+
if(redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
5944+
RETURN_FALSE;
5945+
}
5946+
5947+
// We only need to attempt unserialization if we have a serializer running
5948+
if(redis_sock->serializer != REDIS_SERIALIZER_NONE) {
5949+
if(redis_unserialize(redis_sock, value, value_len, &return_value TSRMLS_CC) == 0) {
5950+
zend_throw_exception(redis_exception_ce, "Invalid serialized data, or unserialization error", 0 TSRMLS_CC);
5951+
RETURN_FALSE;
5952+
}
5953+
} else {
5954+
// Just return the value that was passed to us
5955+
RETURN_STRINGL(value, value_len, 1);
5956+
}
5957+
}
5958+
58975959
/* vim: set tabstop=4 softtabstop=4 noexpandtab shiftwidth=4: */
58985960

0 commit comments

Comments
 (0)
0