@@ -69,7 +69,10 @@ static zend_function_entry redis_functions[] = {
6969 PHP_ME (Redis , decrBy , NULL , ZEND_ACC_PUBLIC )
7070 PHP_ME (Redis , type , NULL , ZEND_ACC_PUBLIC )
7171 PHP_ME (Redis , append , NULL , ZEND_ACC_PUBLIC )
72- PHP_ME (Redis , substr , NULL , ZEND_ACC_PUBLIC )
72+ PHP_ME (Redis , getRange , NULL , ZEND_ACC_PUBLIC )
73+ PHP_ME (Redis , setRange , NULL , ZEND_ACC_PUBLIC )
74+ PHP_ME (Redis , getBit , NULL , ZEND_ACC_PUBLIC )
75+ PHP_ME (Redis , setBit , NULL , ZEND_ACC_PUBLIC )
7376 PHP_ME (Redis , strlen , NULL , ZEND_ACC_PUBLIC )
7477 PHP_ME (Redis , getKeys , NULL , ZEND_ACC_PUBLIC )
7578 PHP_ME (Redis , sort , NULL , ZEND_ACC_PUBLIC )
@@ -183,6 +186,7 @@ static zend_function_entry redis_functions[] = {
183186 PHP_MALIAS (Redis , zRemove , zDelete , NULL , ZEND_ACC_PUBLIC )
184187 PHP_MALIAS (Redis , zRemoveRangeByScore , zDeleteRangeByScore , NULL , ZEND_ACC_PUBLIC )
185188 PHP_MALIAS (Redis , zSize , zCard , NULL , ZEND_ACC_PUBLIC )
189+ PHP_MALIAS (Redis , substr , getRange , NULL , ZEND_ACC_PUBLIC )
186190 {NULL , NULL , NULL }
187191};
188192
@@ -1130,7 +1134,7 @@ PHP_METHOD(Redis, append)
11301134 REDIS_PROCESS_RESPONSE (redis_long_response );
11311135}
11321136
1133- PHP_METHOD (Redis , substr )
1137+ PHP_METHOD (Redis , getRange )
11341138{
11351139 zval * object ;
11361140 RedisSock * redis_sock ;
@@ -1148,14 +1152,94 @@ PHP_METHOD(Redis, substr)
11481152 RETURN_FALSE ;
11491153 }
11501154
1151- cmd_len = redis_cmd_format_static (& cmd , "SUBSTR " , "sdd" , key , key_len , (int )start , (int )end );
1155+ cmd_len = redis_cmd_format_static (& cmd , "GETRANGE " , "sdd" , key , key_len , (int )start , (int )end );
11521156 REDIS_PROCESS_REQUEST (redis_sock , cmd , cmd_len );
11531157 IF_ATOMIC () {
11541158 redis_string_response (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , NULL , NULL );
11551159 }
11561160 REDIS_PROCESS_RESPONSE (redis_string_response );
11571161}
11581162
1163+ PHP_METHOD (Redis , setRange )
1164+ {
1165+ zval * object ;
1166+ RedisSock * redis_sock ;
1167+ char * key = NULL , * val , * cmd ;
1168+ int key_len , val_len , cmd_len ;
1169+ long offset ;
1170+
1171+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Osls" ,
1172+ & object , redis_ce , & key , & key_len ,
1173+ & offset , & val , & val_len ) == FAILURE ) {
1174+ RETURN_FALSE ;
1175+ }
1176+
1177+ if (redis_sock_get (object , & redis_sock TSRMLS_CC ) < 0 ) {
1178+ RETURN_FALSE ;
1179+ }
1180+
1181+ cmd_len = redis_cmd_format_static (& cmd , "SETRANGE" , "sds" , key , key_len , (int )offset , val , val_len );
1182+ REDIS_PROCESS_REQUEST (redis_sock , cmd , cmd_len );
1183+ IF_ATOMIC () {
1184+ redis_long_response (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , NULL , NULL );
1185+ }
1186+ REDIS_PROCESS_RESPONSE (redis_long_response );
1187+ }
1188+
1189+ PHP_METHOD (Redis , getBit )
1190+ {
1191+ zval * object ;
1192+ RedisSock * redis_sock ;
1193+ char * key = NULL , * cmd ;
1194+ int key_len , cmd_len ;
1195+ long offset ;
1196+
1197+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Osl" ,
1198+ & object , redis_ce , & key , & key_len ,
1199+ & offset ) == FAILURE ) {
1200+ RETURN_FALSE ;
1201+ }
1202+
1203+ if (redis_sock_get (object , & redis_sock TSRMLS_CC ) < 0 ) {
1204+ RETURN_FALSE ;
1205+ }
1206+
1207+ cmd_len = redis_cmd_format_static (& cmd , "GETBIT" , "sd" , key , key_len , (int )offset );
1208+ REDIS_PROCESS_REQUEST (redis_sock , cmd , cmd_len );
1209+ IF_ATOMIC () {
1210+ redis_long_response (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , NULL , NULL );
1211+ }
1212+ REDIS_PROCESS_RESPONSE (redis_long_response );
1213+ }
1214+
1215+ PHP_METHOD (Redis , setBit )
1216+ {
1217+ zval * object ;
1218+ RedisSock * redis_sock ;
1219+ char * key = NULL , * cmd ;
1220+ int key_len , cmd_len ;
1221+ long offset ;
1222+ zend_bool val ;
1223+
1224+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Oslb" ,
1225+ & object , redis_ce , & key , & key_len ,
1226+ & offset , & val ) == FAILURE ) {
1227+ RETURN_FALSE ;
1228+ }
1229+
1230+ if (redis_sock_get (object , & redis_sock TSRMLS_CC ) < 0 ) {
1231+ RETURN_FALSE ;
1232+ }
1233+
1234+ cmd_len = redis_cmd_format_static (& cmd , "SETBIT" , "sdd" , key , key_len , (int )offset , (int )val );
1235+ REDIS_PROCESS_REQUEST (redis_sock , cmd , cmd_len );
1236+ IF_ATOMIC () {
1237+ redis_long_response (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , NULL , NULL );
1238+ }
1239+ REDIS_PROCESS_RESPONSE (redis_long_response );
1240+ }
1241+
1242+
11591243PHP_METHOD (Redis , strlen )
11601244{
11611245 zval * object ;
@@ -4017,7 +4101,7 @@ PHP_METHOD(Redis, multi)
40174101 IF_MULTI () {
40184102 cmd_len = redis_cmd_format_static (& cmd , "MULTI" , "" );
40194103
4020- if (redis_sock_write (redis_sock , cmd , cmd_len ) < 0 ) {
4104+ if (redis_sock_write (redis_sock , cmd , cmd_len TSRMLS_CC ) < 0 ) {
40214105 efree (cmd );
40224106 RETURN_FALSE ;
40234107 }
@@ -4062,7 +4146,7 @@ PHP_METHOD(Redis, discard)
40624146
40634147 cmd_len = redis_cmd_format_static (& cmd , "DISCARD" , "" );
40644148
4065- if (redis_sock_write (redis_sock , cmd , cmd_len ) < 0 ) {
4149+ if (redis_sock_write (redis_sock , cmd , cmd_len TSRMLS_CC ) < 0 ) {
40664150 efree (cmd );
40674151 RETURN_FALSE ;
40684152 }
@@ -4176,7 +4260,7 @@ PHP_METHOD(Redis, exec)
41764260
41774261 cmd_len = redis_cmd_format_static (& cmd , "EXEC" , "" );
41784262
4179- if (redis_sock_write (redis_sock , cmd , cmd_len ) < 0 ) {
4263+ if (redis_sock_write (redis_sock , cmd , cmd_len TSRMLS_CC ) < 0 ) {
41804264 efree (cmd );
41814265 RETURN_FALSE ;
41824266 }
@@ -4213,7 +4297,7 @@ PHP_METHOD(Redis, exec)
42134297 }
42144298
42154299 if (request != NULL ) {
4216- if (redis_sock_write (redis_sock , request , total ) < 0 ) {
4300+ if (redis_sock_write (redis_sock , request , total TSRMLS_CC ) < 0 ) {
42174301 free (request );
42184302 free_reply_callbacks (object , redis_sock );
42194303 redis_sock -> mode = ATOMIC ;
@@ -4303,7 +4387,7 @@ PHP_METHOD(Redis, publish)
43034387
43044388 cmd_len = redis_cmd_format_static (& cmd , "PUBLISH" , "ss" , key , key_len , val , val_len );
43054389
4306- if (redis_sock_write (redis_sock , cmd , cmd_len ) < 0 ) {
4390+ if (redis_sock_write (redis_sock , cmd , cmd_len TSRMLS_CC ) < 0 ) {
43074391 efree (cmd );
43084392 RETURN_FALSE ;
43094393 }
@@ -4360,7 +4444,7 @@ PHP_METHOD(Redis, subscribe)
43604444 old_cmd = cmd ;
43614445 cmd_len = spprintf (& cmd , 0 , "SUBSCRIBE %s\r\n" , cmd );
43624446 efree (old_cmd );
4363- if (redis_sock_write (redis_sock , cmd , cmd_len ) < 0 ) {
4447+ if (redis_sock_write (redis_sock , cmd , cmd_len TSRMLS_CC ) < 0 ) {
43644448 efree (cmd );
43654449 RETURN_FALSE ;
43664450 }
@@ -4523,7 +4607,7 @@ PHP_METHOD(Redis, unsubscribe)
45234607 cmd_len = spprintf (& cmd , 0 , "UNSUBSCRIBE %s\r\n" , cmd );
45244608 efree (old_cmd );
45254609
4526- if (redis_sock_write (redis_sock , cmd , cmd_len ) < 0 ) {
4610+ if (redis_sock_write (redis_sock , cmd , cmd_len TSRMLS_CC ) < 0 ) {
45274611 efree (cmd );
45284612 RETURN_FALSE ;
45294613 }
0 commit comments