static void php_memc_setMulti_impl()

in php_memcached.c [1852:1909]


static void php_memc_setMulti_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_key)
{
	zval *entries;
	zend_string *server_key = NULL;
	zend_long expiration = 0, ignored;
	zval *value;
	zend_string *skey;
	zend_ulong num_key;
	int tmp_len = 0;
	MEMC_METHOD_INIT_VARS;

	if (by_key) {
		/* "Sa|ll" */
		ZEND_PARSE_PARAMETERS_START(2, 4)
		        Z_PARAM_STR(server_key)
		        Z_PARAM_ARRAY(entries)
		        Z_PARAM_OPTIONAL
		        Z_PARAM_LONG(expiration)
		        Z_PARAM_LONG(ignored)
		ZEND_PARSE_PARAMETERS_END();
	} else {
		/* "a|ll" */
		ZEND_PARSE_PARAMETERS_START(1, 3)
		        Z_PARAM_ARRAY(entries)
		        Z_PARAM_OPTIONAL
		        Z_PARAM_LONG(expiration)
		        Z_PARAM_LONG(ignored)
		ZEND_PARSE_PARAMETERS_END();
	}

	MEMC_METHOD_FETCH_OBJECT;
	s_memc_set_status(intern, MEMCACHED_SUCCESS, 0);

	ZEND_HASH_FOREACH_KEY_VAL (Z_ARRVAL_P(entries), num_key, skey, value) {
		zend_string *str_key = NULL;

		if (skey) {
			str_key = skey;
		}
		else {
			char tmp_key[64];

			tmp_len = snprintf(tmp_key, sizeof(tmp_key) - 1, "%ld", (long)num_key);
			str_key = zend_string_init(tmp_key, tmp_len, 0);
		}

		if (!s_memc_write_zval (intern, MEMC_OP_SET, server_key, str_key, value, expiration)) {
			php_error_docref(NULL, E_WARNING, "failed to set key %s", ZSTR_VAL(str_key));
		}

		if (!skey) {
			zend_string_release (str_key);
		}

	} ZEND_HASH_FOREACH_END();

	RETURN_BOOL(!s_memc_status_has_error(intern));
}