Fix case where --socket was not always been stored correctly.
[awesomized/libmemcached] / libmemcached / csl / context.cc
index 1a60fede1ad5572117441e4ca364b5db86851c39..16852d5b6da16038b05bb8d0938387f2808fb39c 100644 (file)
@@ -42,15 +42,20 @@ void Context::abort(const char *error_arg, yytokentype last_token, const char *l
 {
   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)
@@ -92,12 +97,42 @@ void Context::error(const char *error_arg, yytokentype last_token, const char *l
   }
 }
 
-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;
+}