Advertisement
Guest User

Untitled

a guest
Apr 27th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. PHP_REDIS_API
  2. void generic_mset(INTERNAL_FUNCTION_PARAMETERS, char *kw, ResultCallback fun)
  3. {
  4. RedisSock *redis_sock;
  5. smart_string cmd = {0};
  6. zval *object, *z_array;
  7. HashTable *htargs;
  8. zend_string *zkey;
  9. zval *zmem;
  10. char buf[64];
  11. size_t keylen;
  12. ulong idx;
  13.  
  14. if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oa",
  15. &object, redis_ce, &z_array) == FAILURE)
  16. {
  17. RETURN_FALSE;
  18. }
  19.  
  20. /* Make sure we can get our socket, and we were not passed an empty array */
  21. if ((redis_sock = redis_sock_get(object TSRMLS_CC, 0)) == NULL ||
  22. zend_hash_num_elements(Z_ARRVAL_P(z_array)) == 0)
  23. {
  24. RETURN_FALSE;
  25. }
  26.  
  27. /* Initialize our command */
  28. htargs = Z_ARRVAL_P(z_array);
  29. redis_cmd_init_sstr(&cmd, zend_hash_num_elements(htargs) * 2, kw, strlen(kw));
  30.  
  31. ZEND_HASH_FOREACH_KEY_VAL(htargs, idx, zkey, zmem) {
  32. /* Handle string or numeric keys */
  33. if (zkey) {
  34. redis_cmd_append_sstr_key(&cmd, zkey->val, zkey->len, redis_sock, NULL);
  35. } else {
  36. keylen = snprintf(buf, sizeof(buf), "%ld", (long)idx);
  37. redis_cmd_append_sstr_key(&cmd, buf, (strlen_t)keylen, redis_sock, NULL);
  38. }
  39.  
  40. /* Append our value */
  41. redis_cmd_append_sstr_zval(&cmd, zmem, redis_sock TSRMLS_CC);
  42. } ZEND_HASH_FOREACH_END();
  43.  
  44. REDIS_PROCESS_REQUEST(redis_sock, cmd.c, cmd.len);
  45. IF_ATOMIC() {
  46. fun(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, NULL, NULL);
  47. }
  48. REDIS_PROCESS_RESPONSE(fun);
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement