#include <libmemcached/csl/common.h>
#include <libmemcached/csl/context.h>
-void Context::abort(const char *error_arg, yytokentype last_token, const char *last_token_str)
+void Context::abort(const char *error_arg, config_tokentype last_token, const char *last_token_str)
{
rc= MEMCACHED_PARSE_ERROR;
(void)last_token;
- (void)last_token_str;
if (error_arg)
{
- memcached_set_parser_error(*memc, MEMCACHED_AT, "Error occured while parsing: %s", error_arg);
+ memcached_set_parser_error(*memc, MEMCACHED_AT, "%s", error_arg);
return;
}
- memcached_set_parser_error(*memc, MEMCACHED_AT, "Error occured while parsing: %s", memcached_strerror(NULL, MEMCACHED_PARSE_ERROR));
+ if (last_token_str)
+ {
+ memcached_set_parser_error(*memc, MEMCACHED_AT, "%s", last_token_str);
+ return;
+ }
+
+ memcached_set_parser_error(*memc, MEMCACHED_AT, "unknown parsing error");
}
-void Context::error(const char *error_arg, yytokentype last_token, const char *last_token_str)
+void Context::error(const char *error_arg, config_tokentype last_token, const char *last_token_str)
{
rc= MEMCACHED_PARSE_ERROR;
if (not error_arg)
return;
}
- if (error_arg and strcmp(error_arg, "memory exhausted") == 0)
+ if (strcmp(error_arg, "memory exhausted") == 0)
{
(void)memcached_set_error(*memc, MEMCACHED_MEMORY_ALLOCATION_FAILURE, MEMCACHED_AT, memcached_string_make_from_cstr(error_arg));
return;
// We now test if it is something other then a syntax error, if it we
// return a generic message
- if (error_arg and strcmp(error_arg, "syntax error") == 0)
- { }
- else if (error_arg)
+ if (strcmp(error_arg, "syntax error") != 0)
{
memcached_set_parser_error(*memc, MEMCACHED_AT, "Error occured during parsing (%s)", error_arg);
return;
}
}
-const char *Context::set_hostname(const char *str, size_t size)
+void Context::hostname(const char *str, size_t size, server_t& server_)
{
size_t copy_length= size_t(NI_MAXHOST) > size ? size : size_t(NI_MAXHOST);
memcpy(_hostname, str, copy_length);
_hostname[copy_length]= 0;
- return _hostname;
+ server_.port= MEMCACHED_DEFAULT_PORT;
+ server_.weight= 1;
+ server_.c_str= _hostname;
+ server_.size= size;
}
+bool Context::string_buffer(const char *str, size_t size, memcached_string_t& string_)
+{
+ if (memcached_string_set(_string_buffer, str, size))
+ {
+ string_.c_str= memcached_string_value(_string_buffer);
+ string_.size= memcached_string_length(_string_buffer);
+
+ return true;
+ }
+
+ return false;
+}
+
+bool Context::set_hash(memcached_hash_t hash)
+{
+ if (_has_hash)
+ {
+ return false;
+ }
+
+ if ((memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, hash)) != MEMCACHED_SUCCESS)
+ {
+ return false;
+ }
+
+ return _has_hash= true;
+}