summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Aker <brian@tangent.org>2013-04-03 03:14:23 -1000
committerBrian Aker <brian@tangent.org>2013-04-03 03:14:23 -1000
commit11f4bea247e162b63c978508521fda13bf093fd9 (patch)
treecf3a7eca33881b8c15dbdcd80b462f1a8a1d52b3
parent3193d115e56f27dac4b135e2a6522e7a4f9a7776 (diff)
parent9f5111c5c449fec4e94023bbfd803d3ac65cc993 (diff)
downloadlibmemcached-11f4bea247e162b63c978508521fda13bf093fd9.tar.gz
Merge 1.0 tree
-rw-r--r--ChangeLog8
-rw-r--r--Makefile.am9
-rwxr-xr-xbootstrap.sh115
-rw-r--r--clients/memaslap.c27
-rw-r--r--clients/memcapable.cc19
-rw-r--r--clients/memcat.cc20
-rw-r--r--clients/memcp.cc18
-rw-r--r--clients/memdump.cc25
-rw-r--r--clients/memerror.cc3
-rw-r--r--clients/memexist.cc20
-rw-r--r--clients/memflush.cc19
-rw-r--r--clients/memping.cc29
-rw-r--r--clients/memrm.cc27
-rw-r--r--clients/memslap.cc32
-rw-r--r--clients/memstat.cc54
-rw-r--r--clients/memtouch.cc24
-rw-r--r--clients/ms_conn.c5
-rw-r--r--clients/utilities.cc6
-rw-r--r--configure.ac14
-rw-r--r--docs/memcached_server_st.rst8
-rw-r--r--docs/memcached_servers.rst4
-rw-r--r--docs/memcached_stats.rst2
-rw-r--r--libhashkit/md5.cc8
-rw-r--r--libmemcached-1.2/callbacks.h4
-rw-r--r--libmemcached-1.2/error.h67
-rw-r--r--libmemcached-1.2/memcached.h2
-rw-r--r--libmemcached-1.2/memcached.hpp2
-rw-r--r--libmemcached-1.2/platform.h4
-rw-r--r--libmemcached-1.2/server.h20
-rw-r--r--libmemcached-1.2/struct/memcached.h9
-rw-r--r--libmemcached-1.2/types.h83
-rw-r--r--libmemcached/auto.cc10
-rw-r--r--libmemcached/behavior.cc4
-rw-r--r--libmemcached/common.h10
-rw-r--r--libmemcached/connect.cc53
-rw-r--r--libmemcached/connect.hpp2
-rw-r--r--libmemcached/csl/parser.yy11
-rw-r--r--libmemcached/delete.cc8
-rw-r--r--libmemcached/do.cc6
-rw-r--r--libmemcached/do.hpp4
-rw-r--r--libmemcached/dump.cc4
-rw-r--r--libmemcached/error.cc34
-rw-r--r--libmemcached/error.hpp20
-rw-r--r--libmemcached/exist.cc6
-rw-r--r--libmemcached/fetch.cc2
-rw-r--r--libmemcached/flush.cc6
-rw-r--r--libmemcached/flush_buffers.cc2
-rw-r--r--libmemcached/get.cc106
-rw-r--r--libmemcached/hosts.cc22
-rw-r--r--libmemcached/include.am5
-rw-r--r--libmemcached/instance.cc66
-rw-r--r--libmemcached/instance.hpp24
-rw-r--r--libmemcached/io.cc52
-rw-r--r--libmemcached/io.hpp22
-rw-r--r--libmemcached/memcached.cc16
-rw-r--r--libmemcached/parse.cc16
-rw-r--r--libmemcached/poll.cc6
-rw-r--r--libmemcached/poll.h6
-rw-r--r--libmemcached/purge.cc2
-rw-r--r--libmemcached/quit.cc8
-rw-r--r--libmemcached/quit.hpp2
-rw-r--r--libmemcached/response.cc77
-rw-r--r--libmemcached/response.h6
-rw-r--r--libmemcached/sasl.cc4
-rw-r--r--libmemcached/sasl.hpp2
-rw-r--r--libmemcached/server.cc14
-rw-r--r--libmemcached/server.hpp6
-rw-r--r--libmemcached/server_instance.h3
-rw-r--r--libmemcached/server_list.cc4
-rw-r--r--libmemcached/server_list.hpp6
-rw-r--r--libmemcached/stats.cc163
-rw-r--r--libmemcached/storage.cc8
-rw-r--r--libmemcached/touch.cc6
-rw-r--r--libmemcached/udp.cc4
-rw-r--r--libmemcached/udp.hpp4
-rw-r--r--libmemcached/verbosity.cc4
-rw-r--r--libmemcached/version.cc14
-rw-r--r--libmemcached/version.hpp2
-rw-r--r--libmemcached/windows.hpp125
-rw-r--r--libmemcachedutil-1.2/pid.h4
-rw-r--r--libmemcachedutil/pid.cc4
-rw-r--r--libmemcachedutil/ping.cc4
-rw-r--r--libmemcachedutil/version.cc2
-rw-r--r--libtest/alarm.cc2
-rw-r--r--libtest/common.h2
-rw-r--r--libtest/dream.cc2
-rw-r--r--libtest/lite.h4
-rw-r--r--libtest/m4/memcached.m411
-rw-r--r--libtest/main.cc16
-rw-r--r--libtest/memcached.hpp36
-rw-r--r--libtest/unittest.cc31
-rw-r--r--libtest/yatl.m42
-rw-r--r--m4/ax_harden_compiler_flags.m4102
-rw-r--r--m4/ax_libevent.m430
-rw-r--r--m4/ax_memcached.m458
-rw-r--r--m4/ax_platform.m43
-rw-r--r--man/include.am2
-rw-r--r--support/libmemcached.spec.in1
-rw-r--r--tests/cli.am10
-rw-r--r--tests/libmemcached-1.0/all_tests.h2
-rw-r--r--tests/libmemcached-1.0/debug.cc2
-rw-r--r--tests/libmemcached-1.0/dump.cc2
-rw-r--r--tests/libmemcached-1.0/generate.cc2
-rw-r--r--tests/libmemcached-1.0/ketama.cc8
-rw-r--r--tests/libmemcached-1.0/mem_functions.cc117
-rw-r--r--tests/libmemcached-1.0/mem_functions.h2
-rw-r--r--tests/libmemcached-1.0/parser.cc6
-rw-r--r--tests/libmemcached-1.0/plus.cpp2
-rw-r--r--tests/libmemcached-1.0/pool.cc2
-rw-r--r--tests/libmemcached-1.0/print.cc23
-rw-r--r--tests/libmemcached-1.0/replication.cc4
-rw-r--r--tests/libmemcached-1.0/stat.cc2
-rw-r--r--tests/libmemcached-1.0/touch.cc39
-rw-r--r--tests/mem_udp.cc14
-rw-r--r--tests/memping.cc121
-rw-r--r--tests/print.h4
116 files changed, 1640 insertions, 712 deletions
diff --git a/ChangeLog b/ChangeLog
index 196f8dbe..b7c0898d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,14 @@
1.1.0
* Enable MEMCACHED_BEHAVIOR_VERIFY_KEY by default
-1.0.16
+1.0.17 Tue Apr 2 14:02:01 HST 2013
+* Remove c++ namespace that was being exposed (the API should be plug compatible)..
+* Fix cases where --servers wasn't behaving the same in all clients.
+
+1.0.16 Thu Jan 31 19:14:32 EST 2013
* Added support to do two part shutdown of socket.
+* Fixes for Fedora 18.
+* Fix for binary memcached_touch()
1.0.15 Mon Dec 17 07:25:44 EST 2012
* Added support for Murmur3 (HASHKIT_HASH_MURMUR3)
diff --git a/Makefile.am b/Makefile.am
index 596cb24d..24483736 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -71,6 +71,8 @@ TESTS += ${bin_PROGRAMS}
TESTS += ${check_PROGRAMS}
XFAIL_TESTS += ${bin_PROGRAMS}
+if ! BUILD_WIN32
+
merge-clean:
@find ./ | $(GREP) \.gcda | xargs rm -f
@find ./ | $(GREP) \.gcno | xargs rm -f
@@ -86,8 +88,8 @@ merge-clean:
@echo "Files that need to be either removed or checked in:"
@bzr unknowns
-clean-local:
- -rm -rf docs/_build docs/doctrees
+clean-local: clean-libtest-check clean-docs-check
+
lcov: lcov-clean check
@echo
@@ -102,11 +104,10 @@ lcov-clean: clean
@rm -rf lcov */lcov.out
@find . -name '*.gcno' | xargs rm -f
@find . -name '*.gcda' | xargs rm -f
+endif
DISTCLEANFILES+= config/top.h
-clean-local: clean-libtest-check clean-docs-check
-
maintainer-clean-local:
find . -type f -name '*~' -exec rm -f '{}' \;
-rm -f @PACKAGE@-*.rpm
diff --git a/bootstrap.sh b/bootstrap.sh
index fdc43f99..a368197a 100755
--- a/bootstrap.sh
+++ b/bootstrap.sh
@@ -296,42 +296,42 @@ function run_configure ()
# Arguments for configure
local BUILD_CONFIGURE_ARG=
- # Set ENV DEBUG in order to enable debugging
+ # If ENV DEBUG is set we enable both debug and asssert, otherwise we see if this is a VCS checkout and if so enable assert
+ # Set ENV ASSERT in order to enable assert
if $DEBUG; then
- BUILD_CONFIGURE_ARG='--enable-debug'
+ BUILD_CONFIGURE_ARG+=' --enable-debug --enable-assert'
+ elif [[ -n "$VCS_CHECKOUT" ]]; then
+ BUILD_CONFIGURE_ARG+=' --enable-assert'
fi
- # Set ENV ASSERT in order to enable assert
- if [[ -n "$ASSERT" ]]; then
- local ASSERT_ARG=
- ASSERT_ARG='--enable-assert'
- BUILD_CONFIGURE_ARG="$ASSERT_ARG $BUILD_CONFIGURE_ARG"
+ if [[ -n "$CONFIGURE_ARG" ]]; then
+ BUILD_CONFIGURE_ARG+=" $CONFIGURE_ARG"
fi
- if [[ -n "$CONFIGURE_ARG" ]]; then
- BUILD_CONFIGURE_ARG= "$BUILD_CONFIGURE_ARG $CONFIGURE_ARG"
+ if [[ -n "$PREFIX_ARG" ]]; then
+ BUILD_CONFIGURE_ARG+=" $PREFIX_ARG"
fi
ret=1;
# If we are executing on OSX use CLANG, otherwise only use it if we find it in the ENV
case $HOST_OS in
*-darwin-*)
- CC=clang CXX=clang++ $top_srcdir/configure $BUILD_CONFIGURE_ARG || die "Cannot execute CC=clang CXX=clang++ configure $BUILD_CONFIGURE_ARG $PREFIX_ARG"
+ CC=clang CXX=clang++ $top_srcdir/configure $BUILD_CONFIGURE_ARG || die "Cannot execute CC=clang CXX=clang++ configure $BUILD_CONFIGURE_ARG"
ret=$?
;;
rhel-5*)
command_exists 'gcc44' || die "Could not locate gcc44"
- CC=gcc44 CXX=gcc44 $top_srcdir/configure $BUILD_CONFIGURE_ARG $PREFIX_ARG || die "Cannot execute CC=gcc44 CXX=gcc44 configure $BUILD_CONFIGURE_ARG $PREFIX_ARG"
+ CC=gcc44 CXX=gcc44 $top_srcdir/configure $BUILD_CONFIGURE_ARG || die "Cannot execute CC=gcc44 CXX=gcc44 configure $BUILD_CONFIGURE_ARG"
ret=$?
;;
*)
- $CONFIGURE $BUILD_CONFIGURE_ARG $PREFIX_ARG
+ $CONFIGURE $BUILD_CONFIGURE_ARG
ret=$?
;;
esac
if [ $ret -ne 0 ]; then
- die "Could not execute $CONFIGURE $BUILD_CONFIGURE_ARG $PREFIX_ARG"
+ die "Could not execute $CONFIGURE $BUILD_CONFIGURE_ARG"
fi
if [ ! -f 'Makefile' ]; then
@@ -367,6 +367,10 @@ function save_BUILD ()
die "OLD_CONFIGURE_ARG($OLD_CONFIGURE_ARG) was set on push, programmer error!"
fi
+ if [[ -n "$OLD_PREFIX" ]]; then
+ die "OLD_PREFIX($OLD_PREFIX) was set on push, programmer error!"
+ fi
+
if [[ -n "$OLD_MAKE" ]]; then
die "OLD_MAKE($OLD_MAKE) was set on push, programmer error!"
fi
@@ -402,6 +406,10 @@ function restore_BUILD ()
CONFIGURE_ARG=$OLD_CONFIGURE_ARG
fi
+ if [[ -n "$OLD_PREFIX" ]]; then
+ PREFIX_ARG=$OLD_PREFIX
+ fi
+
if [[ -n "$OLD_MAKE" ]]; then
MAKE=$OLD_MAKE
fi
@@ -412,59 +420,13 @@ function restore_BUILD ()
OLD_CONFIGURE=
OLD_CONFIGURE_ARG=
+ OLD_PREFIX=
OLD_MAKE=
OLD_TESTS_ENVIRONMENT=
export -n CC CXX
}
-function push_PREFIX_ARG ()
-{
- if [[ -n "$OLD_PREFIX_ARG" ]]; then
- die "OLD_PREFIX_ARG was set on push, programmer error!"
- fi
-
- if [[ -n "$PREFIX_ARG" ]]; then
- OLD_PREFIX_ARG=$PREFIX_ARG
- PREFIX_ARG=
- fi
-
- if [[ -n "$1" ]]; then
- PREFIX_ARG="--prefix=$1"
- fi
-}
-
-function pop_PREFIX_ARG ()
-{
- if [[ -n "$OLD_PREFIX_ARG" ]]; then
- PREFIX_ARG=$OLD_PREFIX_ARG
- OLD_PREFIX_ARG=
- else
- PREFIX_ARG=
- fi
-}
-
-function push_TESTS_ENVIRONMENT ()
-{
- if [[ -n "$OLD_TESTS_ENVIRONMENT" ]]; then
- die "OLD_TESTS_ENVIRONMENT was set on push, programmer error!"
- fi
-
- if [[ -n "$TESTS_ENVIRONMENT" ]]; then
- OLD_TESTS_ENVIRONMENT=$TESTS_ENVIRONMENT
- TESTS_ENVIRONMENT=
- fi
-}
-
-function pop_TESTS_ENVIRONMENT ()
-{
- TESTS_ENVIRONMENT=
- if [[ -n "$OLD_TESTS_ENVIRONMENT" ]]; then
- TESTS_ENVIRONMENT=$OLD_TESTS_ENVIRONMENT
- OLD_TESTS_ENVIRONMENT=
- fi
-}
-
function safe_pushd ()
{
pushd $1 &> /dev/null ;
@@ -513,11 +475,11 @@ function make_valgrind ()
return 1
fi
+ save_BUILD
+
# If we are required to run configure, do so now
run_configure_if_required
- push_TESTS_ENVIRONMENT
-
# If we don't have a configure, then most likely we will be missing libtool
assert_file 'configure'
if [[ -f 'libtool' ]]; then
@@ -528,13 +490,15 @@ function make_valgrind ()
make_target 'check' || return 1
- pop_TESTS_ENVIRONMENT
+ restore_BUILD
}
function make_install_system ()
{
local INSTALL_LOCATION=$(mktemp -d /tmp/XXXXXXXXXX)
- push_PREFIX_ARG $INSTALL_LOCATION
+
+ save_BUILD
+ PREFIX_ARG="--prefix=$INSTALL_LOCATION"
if [ ! -d $INSTALL_LOCATION ] ; then
die "ASSERT temp directory not found '$INSTALL_LOCATION'"
@@ -542,17 +506,12 @@ function make_install_system ()
run_configure #install_buid_dir
- push_TESTS_ENVIRONMENT
-
make_target 'install'
make_target 'installcheck'
make_target 'uninstall'
- pop_TESTS_ENVIRONMENT
- pop_PREFIX_ARG
-
rm -r -f $INSTALL_LOCATION
make 'distclean'
@@ -560,6 +519,7 @@ function make_install_system ()
die "ASSERT Makefile should not exist"
fi
+ restore_BUILD
safe_popd
}
@@ -848,7 +808,7 @@ function make_for_continuus_integration ()
make_install_system
;;
- *-precise-*)
+ *-ubuntu-quantal-*)
run_configure
assert_exec_file 'configure'
@@ -900,11 +860,11 @@ function make_install_html ()
function make_gdb ()
{
+ save_BUILD
+
if command_exists 'gdb'; then
run_configure_if_required
- push_TESTS_ENVIRONMENT
-
# Set ENV GDB_COMMAND
if [[ -z "$GDB_COMMAND" ]]; then
setup_gdb_command
@@ -924,8 +884,6 @@ function make_gdb ()
rm 'gdb.txt'
fi
- pop_TESTS_ENVIRONMENT
-
if [ -f '.gdb_history' ]; then
rm '.gdb_history'
fi
@@ -937,6 +895,8 @@ function make_gdb ()
echo 'gdb was not present'
return 1
fi
+
+ restore_BUILD
}
# $1 target to compile
@@ -1142,6 +1102,8 @@ function determine_vcs ()
VCS_CHECKOUT=svn
elif [[ -d '.hg' ]]; then
VCS_CHECKOUT=hg
+ else
+ VCS_CHECKOUT=
fi
if [[ -n "$VCS_CHECKOUT" ]]; then
@@ -1466,7 +1428,7 @@ function bootstrap ()
# Set ENV PREFIX in order to set --prefix for ./configure
if [[ -n "$PREFIX" ]]; then
- push_PREFIX_ARG $PREFIX
+ PREFIX_ARG="--prefix=$PREFIX"
fi
# We should always have a target by this point
@@ -1580,6 +1542,7 @@ function main ()
local OLD_CONFIGURE=
local OLD_CONFIGURE_ARG=
+ local OLD_PREFIX=
local OLD_MAKE=
local OLD_TESTS_ENVIRONMENT=
@@ -1726,11 +1689,13 @@ export AUTOHEADER
export AUTOM4TE
export AUTOMAKE
export AUTORECONF
+export CONFIGURE_ARG
export DEBUG
export GNU_BUILD_FLAGS
export LIBTOOLIZE
export LIBTOOLIZE_OPTIONS
export MAKE
+export PREFIX_ARG
export TESTS_ENVIRONMENT
export VERBOSE
export WARNINGS
diff --git a/clients/memaslap.c b/clients/memaslap.c
index 1b5c223a..02907945 100644
--- a/clients/memaslap.c
+++ b/clients/memaslap.c
@@ -378,7 +378,13 @@ static int64_t ms_parse_size()
char unit= optarg[strlen(optarg) - 1];
optarg[strlen(optarg) - 1]= '\0';
+ errno= 0;
ret= strtoll(optarg, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ fprintf(stderr, "strtoll(optarg,..): %s\n", strerror(errno));
+ exit(1);
+ }
switch (unit)
{
@@ -434,8 +440,9 @@ static void ms_options_parse(int argc, char *argv[])
break;
case OPT_CONCURRENCY: /* --concurrency or -c */
+ errno= 0;
ms_setting.nconns= (uint32_t)strtoul(optarg, (char **) NULL, 10);
- if (ms_setting.nconns <= 0)
+ if (ms_setting.nconns <= 0 || errno != 0)
{
fprintf(stderr, "Concurrency must be greater than 0.:-)\n");
exit(1);
@@ -443,8 +450,9 @@ static void ms_options_parse(int argc, char *argv[])
break;
case OPT_EXECUTE_NUMBER: /* --execute_number or -x */
+ errno= 0;
ms_setting.exec_num= (int)strtol(optarg, (char **) NULL, 10);
- if (ms_setting.exec_num <= 0)
+ if (ms_setting.exec_num <= 0 || errno != 0)
{
fprintf(stderr, "Execute number must be greater than 0.:-)\n");
exit(1);
@@ -452,8 +460,9 @@ static void ms_options_parse(int argc, char *argv[])
break;
case OPT_THREAD_NUMBER: /* --threads or -T */
+ errno= 0;
ms_setting.nthreads= (uint32_t)strtoul(optarg, (char **) NULL, 10);
- if (ms_setting.nthreads <= 0)
+ if (ms_setting.nthreads <= 0 || errno != 0)
{
fprintf(stderr, "Threads number must be greater than 0.:-)\n");
exit(1);
@@ -461,8 +470,9 @@ static void ms_options_parse(int argc, char *argv[])
break;
case OPT_FIXED_LTH: /* --fixed_size or -X */
+ errno= 0;
ms_setting.fixed_value_size= (size_t)strtoull(optarg, (char **) NULL, 10);
- if ((ms_setting.fixed_value_size <= 0)
+ if ((ms_setting.fixed_value_size <= 0 || errno != 0)
|| (ms_setting.fixed_value_size > MAX_VALUE_SIZE))
{
fprintf(stderr, "Value size must be between 0 and 1M.:-)\n");
@@ -482,8 +492,9 @@ static void ms_options_parse(int argc, char *argv[])
break;
case OPT_GETS_DIVISION: /* --division or -d */
+ errno= 0;
ms_setting.mult_key_num= (int)strtol(optarg, (char **) NULL, 10);
- if (ms_setting.mult_key_num <= 0)
+ if (ms_setting.mult_key_num <= 0 || errno != 0)
{
fprintf(stderr, "Multi-get key number must be greater than 0.:-)\n");
exit(1);
@@ -568,8 +579,9 @@ static void ms_options_parse(int argc, char *argv[])
break;
case OPT_SOCK_PER_CONN: /* --conn_sock or -n */
+ errno= 0;
ms_setting.sock_per_conn= (uint32_t)strtoul(optarg, (char **) NULL, 10);
- if (ms_setting.sock_per_conn <= 0)
+ if (ms_setting.sock_per_conn <= 0 || errno != 0)
{
fprintf(stderr, "Number of socks of each concurrency "
"must be greater than 0.:-)\n");
@@ -605,8 +617,9 @@ static void ms_options_parse(int argc, char *argv[])
break;
case OPT_REP_WRITE_SRV: /* --rep_write or -p */
+ errno= 0;
ms_setting.rep_write_srv= (uint32_t)strtoul(optarg, (char **) NULL, 10);
- if (ms_setting.rep_write_srv <= 0)
+ if (ms_setting.rep_write_srv <= 0 || errno != 0)
{
fprintf(stderr,
"Number of replication writing server must be greater "
diff --git a/clients/memcapable.cc b/clients/memcapable.cc
index 5dd78306..5566ea91 100644
--- a/clients/memcapable.cc
+++ b/clients/memcapable.cc
@@ -124,7 +124,7 @@ static struct addrinfo *lookuphost(const char *hostname, const char *port)
*/
static memcached_socket_t set_noblock(void)
{
-#ifdef WIN32
+#if defined(_WIN32)
u_long arg = 1;
if (ioctlsocket(sock, FIONBIO, &arg) == SOCKET_ERROR)
{
@@ -1389,11 +1389,15 @@ static enum test_return ascii_get_unknown_value(char **key, char **value, ssize_
verify(*key != NULL);
char *ptr= end + 1;
+ errno= 0;
unsigned long val= strtoul(ptr, &end, 10); /* flags */
+ verify(errno == 0);
verify(ptr != end);
verify(val == 0);
verify(end != NULL);
+ errno= 0;
*ndata = (ssize_t)strtoul(end, &end, 10); /* size */
+ verify(errno == 0);
verify(ptr != end);
verify(end != NULL);
while (end and *end != '\n' and isspace(*end))
@@ -1424,11 +1428,16 @@ static enum test_return ascii_get_value(const char *key, const char *value)
char *ptr= buffer + 6 + strlen(key) + 1;
char *end;
+ errno= 0;
unsigned long val= strtoul(ptr, &end, 10); /* flags */
+ verify(errno == 0);
verify(ptr != end);
verify(val == 0);
verify(end != NULL);
+
+ errno= 0;
val= strtoul(end, &end, 10); /* size */
+ verify(errno == 0);
verify(ptr != end);
verify(val == datasize);
verify(end != NULL);
@@ -1486,15 +1495,23 @@ static enum test_return ascii_gets_value(const char *key, const char *value,
char *ptr= buffer + 6 + strlen(key) + 1;
char *end;
+ errno= 0;
unsigned long val= strtoul(ptr, &end, 10); /* flags */
+ verify(errno == 0);
verify(ptr != end);
verify(val == 0);
verify(end != NULL);
+
+ errno= 0;
val= strtoul(end, &end, 10); /* size */
+ verify(errno == 0);
verify(ptr != end);
verify(val == datasize);
verify(end != NULL);
+
+ errno= 0;
*cas= strtoul(end, &end, 10); /* cas */
+ verify(errno == 0);
verify(ptr != end);
verify(val == datasize);
verify(end != NULL);
diff --git a/clients/memcat.cc b/clients/memcat.cc
index 9aaa09af..faf7310f 100644
--- a/clients/memcat.cc
+++ b/clients/memcat.cc
@@ -39,19 +39,17 @@ static char *opt_file;
int main(int argc, char *argv[])
{
- memcached_st *memc;
char *string;
size_t string_length;
uint32_t flags;
memcached_return_t rc;
- memcached_server_st *servers;
int return_code= EXIT_SUCCESS;
options_parse(argc, argv);
initialize_sockets();
- if (!opt_servers)
+ if (opt_servers == NULL)
{
char *temp;
@@ -59,17 +57,23 @@ int main(int argc, char *argv[])
{
opt_servers= strdup(temp);
}
- else
+
+ if (opt_servers == NULL)
{
std::cerr << "No servers provied" << std::endl;
exit(EXIT_FAILURE);
}
}
- memc= memcached_create(NULL);
- process_hash_option(memc, opt_hash);
+ memcached_server_st* servers= memcached_servers_parse(opt_servers);
+ if (servers == NULL or memcached_server_list_count(servers) == 0)
+ {
+ std::cerr << "Invalid server list provided:" << opt_servers << std::endl;
+ return EXIT_FAILURE;
+ }
- servers= memcached_servers_parse(opt_servers);
+ memcached_st* memc= memcached_create(NULL);
+ process_hash_option(memc, opt_hash);
memcached_server_push(memc, servers);
memcached_server_list_free(servers);
@@ -253,7 +257,7 @@ void options_parse(int argc, char *argv[])
case '?':
/* getopt_long already printed an error message. */
- exit(1);
+ exit(EXIT_FAILURE);
default:
abort();
}
diff --git a/clients/memcp.cc b/clients/memcp.cc
index ddee8381..fb899e56 100644
--- a/clients/memcp.cc
+++ b/clients/memcp.cc
@@ -129,21 +129,23 @@ int main(int argc, char *argv[])
{
opt_servers= strdup(temp);
}
- else
+ else if (argc >= 1 and argv[--argc])
+ {
+ opt_servers= strdup(argv[--argc]);
+ }
+
+ if (opt_servers == NULL)
{
std::cerr << "No Servers provided" << std::endl;
exit(EXIT_FAILURE);
}
}
- memcached_server_st *servers;
- if (opt_servers)
- {
- servers= memcached_servers_parse(opt_servers);
- }
- else
+ memcached_server_st* servers= memcached_servers_parse(opt_servers);
+ if (servers == NULL or memcached_server_list_count(servers) == 0)
{
- servers= memcached_servers_parse(argv[--argc]);
+ std::cerr << "Invalid server list provided:" << opt_servers << std::endl;
+ return EXIT_FAILURE;
}
memcached_server_push(memc, servers);
diff --git a/clients/memdump.cc b/clients/memdump.cc
index c9deb752..ca1c0430 100644
--- a/clients/memdump.cc
+++ b/clients/memdump.cc
@@ -62,9 +62,6 @@ int main(int argc, char *argv[])
options_parse(argc, argv);
- memcached_st *memc= memcached_create(NULL);
- process_hash_option(memc, opt_hash);
-
if (opt_servers == NULL)
{
char *temp;
@@ -73,22 +70,32 @@ int main(int argc, char *argv[])
{
opt_servers= strdup(temp);
}
- else
+ else if (argc >= 1 and argv[--argc])
+ {
+ opt_servers= strdup(argv[--argc]);
+ }
+
+ if (opt_servers == NULL)
{
std::cerr << "No Servers provided" << std::endl;
exit(EXIT_FAILURE);
}
}
- memcached_server_st *servers;
- if (opt_servers)
+ memcached_server_st* servers= memcached_servers_parse(opt_servers);
+ if (servers == NULL or memcached_server_list_count(servers) == 0)
{
- servers= memcached_servers_parse(opt_servers);
+ std::cerr << "Invalid server list provided:" << opt_servers << std::endl;
+ return EXIT_FAILURE;
}
- else
+
+ memcached_st *memc= memcached_create(NULL);
+ if (memc == NULL)
{
- servers= memcached_servers_parse(argv[--argc]);
+ std::cerr << "Could not allocate a memcached_st structure.\n" << std::endl;
+ return EXIT_FAILURE;
}
+ process_hash_option(memc, opt_hash);
memcached_server_push(memc, servers);
memcached_server_list_free(servers);
diff --git a/clients/memerror.cc b/clients/memerror.cc
index 654db143..27ab0c5e 100644
--- a/clients/memerror.cc
+++ b/clients/memerror.cc
@@ -47,7 +47,8 @@ int main(int argc, char *argv[])
char *nptr;
unsigned long value= strtoul(argv[optind], &nptr, 10);
- if ((nptr == argv[optind] and value == 0) or
+ if ((errno != 0) or
+ (nptr == argv[optind] and value == 0) or
(value == ULONG_MAX and errno == ERANGE) or
(value == 0 and errno == EINVAL))
{
diff --git a/clients/memexist.cc b/clients/memexist.cc
index cf3f9d7f..89f2a8e9 100644
--- a/clients/memexist.cc
+++ b/clients/memexist.cc
@@ -36,13 +36,10 @@ static void options_parse(int argc, char *argv[]);
int main(int argc, char *argv[])
{
- memcached_st *memc;
- memcached_server_st *servers;
-
options_parse(argc, argv);
initialize_sockets();
- if (opt_servers == 0)
+ if (opt_servers == NULL)
{
char *temp;
@@ -50,17 +47,24 @@ int main(int argc, char *argv[])
{
opt_servers= strdup(temp);
}
- else
+
+ if (opt_servers == NULL)
{
std::cerr << "No Servers provided" << std::endl;
- return EXIT_FAILURE;
+ exit(EXIT_FAILURE);
}
}
- memc= memcached_create(NULL);
+ memcached_server_st* servers= memcached_servers_parse(opt_servers);
+ if (servers == NULL or memcached_server_list_count(servers) == 0)
+ {
+ std::cerr << "Invalid server list provided:" << opt_servers << std::endl;
+ return EXIT_FAILURE;
+ }
+
+ memcached_st* memc= memcached_create(NULL);
process_hash_option(memc, opt_hash);
- servers= memcached_servers_parse(opt_servers);
memcached_server_push(memc, servers);
memcached_server_list_free(servers);
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL,
diff --git a/clients/memflush.cc b/clients/memflush.cc
index 0d798202..fcaea6e3 100644
--- a/clients/memflush.cc
+++ b/clients/memflush.cc
@@ -11,6 +11,7 @@
*/
#include "mem_config.h"
+#include <cerrno>
#include <cstdio>
#include <cstring>
#include <getopt.h>
@@ -47,16 +48,22 @@ int main(int argc, char *argv[])
{
opt_servers= strdup(temp);
}
- else
+
+ if (opt_servers == false)
{
std::cerr << "No Servers provided" << std::endl;
exit(EXIT_FAILURE);
}
}
- memcached_st *memc= memcached_create(NULL);
+ memcached_server_st* servers= memcached_servers_parse(opt_servers);
+ if (servers == NULL or memcached_server_list_count(servers) == 0)
+ {
+ std::cerr << "Invalid server list provided:" << opt_servers << std::endl;
+ return EXIT_FAILURE;
+ }
- memcached_server_st *servers= memcached_servers_parse(opt_servers);
+ memcached_st *memc= memcached_create(NULL);
memcached_server_push(memc, servers);
memcached_server_list_free(servers);
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL,
@@ -148,7 +155,13 @@ void options_parse(int argc, char *argv[])
break;
case OPT_EXPIRE: /* --expire */
+ errno= 0;
opt_expire= (time_t)strtoll(optarg, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ std::cerr << "Incorrect value passed to --expire: `" << optarg << "`" << std::cerr;
+ exit(EXIT_FAILURE);
+ }
break;
case OPT_USERNAME:
diff --git a/clients/memping.cc b/clients/memping.cc
index 47dfe3e4..88e7063c 100644
--- a/clients/memping.cc
+++ b/clients/memping.cc
@@ -11,12 +11,17 @@
*/
#include "mem_config.h"
-#include <stdio.h>
+#include <cerrno>
+#include <cstdio>
+#include <cstring>
+#include <getopt.h>
#include <unistd.h>
#include <string.h>
#include <getopt.h>
+
#include <libmemcached-1.2/memcached.h>
#include <libmemcachedutil-1.2/util.h>
+
#include "client_options.h"
#include "utilities.h"
@@ -47,7 +52,8 @@ int main(int argc, char *argv[])
{
opt_servers= strdup(temp);
}
- else
+
+ if (opt_servers == NULL)
{
std::cerr << "No Servers provided" << std::endl;
exit(EXIT_FAILURE);
@@ -56,6 +62,12 @@ int main(int argc, char *argv[])
int exit_code= EXIT_SUCCESS;
memcached_server_st *servers= memcached_servers_parse(opt_servers);
+ if (servers == NULL or memcached_server_list_count(servers) == 0)
+ {
+ std::cerr << "Invalid server list provided:" << opt_servers << std::endl;
+ exit_code= EXIT_FAILURE;
+ }
+ else
{
for (uint32_t x= 0; x < memcached_server_list_count(servers); x++)
{
@@ -63,6 +75,11 @@ int main(int argc, char *argv[])
const char *hostname= servers[x].hostname;
in_port_t port= servers[x].port;
+ if (opt_verbose)
+ {
+ std::cout << "Trying to ping " << hostname << ":" << port << std::endl;
+ }
+
if (libmemcached_util_ping2(hostname, port, opt_username, opt_passwd, &instance_rc) == false)
{
std::cerr << "Failed to ping " << hostname << ":" << port << " " << memcached_strerror(NULL, instance_rc) << std::endl;
@@ -139,7 +156,13 @@ void options_parse(int argc, char *argv[])
break;
case OPT_EXPIRE: /* --expire */
- opt_expire= (time_t)strtoll(optarg, (char **)NULL, 10);
+ errno= 0;
+ opt_expire= time_t(strtoll(optarg, (char **)NULL, 10));
+ if (errno != 0)
+ {
+ std::cerr << "Incorrect value passed to --expire: `" << optarg << "`" << std::cerr;
+ exit(EXIT_FAILURE);
+ }
break;
case OPT_USERNAME:
diff --git a/clients/memrm.cc b/clients/memrm.cc
index 80c53f00..226ec577 100644
--- a/clients/memrm.cc
+++ b/clients/memrm.cc
@@ -11,6 +11,7 @@
*/
#include "mem_config.h"
+#include <cerrno>
#include <cstdio>
#include <cstring>
#include <getopt.h>
@@ -38,13 +39,10 @@ static void options_parse(int argc, char *argv[]);
int main(int argc, char *argv[])
{
- memcached_st *memc;
- memcached_server_st *servers;
-
options_parse(argc, argv);
initialize_sockets();
- if (opt_servers == 0)
+ if (opt_servers == NULL)
{
char *temp;
@@ -52,17 +50,24 @@ int main(int argc, char *argv[])
{
opt_servers= strdup(temp);
}
- else
+
+ if (opt_servers == NULL)
{
std::cerr << "No Servers provided" << std::endl;
- return EXIT_FAILURE;
+ exit(EXIT_FAILURE);
}
}
- memc= memcached_create(NULL);
+ memcached_server_st* servers= memcached_servers_parse(opt_servers);
+ if (servers == NULL or memcached_server_list_count(servers) == 0)
+ {
+ std::cerr << "Invalid server list provided:" << opt_servers << std::endl;
+ return EXIT_FAILURE;
+ }
+
+ memcached_st* memc= memcached_create(NULL);
process_hash_option(memc, opt_hash);
- servers= memcached_servers_parse(opt_servers);
memcached_server_push(memc, servers);
memcached_server_list_free(servers);
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL,
@@ -205,7 +210,13 @@ static void options_parse(int argc, char *argv[])
break;
case OPT_EXPIRE: /* --expire */
+ errno= 0;
opt_expire= (time_t)strtoll(optarg, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ std::cerr << "Incorrect value passed to --expire: `" << optarg << "`" << std::cerr;
+ exit(EXIT_FAILURE);
+ }
break;
case OPT_HASH:
diff --git a/clients/memslap.cc b/clients/memslap.cc
index b839cb2d..30cc07f6 100644
--- a/clients/memslap.cc
+++ b/clients/memslap.cc
@@ -39,6 +39,7 @@
#include <mem_config.h>
#include <cassert>
+#include <cerrno>
#include <cstdio>
#include <cstdlib>
#include <cstring>
@@ -50,7 +51,6 @@
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
-#include <sys/types.h>
#include <unistd.h>
#include <iostream>
@@ -212,14 +212,20 @@ int main(int argc, char *argv[])
{
opt_servers= strdup(temp);
}
- else
+
+ if (opt_servers == NULL)
{
- fprintf(stderr, "No Servers provided\n");
- return EXIT_FAILURE;
+ std::cerr << "No Servers provided" << std::endl;
+ exit(EXIT_FAILURE);
}
}
memcached_server_st *servers= memcached_servers_parse(opt_servers);
+ if (servers == NULL or memcached_server_list_count(servers) == 0)
+ {
+ std::cerr << "Invalid server list provided:" << opt_servers << std::endl;
+ return EXIT_FAILURE;
+ }
pthread_mutex_init(&sleeper_mutex, NULL);
pthread_cond_init(&sleep_threshhold, NULL);
@@ -468,15 +474,33 @@ void options_parse(int argc, char *argv[])
break;
case OPT_SLAP_CONCURRENCY:
+ errno= 0;
opt_concurrency= (unsigned int)strtoul(optarg, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ fprintf(stderr, "Invalid value for concurrency: %s\n", optarg);
+ exit(EXIT_FAILURE);
+ }
break;
case OPT_SLAP_EXECUTE_NUMBER:
+ errno= 0;
opt_execute_number= (unsigned int)strtoul(optarg, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ fprintf(stderr, "Invalid value for execute: %s\n", optarg);
+ exit(EXIT_FAILURE);
+ }
break;
case OPT_SLAP_INITIAL_LOAD:
+ errno= 0;
opt_createial_load= (unsigned int)strtoul(optarg, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ fprintf(stderr, "Invalid value for initial load: %s\n", optarg);
+ exit(EXIT_FAILURE);
+ }
break;
case OPT_QUIET:
diff --git a/clients/memstat.cc b/clients/memstat.cc
index fb5a8586..93ec080c 100644
--- a/clients/memstat.cc
+++ b/clients/memstat.cc
@@ -68,12 +68,12 @@ static struct option long_options[]=
};
-static memcached_return_t stat_printer(memcached_server_instance_st instance,
+static memcached_return_t stat_printer(const memcached_instance_st * instance,
const char *key, size_t key_length,
const char *value, size_t value_length,
void *context)
{
- static memcached_server_instance_st last= NULL;
+ static const memcached_instance_st * last= NULL;
(void)context;
if (last != instance)
@@ -89,7 +89,7 @@ static memcached_return_t stat_printer(memcached_server_instance_st instance,
}
static memcached_return_t server_print_callback(const memcached_st *,
- memcached_server_instance_st instance,
+ const memcached_instance_st * instance,
void *)
{
std::cerr << memcached_server_name(instance) << ":" << memcached_server_port(instance) <<
@@ -105,26 +105,36 @@ int main(int argc, char *argv[])
options_parse(argc, argv);
initialize_sockets();
- if (opt_servers == false)
+ if (opt_servers == NULL)
{
char *temp;
if ((temp= getenv("MEMCACHED_SERVERS")))
{
opt_servers= strdup(temp);
}
- else
+
+ if (opt_servers == NULL)
{
std::cerr << "No Servers provided" << std::endl;
return EXIT_FAILURE;
}
}
+ memcached_server_st* servers= memcached_servers_parse(opt_servers);
+ if (servers == NULL or memcached_server_list_count(servers) == 0)
+ {
+ std::cerr << "Invalid server list provided:" << opt_servers << std::endl;
+ return EXIT_FAILURE;
+ }
+
+ if (opt_servers)
+ {
+ free(opt_servers);
+ }
+
memcached_st *memc= memcached_create(NULL);
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, opt_binary);
- memcached_server_st *servers= memcached_servers_parse(opt_servers);
- free(opt_servers);
-
memcached_return_t rc= memcached_server_push(memc, servers);
memcached_server_list_free(servers);
@@ -211,9 +221,8 @@ static void run_analyzer(memcached_st *memc, memcached_stat_st *memc_stat)
uint32_t num_of_tests= 32;
const char *test_key= "libmemcached_test_key";
- memcached_st **servers;
- servers= static_cast<memcached_st**>(malloc(sizeof(memcached_st*) * server_count));
- if (not servers)
+ memcached_st **servers= static_cast<memcached_st**>(malloc(sizeof(memcached_st*) * server_count));
+ if (servers == NULL)
{
fprintf(stderr, "Failed to allocate memory\n");
return;
@@ -221,20 +230,25 @@ static void run_analyzer(memcached_st *memc, memcached_stat_st *memc_stat)
for (uint32_t x= 0; x < server_count; x++)
{
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, x);
if ((servers[x]= memcached_create(NULL)) == NULL)
{
fprintf(stderr, "Failed to memcached_create()\n");
if (x > 0)
+ {
memcached_free(servers[0]);
+ }
x--;
for (; x > 0; x--)
+ {
memcached_free(servers[x]);
+ }
free(servers);
+
return;
}
memcached_server_add(servers[x],
@@ -249,7 +263,7 @@ static void run_analyzer(memcached_st *memc, memcached_stat_st *memc_stat)
for (uint32_t x= 0; x < server_count; x++)
{
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, x);
gettimeofday(&start_time, NULL);
@@ -258,8 +272,10 @@ static void run_analyzer(memcached_st *memc, memcached_stat_st *memc_stat)
size_t vlen;
char *val= memcached_get(servers[x], test_key, strlen(test_key),
&vlen, &flags, &rc);
- if (rc != MEMCACHED_NOTFOUND && rc != MEMCACHED_SUCCESS)
+ if (rc != MEMCACHED_NOTFOUND and rc != MEMCACHED_SUCCESS)
+ {
break;
+ }
free(val);
}
gettimeofday(&end_time, NULL);
@@ -290,7 +306,7 @@ static void run_analyzer(memcached_st *memc, memcached_stat_st *memc_stat)
if (server_count > 1 && slowest_time > 0)
{
- memcached_server_instance_st slowest=
+ const memcached_instance_st * slowest=
memcached_server_instance_by_position(memc, slowest_server);
printf("---\n");
@@ -302,7 +318,9 @@ static void run_analyzer(memcached_st *memc, memcached_stat_st *memc_stat)
printf("\n");
for (uint32_t x= 0; x < server_count; x++)
+ {
memcached_free(servers[x]);
+ }
free(servers);
free(analyze_mode);
@@ -319,9 +337,9 @@ static void print_analysis_report(memcached_st *memc,
{
uint32_t server_count= memcached_server_count(memc);
- memcached_server_instance_st most_consumed_server= memcached_server_instance_by_position(memc, report->most_consumed_server);
- memcached_server_instance_st least_free_server= memcached_server_instance_by_position(memc, report->least_free_server);
- memcached_server_instance_st oldest_server= memcached_server_instance_by_position(memc, report->oldest_server);
+ const memcached_instance_st * most_consumed_server= memcached_server_instance_by_position(memc, report->most_consumed_server);
+ const memcached_instance_st * least_free_server= memcached_server_instance_by_position(memc, report->least_free_server);
+ const memcached_instance_st * oldest_server= memcached_server_instance_by_position(memc, report->oldest_server);
printf("Memcached Cluster Analysis Report\n\n");
diff --git a/clients/memtouch.cc b/clients/memtouch.cc
index 49d154e3..bb6da42f 100644
--- a/clients/memtouch.cc
+++ b/clients/memtouch.cc
@@ -12,14 +12,16 @@
#include <mem_config.h>
+#include <cerrno>
#include <cstdio>
#include <cstring>
#include <getopt.h>
#include <iostream>
#include <unistd.h>
+
#include <libmemcached-1.2/memcached.h>
-#include "utilities.h"
+#include "clients/utilities.h"
#define PROGRAM_NAME "memtouch"
#define PROGRAM_DESCRIPTION "Update the expiration value of an alreasy existing value in the sever"
@@ -52,18 +54,24 @@ int main(int argc, char *argv[])
{
opt_servers= strdup(temp);
}
- else
+
+ if (opt_servers == NULL)
{
std::cerr << "No Servers provided" << std::endl;
- return EXIT_FAILURE;
+ exit(EXIT_FAILURE);
}
}
+ memcached_server_st* servers= memcached_servers_parse(opt_servers);
+ if (servers == NULL or memcached_server_list_count(servers) == 0)
+ {
+ std::cerr << "Invalid server list provided:" << opt_servers << std::endl;
+ return EXIT_FAILURE;
+ }
+
memcached_st *memc= memcached_create(NULL);
process_hash_option(memc, opt_hash);
- memcached_server_st *servers= memcached_servers_parse(opt_servers);
-
memcached_server_push(memc, servers);
memcached_server_list_free(servers);
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL,
@@ -212,7 +220,13 @@ void options_parse(int argc, char *argv[])
break;
case OPT_EXPIRE:
+ errno= 0;
expiration= time_t(strtoul(optarg, (char **)NULL, 10));
+ if (errno != 0)
+ {
+ fprintf(stderr, "Invalid value for --expire: %s\n", optarg);
+ exit(EXIT_FAILURE);
+ }
break;
case OPT_QUIET:
diff --git a/clients/ms_conn.c b/clients/ms_conn.c
index 2cbc7e0b..2afc9fa1 100644
--- a/clients/ms_conn.c
+++ b/clients/ms_conn.c
@@ -1160,7 +1160,12 @@ static int ms_ascii_process_line(ms_conn_t *c, char *command)
{
token_t tokens[MAX_TOKENS];
ms_tokenize_command(command, tokens, MAX_TOKENS);
+ errno= 0;
value_len= strtol(tokens[VALUELEN_TOKEN].value, NULL, 10);
+ if (errno != 0)
+ {
+ printf("<%d ERROR %s\n", c->sfd, strerror(errno));
+ }
c->currcmd.key_prefix= *(uint64_t *)tokens[KEY_TOKEN].value;
/*
diff --git a/clients/utilities.cc b/clients/utilities.cc
index 5f5958e2..268b7904 100644
--- a/clients/utilities.cc
+++ b/clients/utilities.cc
@@ -144,7 +144,9 @@ void process_hash_option(memcached_st *memc, char *opt_hash)
memcached_return_t rc;
if (opt_hash == NULL)
+ {
return;
+ }
set= MEMCACHED_HASH_DEFAULT; /* Just here to solve warning */
if (!strcasecmp(opt_hash, "CRC"))
@@ -184,12 +186,12 @@ void process_hash_option(memcached_st *memc, char *opt_hash)
void initialize_sockets(void)
{
/* Define the function for all platforms to avoid #ifdefs in each program */
-#if defined(WIN32) && WIN32
+#if defined(_WIN32)
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0)
{
fprintf(stderr, "Socket Initialization Error. Program aborted\n");
exit(EXIT_FAILURE);
}
-#endif
+#endif // #if defined(_WIN32)
}
diff --git a/configure.ac b/configure.ac
index 724ad251..eadc533f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
# LibmemcacheD
-# Copyright (C) 2011-2012 Data Differential, http://datadifferential.com/
+# Copyright (C) 2011-2013 Data Differential, http://datadifferential.com/
# Copyright (C) 2006-2010 Brian Aker, Monty Taylor, Trond Norbye
# All rights reserved.
#
@@ -100,9 +100,13 @@ PROTOCOL_BINARY_TEST
ENABLE_DEPRECATED
# Checks for programs.
+AC_PROG_AWK
+AC_PROG_SED
+AC_PROG_MKDIR_P
AC_CHECK_PROGS([LEX],['flex'],[:])
AC_CHECK_PROGS([YACC],['bison'],[:])
AX_PROG_SPHINX_BUILD
+AX_PROG_MEMCACHED
# Checks for libraries.
AC_SEARCH_LIBS([getopt_long],[gnugetopt])
@@ -287,10 +291,12 @@ AC_DEFUN([CHECK_FOR_PTHREAD_AND_SASL],
])
CHECK_FOR_PTHREAD_AND_SASL
-
# backtrace(), others require shared builds
-AS_IF([test "x$enable_shared" = "xyes"],
- [AC_DEFINE([HAVE_SHARED_ENABLED],[1],[Enable code which requires shared library support. Like backtrace().])])
+AC_DEFUN([__ENABLE_SHARED],
+ [AC_REQUIRE([AX_PLATFORM])
+ AS_IF([test "x${TARGET_WINDOWS}" = "xtrue"],[enable_shared=no])
+ AS_IF([test "x$enable_shared" = "xyes"],
+ [AC_DEFINE([HAVE_SHARED_ENABLED],[1],[Enable code which requires shared library support. Like backtrace().])])])
AM_CONDITIONAL([SHARED_ENABLED],[test "x$enable_shared" = "xyes"])
PANDORA_ENABLE_DTRACE
diff --git a/docs/memcached_server_st.rst b/docs/memcached_server_st.rst
index 6bca49b8..63008795 100644
--- a/docs/memcached_server_st.rst
+++ b/docs/memcached_server_st.rst
@@ -11,13 +11,13 @@ SYNOPSIS
#include <libmemcached/memcached.h>
-.. c:type:: memcached_server_instance_st
+.. c:type:: const memcached_instance_st *
.. c:type:: memcached_server_list_st
.. c:type:: memcached_server_st
-.. c:function:: const memcached_server_instance_st memcached_server_list (memcached_st *ptr)
+.. c:function:: const const memcached_instance_st * memcached_server_list (memcached_st *ptr)
.. c:function:: void memcached_server_list_free (memcached_server_list_st list)
@@ -25,9 +25,9 @@ SYNOPSIS
.. c:function:: uint32_t memcached_server_list_count (memcached_server_list_st list)
-.. c:function:: const char *memcached_server_error (memcached_server_instance_st instance)
+.. c:function:: const char *memcached_server_error (const memcached_instance_st * instance)
-.. c:function:: void memcached_server_error_reset (memcached_server_instance_st list)
+.. c:function:: void memcached_server_error_reset (const memcached_instance_st * list)
.. deprecated:: 0.39
.. c:function:: void memcached_servers_parse ()
diff --git a/docs/memcached_servers.rst b/docs/memcached_servers.rst
index e86dad81..d3c90379 100644
--- a/docs/memcached_servers.rst
+++ b/docs/memcached_servers.rst
@@ -20,9 +20,9 @@ SYNOPSIS
.. c:function:: memcached_return_t memcached_server_push (memcached_st *ptr, const memcached_server_st *list)
-.. c:function:: memcached_server_instance_st memcached_server_by_key (memcached_st *ptr, const char *key, size_t key_length, memcached_return_t *error)
+.. c:function:: const memcached_instance_st * memcached_server_by_key (memcached_st *ptr, const char *key, size_t key_length, memcached_return_t *error)
-.. c:function:: memcached_server_instance_st memcached_server_get_last_disconnect (const memcached_st *ptr)
+.. c:function:: const memcached_instance_st * memcached_server_get_last_disconnect (const memcached_st *ptr)
.. c:function:: memcached_return_t memcached_server_cursor(const memcached_st *ptr, const memcached_server_fn *callback, void *context, uint32_t number_of_callbacks)
diff --git a/docs/memcached_stats.rst b/docs/memcached_stats.rst
index 828ef8c6..c173619a 100644
--- a/docs/memcached_stats.rst
+++ b/docs/memcached_stats.rst
@@ -16,7 +16,7 @@ SYNOPSIS
.. c:type:: memcached_stat_st
-.. c:type:: memcached_return_t (*memcached_stat_fn)(memcached_server_instance_st server, const char *key, size_t key_length, const char *value, size_t value_length, void *context)
+.. c:type:: memcached_return_t (*memcached_stat_fn)(const memcached_instance_st * server, const char *key, size_t key_length, const char *value, size_t value_length, void *context)
.. c:function:: memcached_stat_st *memcached_stat (memcached_st *ptr, char *args, memcached_return_t *error)
diff --git a/libhashkit/md5.cc b/libhashkit/md5.cc
index 71069dbd..ef867766 100644
--- a/libhashkit/md5.cc
+++ b/libhashkit/md5.cc
@@ -71,6 +71,14 @@ documentation and/or software.
#include <string.h>
#include <sys/types.h>
+#define GCC_VERSION (__GNUC__ * 10000 \
+ + __GNUC_MINOR__ * 100 \
+ + __GNUC_PATCHLEVEL__)
+
+#if GCC_VERSION > 40600
+# pragma GCC diagnostic ignored "-Wunsafe-loop-optimizations"
+#endif
+
/* POINTER defines a generic pointer type */
typedef unsigned char *POINTER;
typedef const unsigned char *CONST_POINTER;
diff --git a/libmemcached-1.2/callbacks.h b/libmemcached-1.2/callbacks.h
index e321ceb4..7ab8cb1c 100644
--- a/libmemcached-1.2/callbacks.h
+++ b/libmemcached-1.2/callbacks.h
@@ -42,8 +42,8 @@ extern "C" {
#endif
typedef memcached_return_t (*memcached_execute_fn)(const memcached_st *ptr, memcached_result_st *result, void *context);
-typedef memcached_return_t (*memcached_server_fn)(const memcached_st *ptr, memcached_server_instance_st server, void *context);
-typedef memcached_return_t (*memcached_stat_fn)(memcached_server_instance_st server,
+typedef memcached_return_t (*memcached_server_fn)(const memcached_st *ptr, const memcached_instance_st * server, void *context);
+typedef memcached_return_t (*memcached_stat_fn)(const memcached_instance_st * server,
const char *key, size_t key_length,
const char *value, size_t value_length,
void *context);
diff --git a/libmemcached-1.2/error.h b/libmemcached-1.2/error.h
new file mode 100644
index 00000000..9346bb0b
--- /dev/null
+++ b/libmemcached-1.2/error.h
@@ -0,0 +1,67 @@
+/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+ *
+ * LibMemcached
+ *
+ * Copyright (C) 2011 Data Differential, http://datadifferential.com/
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * * The names of its contributors may not be used to endorse or
+ * promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#pragma once
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+LIBMEMCACHED_API
+ const char *memcached_error(const memcached_st *);
+
+LIBMEMCACHED_API
+ const char *memcached_last_error_message(const memcached_st *);
+
+LIBMEMCACHED_API
+ void memcached_error_print(const memcached_st *);
+
+LIBMEMCACHED_API
+ memcached_return_t memcached_last_error(const memcached_st *);
+
+LIBMEMCACHED_API
+ int memcached_last_error_errno(const memcached_st *);
+
+LIBMEMCACHED_API
+ const char *memcached_server_error(const memcached_instance_st * ptr);
+
+LIBMEMCACHED_API
+ memcached_return_t memcached_server_error_return(const memcached_instance_st * ptr);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/libmemcached-1.2/memcached.h b/libmemcached-1.2/memcached.h
index 7d932471..2a2b54a7 100644
--- a/libmemcached-1.2/memcached.h
+++ b/libmemcached-1.2/memcached.h
@@ -154,7 +154,7 @@ LIBMEMCACHED_API
memcached_return_t memcached_push(memcached_st *destination, const memcached_st *source);
LIBMEMCACHED_API
-memcached_server_instance_st memcached_server_instance_by_position(const memcached_st *ptr, uint32_t server_key);
+const memcached_instance_st * memcached_server_instance_by_position(const memcached_st *ptr, uint32_t server_key);
LIBMEMCACHED_API
uint32_t memcached_server_count(const memcached_st *);
diff --git a/libmemcached-1.2/memcached.hpp b/libmemcached-1.2/memcached.hpp
index 0bcb200e..885e809d 100644
--- a/libmemcached-1.2/memcached.hpp
+++ b/libmemcached-1.2/memcached.hpp
@@ -847,7 +847,7 @@ public:
*/
for (uint32_t x= 0; x < server_count; x++)
{
- memcached_server_instance_st instance= memcached_server_instance_by_position(memc_, x);
+ const memcached_instance_st * instance= memcached_server_instance_by_position(memc_, x);
std::ostringstream strstm;
std::string server_name(memcached_server_name(instance));
server_name.append(":");
diff --git a/libmemcached-1.2/platform.h b/libmemcached-1.2/platform.h
index 9cbc705f..efdf53f8 100644
--- a/libmemcached-1.2/platform.h
+++ b/libmemcached-1.2/platform.h
@@ -38,7 +38,7 @@
#pragma once
-#if defined(WIN32) || defined(__MINGW32__)
+#if defined(_WIN32)
# include <winsock2.h>
# include <ws2tcpip.h>
@@ -59,4 +59,4 @@ typedef SOCKET memcached_socket_t;
typedef int memcached_socket_t;
-#endif /* WIN32 */
+#endif /* _WIN32 */
diff --git a/libmemcached-1.2/server.h b/libmemcached-1.2/server.h
index aad0c3ee..1999de0a 100644
--- a/libmemcached-1.2/server.h
+++ b/libmemcached-1.2/server.h
@@ -51,7 +51,7 @@ memcached_return_t memcached_server_cursor(const memcached_st *ptr,
uint32_t number_of_callbacks);
LIBMEMCACHED_API
- memcached_server_instance_st memcached_server_by_key(memcached_st *ptr,
+ const memcached_instance_st * memcached_server_by_key(memcached_st *ptr,
const char *key,
size_t key_length,
memcached_return_t *error);
@@ -63,7 +63,7 @@ LIBMEMCACHED_API
void memcached_server_free(memcached_server_st *ptr);
LIBMEMCACHED_API
-memcached_server_instance_st memcached_server_get_last_disconnect(const memcached_st *ptr);
+const memcached_instance_st * memcached_server_get_last_disconnect(const memcached_st *ptr);
LIBMEMCACHED_API
@@ -95,28 +95,28 @@ memcached_return_t memcached_server_add_with_weight(memcached_st *ptr, const cha
Operations on Single Servers.
*/
LIBMEMCACHED_API
-uint32_t memcached_server_response_count(const memcached_server_instance_st self);
+uint32_t memcached_server_response_count(const memcached_instance_st * self);
LIBMEMCACHED_API
-const char *memcached_server_name(const memcached_server_instance_st self);
+const char *memcached_server_name(const memcached_instance_st * self);
LIBMEMCACHED_API
-in_port_t memcached_server_port(const memcached_server_instance_st self);
+in_port_t memcached_server_port(const memcached_instance_st * self);
LIBMEMCACHED_API
-void memcached_instance_next_retry(memcached_server_instance_st self, const time_t absolute_time);
+void memcached_instance_next_retry(const memcached_instance_st * self, const time_t absolute_time);
LIBMEMCACHED_API
-const char *memcached_server_type(const memcached_server_instance_st ptr);
+const char *memcached_server_type(const memcached_instance_st * ptr);
LIBMEMCACHED_API
-uint8_t memcached_server_major_version(const memcached_server_instance_st ptr);
+uint8_t memcached_server_major_version(const memcached_instance_st * ptr);
LIBMEMCACHED_API
-uint8_t memcached_server_minor_version(const memcached_server_instance_st ptr);
+uint8_t memcached_server_minor_version(const memcached_instance_st * ptr);
LIBMEMCACHED_API
-uint8_t memcached_server_micro_version(const memcached_server_instance_st ptr);
+uint8_t memcached_server_micro_version(const memcached_instance_st * ptr);
#ifdef __cplusplus
} // extern "C"
diff --git a/libmemcached-1.2/struct/memcached.h b/libmemcached-1.2/struct/memcached.h
index 624887b7..37df2751 100644
--- a/libmemcached-1.2/struct/memcached.h
+++ b/libmemcached-1.2/struct/memcached.h
@@ -74,13 +74,8 @@ struct memcached_st {
unsigned int version;
} server_info;
uint32_t number_of_hosts;
-#ifdef __cplusplus
- org::libmemcached::Instance* servers;
- org::libmemcached::Instance* last_disconnected_server;
-#else
- void *servers;
- void *last_disconnected_server;
-#endif
+ memcached_instance_st *servers;
+ memcached_instance_st *last_disconnected_server;
int32_t snd_timeout;
int32_t rcv_timeout;
uint32_t server_failure_limit;
diff --git a/libmemcached-1.2/types.h b/libmemcached-1.2/types.h
new file mode 100644
index 00000000..2c3f87af
--- /dev/null
+++ b/libmemcached-1.2/types.h
@@ -0,0 +1,83 @@
+/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+ *
+ * Libmemcached library
+ *
+ * Copyright (C) 2011 Data Differential, http://datadifferential.com/
+ * Copyright (C) 2006-2009 Brian Aker All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * * The names of its contributors may not be used to endorse or
+ * promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+
+#pragma once
+
+#ifdef __cplusplus
+
+struct memcached_st;
+struct memcached_stat_st;
+struct memcached_analysis_st;
+struct memcached_result_st;
+struct memcached_array_st;
+struct memcached_error_t;
+
+// All of the flavors of memcache_server_st
+struct memcached_server_st;
+struct memcached_instance_st;
+typedef struct memcached_instance_st memcached_instance_st;
+typedef struct memcached_server_st *memcached_server_list_st;
+
+struct memcached_callback_st;
+
+// The following two structures are internal, and never exposed to users.
+struct memcached_string_st;
+struct memcached_string_t;
+struct memcached_continuum_item_st;
+
+#else
+
+typedef struct memcached_st memcached_st;
+typedef struct memcached_stat_st memcached_stat_st;
+typedef struct memcached_analysis_st memcached_analysis_st;
+typedef struct memcached_result_st memcached_result_st;
+typedef struct memcached_array_st memcached_array_st;
+typedef struct memcached_error_t memcached_error_t;
+
+// All of the flavors of memcache_server_st
+typedef struct memcached_server_st memcached_server_st;
+typedef struct memcached_instance_st memcached_instance_st;
+typedef struct memcached_server_st *memcached_server_list_st;
+
+typedef struct memcached_callback_st memcached_callback_st;
+
+// The following two structures are internal, and never exposed to users.
+typedef struct memcached_string_st memcached_string_st;
+typedef struct memcached_string_t memcached_string_t;
+
+#endif
diff --git a/libmemcached/auto.cc b/libmemcached/auto.cc
index b8187a05..111445fb 100644
--- a/libmemcached/auto.cc
+++ b/libmemcached/auto.cc
@@ -37,7 +37,7 @@
#include <libmemcached/common.h>
-static void auto_response(org::libmemcached::Instance* instance, const bool reply, memcached_return_t& rc, uint64_t* value)
+static void auto_response(memcached_instance_st* instance, const bool reply, memcached_return_t& rc, uint64_t* value)
{
// If the message was successfully sent, then get the response, otherwise
// fail.
@@ -63,7 +63,7 @@ static void auto_response(org::libmemcached::Instance* instance, const bool repl
}
}
-static memcached_return_t text_incr_decr(org::libmemcached::Instance* instance,
+static memcached_return_t text_incr_decr(memcached_instance_st* instance,
const bool is_incr,
const char *key, size_t key_length,
const uint64_t offset,
@@ -97,7 +97,7 @@ static memcached_return_t text_incr_decr(org::libmemcached::Instance* instance,
return memcached_vdo(instance, vector, 7, true);
}
-static memcached_return_t binary_incr_decr(org::libmemcached::Instance* instance,
+static memcached_return_t binary_incr_decr(memcached_instance_st* instance,
protocol_binary_command cmd,
const char *key, const size_t key_length,
const uint64_t offset,
@@ -180,7 +180,7 @@ static memcached_return_t increment_decrement_by_key(const protocol_binary_comma
}
uint32_t server_key= memcached_generate_hash_with_redistribution(memc, group_key, group_key_length);
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc, server_key);
+ memcached_instance_st* instance= memcached_instance_fetch(memc, server_key);
bool reply= memcached_is_replying(instance->root);
@@ -239,7 +239,7 @@ static memcached_return_t increment_decrement_with_initial_by_key(const protocol
}
uint32_t server_key= memcached_generate_hash_with_redistribution(memc, group_key, group_key_length);
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc, server_key);
+ memcached_instance_st* instance= memcached_instance_fetch(memc, server_key);
bool reply= memcached_is_replying(instance->root);
diff --git a/libmemcached/behavior.cc b/libmemcached/behavior.cc
index 7a8b9853..2675e236 100644
--- a/libmemcached/behavior.cc
+++ b/libmemcached/behavior.cc
@@ -413,7 +413,7 @@ uint64_t memcached_behavior_get(memcached_st *shell,
return (uint64_t) ptr->send_size;
}
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, 0);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, 0);
if (instance) // If we have an instance we test, otherwise we just set and pray
{
@@ -447,7 +447,7 @@ uint64_t memcached_behavior_get(memcached_st *shell,
if (ptr->recv_size != -1) // If value is -1 then we are using the default
return (uint64_t) ptr->recv_size;
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, 0);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, 0);
/**
@note REFACTOR
diff --git a/libmemcached/common.h b/libmemcached/common.h
index 0180baca..8e899b70 100644
--- a/libmemcached/common.h
+++ b/libmemcached/common.h
@@ -107,7 +107,7 @@
# include <dlfcn.h>
#endif
-#if defined(WIN32) || defined(__MINGW32__)
+#if defined(_WIN32)
# include "libmemcached/windows.hpp"
#endif
@@ -124,7 +124,7 @@ typedef struct memcached_st Memcached;
#endif
#ifdef __cplusplus
-org::libmemcached::Instance* memcached_instance_fetch(memcached_st *ptr, uint32_t server_key);
+memcached_instance_st* memcached_instance_fetch(memcached_st *ptr, uint32_t server_key);
#endif
/* These are private not to be installed headers */
@@ -199,7 +199,7 @@ extern "C" {
memcached_return_t run_distribution(memcached_st *ptr);
#ifdef __cplusplus
-static inline void memcached_server_response_increment(org::libmemcached::Instance* instance)
+static inline void memcached_server_response_increment(memcached_instance_st* instance)
{
instance->events(POLLIN);
instance->cursor_active_++;
@@ -218,6 +218,6 @@ static inline void memcached_server_response_increment(org::libmemcached::Instan
#endif
#ifdef __cplusplus
-bool memcached_purge(org::libmemcached::Instance*);
-org::libmemcached::Instance* memcached_instance_by_position(const memcached_st *ptr, uint32_t server_key);
+bool memcached_purge(memcached_instance_st*);
+memcached_instance_st* memcached_instance_by_position(const memcached_st *ptr, uint32_t server_key);
#endif
diff --git a/libmemcached/connect.cc b/libmemcached/connect.cc
index 2ec9975c..cb88c13b 100644
--- a/libmemcached/connect.cc
+++ b/libmemcached/connect.cc
@@ -64,7 +64,7 @@
# define TCP_KEEPIDLE 0
#endif
-static memcached_return_t connect_poll(org::libmemcached::Instance* server, const int connection_error)
+static memcached_return_t connect_poll(memcached_instance_st* server, const int connection_error)
{
struct pollfd fds[1];
fds[0].fd= server->fd;
@@ -87,7 +87,7 @@ static memcached_return_t connect_poll(org::libmemcached::Instance* server, cons
int local_errno= get_socket_errno(); // We cache in case closesocket() modifies errno
switch (local_errno)
{
-#ifdef TARGET_OS_LINUX
+#ifdef __linux__
case ERESTART:
#endif
case EINTR:
@@ -103,22 +103,6 @@ static memcached_return_t connect_poll(org::libmemcached::Instance* server, cons
default: // This should not happen
break;
-#if 0
- if (fds[0].revents & POLLERR)
- {
- int err;
- socklen_t len= sizeof(err);
- if (getsockopt(server->fd, SOL_SOCKET, SO_ERROR, (char*)&err, &len) == 0)
- {
- if (err == 0)
- {
- // This should never happen, if it does? Punt.
- continue;
- }
- local_errno= err;
- }
- }
-#endif
}
assert_msg(server->fd != INVALID_SOCKET, "poll() was passed an invalid file descriptor");
@@ -146,13 +130,9 @@ static memcached_return_t connect_poll(org::libmemcached::Instance* server, cons
}
}
- return memcached_set_error(*server, MEMCACHED_TIMEOUT, MEMCACHED_AT);
+ return memcached_set_error(*server, MEMCACHED_TIMEOUT, MEMCACHED_AT, memcached_literal_param("(number_of == 0)"));
}
-#if 0
- server->revents(fds[0].revents);
-#endif
-
assert (number_of == 1);
if (fds[0].revents & POLLERR or
@@ -201,7 +181,7 @@ static memcached_return_t connect_poll(org::libmemcached::Instance* server, cons
return memcached_set_errno(*server, connection_error, MEMCACHED_AT, memcached_literal_param("connect_poll() was exhausted"));
}
-static memcached_return_t set_hostinfo(org::libmemcached::Instance* server)
+static memcached_return_t set_hostinfo(memcached_instance_st* server)
{
assert(server->type != MEMCACHED_CONNECTION_UNIX_SOCKET);
server->clear_addrinfo();
@@ -265,9 +245,9 @@ static memcached_return_t set_hostinfo(org::libmemcached::Instance* server)
return MEMCACHED_SUCCESS;
}
-static inline void set_socket_nonblocking(org::libmemcached::Instance* server)
+static inline void set_socket_nonblocking(memcached_instance_st* server)
{
-#ifdef WIN32
+#if defined(_WIN32)
u_long arg= 1;
if (ioctlsocket(server->fd, FIONBIO, &arg) == SOCKET_ERROR)
{
@@ -305,7 +285,7 @@ static inline void set_socket_nonblocking(org::libmemcached::Instance* server)
#endif
}
-static bool set_socket_options(org::libmemcached::Instance* server)
+static bool set_socket_options(memcached_instance_st* server)
{
assert_msg(server->fd != INVALID_SOCKET, "invalid socket was passed to set_socket_options()");
@@ -372,7 +352,7 @@ static bool set_socket_options(org::libmemcached::Instance* server)
#if defined(_WIN32)
#else
-#if defined(SO_NOSIGPIPE)
+# if defined(SO_NOSIGPIPE)
if (SO_NOSIGPIPE)
{
int set= 1;
@@ -388,7 +368,7 @@ static bool set_socket_options(org::libmemcached::Instance* server)
#endif
}
}
-#endif // SO_NOSIGPIPE
+# endif // SO_NOSIGPIPE
#endif // _WIN32
if (server->root->flags.no_block)
@@ -459,9 +439,9 @@ static bool set_socket_options(org::libmemcached::Instance* server)
return true;
}
-static memcached_return_t unix_socket_connect(org::libmemcached::Instance* server)
+static memcached_return_t unix_socket_connect(memcached_instance_st* server)
{
-#ifndef WIN32
+#ifndef _WIN32
WATCHPOINT_ASSERT(server->fd == INVALID_SOCKET);
do {
@@ -525,7 +505,7 @@ static memcached_return_t unix_socket_connect(org::libmemcached::Instance* serve
#endif
}
-static memcached_return_t network_connect(org::libmemcached::Instance* server)
+static memcached_return_t network_connect(memcached_instance_st* server)
{
bool timeout_error_occured= false;
@@ -663,7 +643,8 @@ static memcached_return_t network_connect(org::libmemcached::Instance* server)
if (timeout_error_occured and server->state < MEMCACHED_SERVER_STATE_IN_PROGRESS)
{
- return memcached_set_error(*server, MEMCACHED_TIMEOUT, MEMCACHED_AT);
+ return memcached_set_error(*server, MEMCACHED_TIMEOUT, MEMCACHED_AT,
+ memcached_literal_param("if (timeout_error_occured and server->state < MEMCACHED_SERVER_STATE_IN_PROGRESS)"));
}
return memcached_set_error(*server, MEMCACHED_CONNECTION_FAILURE, MEMCACHED_AT); /* The last error should be from connect() */
@@ -676,7 +657,7 @@ static memcached_return_t network_connect(org::libmemcached::Instance* server)
Based on time/failure count fail the connect without trying. This prevents waiting in a state where
we get caught spending cycles just waiting.
*/
-static memcached_return_t backoff_handling(org::libmemcached::Instance* server, bool& in_timeout)
+static memcached_return_t backoff_handling(memcached_instance_st* server, bool& in_timeout)
{
struct timeval curr_time;
bool _gettime_success= (gettimeofday(&curr_time, NULL) == 0);
@@ -743,7 +724,7 @@ static memcached_return_t backoff_handling(org::libmemcached::Instance* server,
return MEMCACHED_SUCCESS;
}
-static memcached_return_t _memcached_connect(org::libmemcached::Instance* server, const bool set_last_disconnected)
+static memcached_return_t _memcached_connect(memcached_instance_st* server, const bool set_last_disconnected)
{
assert(server);
if (server->fd != INVALID_SOCKET)
@@ -830,7 +811,7 @@ static memcached_return_t _memcached_connect(org::libmemcached::Instance* server
return rc;
}
-memcached_return_t memcached_connect(org::libmemcached::Instance* server)
+memcached_return_t memcached_connect(memcached_instance_st* server)
{
return _memcached_connect(server, true);
}
diff --git a/libmemcached/connect.hpp b/libmemcached/connect.hpp
index de1c8df5..d1dafe5e 100644
--- a/libmemcached/connect.hpp
+++ b/libmemcached/connect.hpp
@@ -37,4 +37,4 @@
#pragma once
-memcached_return_t memcached_connect(org::libmemcached::Instance*);
+memcached_return_t memcached_connect(memcached_instance_st*);
diff --git a/libmemcached/csl/parser.yy b/libmemcached/csl/parser.yy
index 6d4ccd55..dd9c720b 100644
--- a/libmemcached/csl/parser.yy
+++ b/libmemcached/csl/parser.yy
@@ -53,7 +53,7 @@ class Context;
%parse-param { class Context *context }
%parse-param { yyscan_t *scanner }
%pure-parser
-%require "2.4"
+%require "2.5"
%start begin
%verbose
@@ -66,13 +66,14 @@ class Context;
#include <libmemcached/csl/scanner.h>
#ifndef __INTEL_COMPILER
-#pragma GCC diagnostic ignored "-Wold-style-cast"
+# pragma GCC diagnostic ignored "-Wold-style-cast"
#endif
#ifndef __INTEL_COMPILER
-#ifndef __clang__
-#pragma GCC diagnostic ignored "-Wlogical-op"
-#endif
+# ifndef __clang__
+# pragma GCC diagnostic ignored "-Wlogical-op"
+# pragma GCC diagnostic ignored "-Wunsafe-loop-optimizations"
+# endif
#endif
int conf_lex(YYSTYPE* lvalp, void* scanner);
diff --git a/libmemcached/delete.cc b/libmemcached/delete.cc
index 67957f45..55a8b4ca 100644
--- a/libmemcached/delete.cc
+++ b/libmemcached/delete.cc
@@ -44,7 +44,7 @@ memcached_return_t memcached_delete(memcached_st *shell, const char *key, size_t
return memcached_delete_by_key(shell, key, key_length, key, key_length, expiration);
}
-static inline memcached_return_t ascii_delete(org::libmemcached::Instance* instance,
+static inline memcached_return_t ascii_delete(memcached_instance_st* instance,
uint32_t ,
const char *key,
const size_t key_length,
@@ -65,7 +65,7 @@ static inline memcached_return_t ascii_delete(org::libmemcached::Instance* insta
return memcached_vdo(instance, vector, 6, is_buffering ? false : true);
}
-static inline memcached_return_t binary_delete(org::libmemcached::Instance* instance,
+static inline memcached_return_t binary_delete(memcached_instance_st* instance,
uint32_t server_key,
const char *key,
const size_t key_length,
@@ -118,7 +118,7 @@ static inline memcached_return_t binary_delete(org::libmemcached::Instance* inst
server_key= 0;
}
- org::libmemcached::Instance* replica= memcached_instance_fetch(instance->root, server_key);
+ memcached_instance_st* replica= memcached_instance_fetch(instance->root, server_key);
if (memcached_fatal(memcached_vdo(replica, vector, 4, should_flush)))
{
@@ -161,7 +161,7 @@ memcached_return_t memcached_delete_by_key(memcached_st *shell,
}
uint32_t server_key= memcached_generate_hash_with_redistribution(memc, group_key, group_key_length);
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc, server_key);
+ memcached_instance_st* instance= memcached_instance_fetch(memc, server_key);
bool is_buffering= memcached_is_buffering(instance->root);
bool is_replying= memcached_is_replying(instance->root);
diff --git a/libmemcached/do.cc b/libmemcached/do.cc
index c9d8e7e5..9ba513f2 100644
--- a/libmemcached/do.cc
+++ b/libmemcached/do.cc
@@ -11,7 +11,7 @@
#include <libmemcached/common.h>
-static memcached_return_t _vdo_udp(org::libmemcached::Instance* instance,
+static memcached_return_t _vdo_udp(memcached_instance_st* instance,
libmemcached_io_vector_st vector[],
const size_t count)
{
@@ -30,7 +30,7 @@ static memcached_return_t _vdo_udp(org::libmemcached::Instance* instance,
vector[0].length= UDP_DATAGRAM_HEADER_LENGTH;
msg.msg_iov= (struct iovec*)vector;
-#if defined(TARGET_OS_OSX) && TARGET_OS_OSX
+#ifdef __APPLE__
msg.msg_iovlen= int(count);
#else
msg.msg_iovlen= count;
@@ -64,7 +64,7 @@ static memcached_return_t _vdo_udp(org::libmemcached::Instance* instance,
#endif
}
-memcached_return_t memcached_vdo(org::libmemcached::Instance* instance,
+memcached_return_t memcached_vdo(memcached_instance_st* instance,
libmemcached_io_vector_st vector[],
const size_t count,
const bool with_flush)
diff --git a/libmemcached/do.hpp b/libmemcached/do.hpp
index 109c0ac1..d2dc6671 100644
--- a/libmemcached/do.hpp
+++ b/libmemcached/do.hpp
@@ -2,7 +2,7 @@
*
* Libmemcached library
*
- * Copyright (C) 2011 Data Differential, http://datadifferential.com/
+ * Copyright (C) 2011-2013 Data Differential, http://datadifferential.com/
* Copyright (C) 2006-2009 Brian Aker All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -37,7 +37,7 @@
#pragma once
-memcached_return_t memcached_vdo(org::libmemcached::Instance* ptr,
+memcached_return_t memcached_vdo(memcached_instance_st*,
libmemcached_io_vector_st vector[],
const size_t count,
const bool with_flush);
diff --git a/libmemcached/dump.cc b/libmemcached/dump.cc
index 35da13f5..8ddb2eef 100644
--- a/libmemcached/dump.cc
+++ b/libmemcached/dump.cc
@@ -68,7 +68,7 @@ static memcached_return_t ascii_dump(Memcached *memc, memcached_dump_fn *callbac
// Send message to all servers
for (uint32_t server_key= 0; server_key < memcached_server_count(memc); server_key++)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc, server_key);
+ memcached_instance_st* instance= memcached_instance_fetch(memc, server_key);
memcached_return_t vdo_rc;
if (memcached_success((vdo_rc= memcached_vdo(instance, vector, 3, true))))
@@ -82,7 +82,7 @@ static memcached_return_t ascii_dump(Memcached *memc, memcached_dump_fn *callbac
}
// Collect the returned items
- org::libmemcached::Instance* instance;
+ memcached_instance_st* instance;
memcached_return_t read_ret= MEMCACHED_SUCCESS;
while ((instance= memcached_io_get_readable_server(memc, read_ret)))
{
diff --git a/libmemcached/error.cc b/libmemcached/error.cc
index 64aefa03..266f78b5 100644
--- a/libmemcached/error.cc
+++ b/libmemcached/error.cc
@@ -52,7 +52,7 @@ struct memcached_error_t
char message[MAX_ERROR_LENGTH];
};
-static void _set(org::libmemcached::Instance& server, Memcached& memc)
+static void _set(memcached_instance_st& server, Memcached& memc)
{
if (server.error_messages and server.error_messages->query_id != server.root->query_id)
{
@@ -215,7 +215,7 @@ memcached_return_t memcached_set_error(Memcached& memc, memcached_return_t rc, c
return memcached_set_error(memc, rc, at, tmp);
}
-memcached_return_t memcached_set_error(org::libmemcached::Instance& self, memcached_return_t rc, const char *at, const char *str, size_t length)
+memcached_return_t memcached_set_error(memcached_instance_st& self, memcached_return_t rc, const char *at, const char *str, size_t length)
{
assert_msg(rc != MEMCACHED_ERRNO, "Programmer error, MEMCACHED_ERRNO was set to be returned to client");
assert_msg(rc != MEMCACHED_SOME_ERRORS, "Programmer error, MEMCACHED_SOME_ERRORS was about to be set on a Instance");
@@ -255,7 +255,7 @@ memcached_return_t memcached_set_parser_error(Memcached& memc,
return memcached_set_error(memc, MEMCACHED_PARSE_ERROR, at, buffer, length);
}
-static inline size_t append_host_to_string(org::libmemcached::Instance& self, char* buffer, const size_t buffer_length)
+static inline size_t append_host_to_string(memcached_instance_st& self, char* buffer, const size_t buffer_length)
{
size_t size= 0;
switch (self.type)
@@ -275,10 +275,10 @@ static inline size_t append_host_to_string(org::libmemcached::Instance& self, ch
return size;
}
-memcached_return_t memcached_set_error(org::libmemcached::Instance& self, memcached_return_t rc, const char *at, memcached_string_t& str)
+memcached_return_t memcached_set_error(memcached_instance_st& self, memcached_return_t rc, const char *at, memcached_string_t& str)
{
assert_msg(rc != MEMCACHED_ERRNO, "Programmer error, MEMCACHED_ERRNO was set to be returned to client");
- assert_msg(rc != MEMCACHED_SOME_ERRORS, "Programmer error, MEMCACHED_SOME_ERRORS was about to be set on a org::libmemcached::Instance");
+ assert_msg(rc != MEMCACHED_SOME_ERRORS, "Programmer error, MEMCACHED_SOME_ERRORS was about to be set on a memcached_instance_st");
if (memcached_fatal(rc) == false and rc != MEMCACHED_CLIENT_ERROR)
{
return rc;
@@ -313,9 +313,9 @@ memcached_return_t memcached_set_error(org::libmemcached::Instance& self, memcac
return rc;
}
-memcached_return_t memcached_set_error(org::libmemcached::Instance& self, memcached_return_t rc, const char *at)
+memcached_return_t memcached_set_error(memcached_instance_st& self, memcached_return_t rc, const char *at)
{
- assert_msg(rc != MEMCACHED_SOME_ERRORS, "Programmer error, MEMCACHED_SOME_ERRORS was about to be set on a org::libmemcached::Instance");
+ assert_msg(rc != MEMCACHED_SOME_ERRORS, "Programmer error, MEMCACHED_SOME_ERRORS was about to be set on a memcached_instance_st");
if (memcached_fatal(rc) == false)
{
return rc;
@@ -356,7 +356,7 @@ memcached_return_t memcached_set_errno(Memcached& self, int local_errno, const c
return memcached_set_errno(self, local_errno, at, tmp);
}
-memcached_return_t memcached_set_errno(org::libmemcached::Instance& self, int local_errno, const char *at, const char *str, size_t length)
+memcached_return_t memcached_set_errno(memcached_instance_st& self, int local_errno, const char *at, const char *str, size_t length)
{
memcached_string_t tmp= { str, length };
return memcached_set_errno(self, local_errno, at, tmp);
@@ -388,7 +388,7 @@ memcached_return_t memcached_set_errno(Memcached& memc, int local_errno, const c
return rc;
}
-memcached_return_t memcached_set_errno(org::libmemcached::Instance& self, int local_errno, const char *at, memcached_string_t& str)
+memcached_return_t memcached_set_errno(memcached_instance_st& self, int local_errno, const char *at, memcached_string_t& str)
{
if (local_errno == 0)
{
@@ -427,7 +427,7 @@ memcached_return_t memcached_set_errno(org::libmemcached::Instance& self, int lo
return rc;
}
-memcached_return_t memcached_set_errno(org::libmemcached::Instance& self, int local_errno, const char *at)
+memcached_return_t memcached_set_errno(memcached_instance_st& self, int local_errno, const char *at)
{
if (local_errno == 0)
{
@@ -482,7 +482,7 @@ void memcached_error_print(const Memcached *shell)
for (uint32_t x= 0; x < memcached_server_count(self); x++)
{
- org::libmemcached::Instance* instance= memcached_instance_by_position(self, x);
+ memcached_instance_st* instance= memcached_instance_by_position(self, x);
_error_print(instance->error_messages);
}
@@ -504,7 +504,7 @@ void memcached_error_free(Memcached& self)
self.error_messages= NULL;
}
-void memcached_error_free(org::libmemcached::Instance& self)
+void memcached_error_free(memcached_instance_st& self)
{
_error_free(self.error_messages);
self.error_messages= NULL;
@@ -554,7 +554,7 @@ bool memcached_has_current_error(Memcached &memc)
return false;
}
-bool memcached_has_current_error(org::libmemcached::Instance& server)
+bool memcached_has_current_error(memcached_instance_st& server)
{
return memcached_has_current_error(*(server.root));
}
@@ -591,7 +591,7 @@ int memcached_last_error_errno(const memcached_st *shell)
return memc->error_messages->local_errno;
}
-const char *memcached_server_error(const memcached_server_instance_st server)
+const char *memcached_server_error(const memcached_instance_st * server)
{
if (server == NULL)
{
@@ -612,7 +612,7 @@ const char *memcached_server_error(const memcached_server_instance_st server)
}
-memcached_error_t *memcached_error_copy(const org::libmemcached::Instance& server)
+memcached_error_t *memcached_error_copy(const memcached_instance_st& server)
{
if (server.error_messages == NULL)
{
@@ -626,7 +626,7 @@ memcached_error_t *memcached_error_copy(const org::libmemcached::Instance& serve
return error;
}
-memcached_return_t memcached_server_error_return(memcached_server_instance_st ptr)
+memcached_return_t memcached_server_error_return(const memcached_instance_st * ptr)
{
if (ptr == NULL)
{
@@ -641,7 +641,7 @@ memcached_return_t memcached_server_error_return(memcached_server_instance_st pt
return MEMCACHED_SUCCESS;
}
-memcached_return_t memcached_instance_error_return(org::libmemcached::Instance* instance)
+memcached_return_t memcached_instance_error_return(memcached_instance_st* instance)
{
if (instance == NULL)
{
diff --git a/libmemcached/error.hpp b/libmemcached/error.hpp
index 733f7686..847dbc24 100644
--- a/libmemcached/error.hpp
+++ b/libmemcached/error.hpp
@@ -51,40 +51,40 @@ memcached_return_t memcached_set_parser_error(Memcached& memc,
memcached_return_t memcached_set_error(Memcached&, memcached_return_t rc, const char *at);
-memcached_return_t memcached_set_error(org::libmemcached::Instance&, memcached_return_t rc, const char *at);
+memcached_return_t memcached_set_error(memcached_instance_st&, memcached_return_t rc, const char *at);
memcached_return_t memcached_set_error(Memcached&, memcached_return_t rc, const char *at, const char *str, size_t length);
-memcached_return_t memcached_set_error(org::libmemcached::Instance&, memcached_return_t rc, const char *at, const char *str, size_t length);
+memcached_return_t memcached_set_error(memcached_instance_st&, memcached_return_t rc, const char *at, const char *str, size_t length);
memcached_return_t memcached_set_error(Memcached& memc, memcached_return_t rc, const char *at, memcached_string_t& str);
-memcached_return_t memcached_set_error(org::libmemcached::Instance&, memcached_return_t rc, const char *at, memcached_string_t& str);
+memcached_return_t memcached_set_error(memcached_instance_st&, memcached_return_t rc, const char *at, memcached_string_t& str);
memcached_return_t memcached_set_errno(Memcached& memc, int local_errno, const char *at, memcached_string_t& str);
-memcached_return_t memcached_set_errno(org::libmemcached::Instance&, int local_errno, const char *at, memcached_string_t& str);
+memcached_return_t memcached_set_errno(memcached_instance_st&, int local_errno, const char *at, memcached_string_t& str);
memcached_return_t memcached_set_errno(Memcached& memc, int local_errno, const char *at, const char *str, size_t length);
-memcached_return_t memcached_set_errno(org::libmemcached::Instance&, int local_errno, const char *at, const char *str, size_t length);
+memcached_return_t memcached_set_errno(memcached_instance_st&, int local_errno, const char *at, const char *str, size_t length);
memcached_return_t memcached_set_errno(Memcached& memc, int local_errno, const char *at);
-memcached_return_t memcached_set_errno(org::libmemcached::Instance&, int local_errno, const char *at);
+memcached_return_t memcached_set_errno(memcached_instance_st&, int local_errno, const char *at);
bool memcached_has_current_error(Memcached&);
-bool memcached_has_current_error(org::libmemcached::Instance&);
+bool memcached_has_current_error(memcached_instance_st&);
void memcached_error_free(Memcached&);
void memcached_error_free(memcached_server_st&);
-void memcached_error_free(org::libmemcached::Instance& self);
+void memcached_error_free(memcached_instance_st& self);
-memcached_error_t *memcached_error_copy(const org::libmemcached::Instance&);
+memcached_error_t *memcached_error_copy(const memcached_instance_st&);
-memcached_return_t memcached_instance_error_return(org::libmemcached::Instance*);
+memcached_return_t memcached_instance_error_return(memcached_instance_st*);
#endif
diff --git a/libmemcached/exist.cc b/libmemcached/exist.cc
index 8ed60545..3afb42d4 100644
--- a/libmemcached/exist.cc
+++ b/libmemcached/exist.cc
@@ -36,7 +36,7 @@
#include <libmemcached/common.h>
-static memcached_return_t ascii_exist(Memcached *memc, org::libmemcached::Instance* instance, const char *key, size_t key_length)
+static memcached_return_t ascii_exist(Memcached *memc, memcached_instance_st* instance, const char *key, size_t key_length)
{
libmemcached_io_vector_st vector[]=
{
@@ -74,7 +74,7 @@ static memcached_return_t ascii_exist(Memcached *memc, org::libmemcached::Instan
return rc;
}
-static memcached_return_t binary_exist(Memcached *memc, org::libmemcached::Instance* instance, const char *key, size_t key_length)
+static memcached_return_t binary_exist(Memcached *memc, memcached_instance_st* instance, const char *key, size_t key_length)
{
protocol_binary_request_set request= {};
size_t send_length= sizeof(request.bytes);
@@ -144,7 +144,7 @@ memcached_return_t memcached_exist_by_key(memcached_st *shell,
}
uint32_t server_key= memcached_generate_hash_with_redistribution(memc, group_key, group_key_length);
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc, server_key);
+ memcached_instance_st* instance= memcached_instance_fetch(memc, server_key);
if (memcached_is_binary(memc))
{
diff --git a/libmemcached/fetch.cc b/libmemcached/fetch.cc
index 2843e973..f6fefe66 100644
--- a/libmemcached/fetch.cc
+++ b/libmemcached/fetch.cc
@@ -192,7 +192,7 @@ memcached_result_st *memcached_fetch_result(memcached_st *memc,
}
*error= MEMCACHED_MAXIMUM_RETURN; // We use this to see if we ever go into the loop
- org::libmemcached::Instance *server;
+ memcached_instance_st *server;
memcached_return_t read_ret= MEMCACHED_SUCCESS;
while ((server= memcached_io_get_readable_server(memc, read_ret)))
{
diff --git a/libmemcached/flush.cc b/libmemcached/flush.cc
index 521515ac..cbb66bfe 100644
--- a/libmemcached/flush.cc
+++ b/libmemcached/flush.cc
@@ -52,7 +52,7 @@ static memcached_return_t memcached_flush_binary(Memcached *ptr,
for (uint32_t x= 0; x < memcached_server_count(ptr); x++)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, x);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, x);
initialize_binary_request(instance, request.message.header);
if (reply)
@@ -84,7 +84,7 @@ static memcached_return_t memcached_flush_binary(Memcached *ptr,
for (uint32_t x= 0; x < memcached_server_count(ptr); x++)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, x);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, x);
if (instance->response_count() > 0)
{
@@ -115,7 +115,7 @@ static memcached_return_t memcached_flush_textual(Memcached *ptr,
memcached_return_t rc= MEMCACHED_SUCCESS;
for (uint32_t x= 0; x < memcached_server_count(ptr); x++)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, x);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, x);
libmemcached_io_vector_st vector[]=
{
diff --git a/libmemcached/flush_buffers.cc b/libmemcached/flush_buffers.cc
index 3fa935c8..24f7c0df 100644
--- a/libmemcached/flush_buffers.cc
+++ b/libmemcached/flush_buffers.cc
@@ -46,7 +46,7 @@ memcached_return_t memcached_flush_buffers(memcached_st *shell)
for (uint32_t x= 0; x < memcached_server_count(memc); ++x)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc, x);
+ memcached_instance_st* instance= memcached_instance_fetch(memc, x);
if (instance->write_buffer_offset != 0)
{
diff --git a/libmemcached/get.cc b/libmemcached/get.cc
index 79e1d832..65a1dcad 100644
--- a/libmemcached/get.cc
+++ b/libmemcached/get.cc
@@ -2,7 +2,7 @@
*
* Libmemcached library
*
- * Copyright (C) 2011-2012 Data Differential, http://datadifferential.com/
+ * Copyright (C) 2011-2013 Data Differential, http://datadifferential.com/
* Copyright (C) 2006-2009 Brian Aker All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -50,13 +50,13 @@ char *memcached_get(memcached_st *ptr, const char *key,
flags, error);
}
-static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr,
- const char *group_key,
- size_t group_key_length,
- const char * const *keys,
- const size_t *key_length,
- size_t number_of_keys,
- bool mget_mode);
+static memcached_return_t __mget_by_key_real(memcached_st *ptr,
+ const char *group_key,
+ size_t group_key_length,
+ const char * const *keys,
+ const size_t *key_length,
+ size_t number_of_keys,
+ const bool mget_mode);
char *memcached_get_by_key(memcached_st *shell,
const char *group_key,
size_t group_key_length,
@@ -79,9 +79,9 @@ char *memcached_get_by_key(memcached_st *shell,
}
/* Request the key */
- *error= memcached_mget_by_key_real(ptr, group_key, group_key_length,
- (const char * const *)&key, &key_length,
- 1, false);
+ *error= __mget_by_key_real(ptr, group_key, group_key_length,
+ (const char * const *)&key, &key_length,
+ 1, false);
if (ptr)
{
assert_msg(ptr->query_id == query_id +1, "Programmer error, the query_id was not incremented.");
@@ -186,20 +186,20 @@ memcached_return_t memcached_mget(memcached_st *ptr,
}
static memcached_return_t binary_mget_by_key(memcached_st *ptr,
- uint32_t master_server_key,
- bool is_group_key_set,
+ const uint32_t master_server_key,
+ const bool is_group_key_set,
+ const char * const *keys,
+ const size_t *key_length,
+ const size_t number_of_keys,
+ const bool mget_mode);
+
+static memcached_return_t __mget_by_key_real(memcached_st *ptr,
+ const char *group_key,
+ const size_t group_key_length,
const char * const *keys,
const size_t *key_length,
size_t number_of_keys,
- bool mget_mode);
-
-static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr,
- const char *group_key,
- size_t group_key_length,
- const char * const *keys,
- const size_t *key_length,
- size_t number_of_keys,
- bool mget_mode)
+ const bool mget_mode)
{
bool failures_occured_in_sending= false;
const char *get_command= "get";
@@ -244,7 +244,7 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr,
*/
for (uint32_t x= 0; x < memcached_server_count(ptr); x++)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, x);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, x);
if (instance->response_count())
{
@@ -293,7 +293,7 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr,
server_key= memcached_generate_hash_with_redistribution(ptr, keys[x], key_length[x]);
}
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, server_key);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, server_key);
libmemcached_io_vector_st vector[]=
{
@@ -354,7 +354,7 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr,
bool success_happened= false;
for (uint32_t x= 0; x < memcached_server_count(ptr); x++)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, x);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, x);
if (instance->response_count())
{
@@ -393,8 +393,7 @@ memcached_return_t memcached_mget_by_key(memcached_st *shell,
size_t number_of_keys)
{
Memcached* ptr= memcached2Memcached(shell);
- return memcached_mget_by_key_real(ptr, group_key, group_key_length, keys,
- key_length, number_of_keys, true);
+ return __mget_by_key_real(ptr, group_key, group_key_length, keys, key_length, number_of_keys, true);
}
memcached_return_t memcached_mget_execute(memcached_st *ptr,
@@ -449,15 +448,16 @@ memcached_return_t memcached_mget_execute_by_key(memcached_st *shell,
rc= memcached_mget_by_key(ptr, group_key, group_key_length, keys,
key_length, number_of_keys);
ptr->callbacks= original_callbacks;
+
return rc;
}
static memcached_return_t simple_binary_mget(memcached_st *ptr,
- uint32_t master_server_key,
+ const uint32_t master_server_key,
bool is_group_key_set,
const char * const *keys,
const size_t *key_length,
- size_t number_of_keys, bool mget_mode)
+ const size_t number_of_keys, const bool mget_mode)
{
memcached_return_t rc= MEMCACHED_NOTFOUND;
@@ -480,7 +480,7 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr,
server_key= memcached_generate_hash_with_redistribution(ptr, keys[x], key_length[x]);
}
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, server_key);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, server_key);
if (instance->response_count() == 0)
{
@@ -502,17 +502,17 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr,
request.message.header.request.opcode= PROTOCOL_BINARY_CMD_GETK;
}
- memcached_return_t vk;
- vk= memcached_validate_key_length(key_length[x],
- ptr->flags.binary_protocol);
- if (vk != MEMCACHED_SUCCESS)
{
- if (x > 0)
+ memcached_return_t vk= memcached_validate_key_length(key_length[x], ptr->flags.binary_protocol);
+ if (vk != MEMCACHED_SUCCESS)
{
- memcached_io_reset(instance);
- }
+ if (x > 0)
+ {
+ memcached_io_reset(instance);
+ }
- return vk;
+ return vk;
+ }
}
request.message.header.request.keylen= htons((uint16_t)(key_length[x] + memcached_array_size(ptr->_namespace)));
@@ -553,20 +553,13 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr,
for (uint32_t x= 0; x < memcached_server_count(ptr); ++x)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, x);
- initialize_binary_request(instance, request.message.header);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, x);
if (instance->response_count())
{
- if (memcached_io_write(instance) == false)
- {
- memcached_instance_response_reset(instance);
- memcached_io_reset(instance);
- rc= MEMCACHED_SOME_ERRORS;
- }
-
- if (memcached_io_write(instance, request.bytes,
- sizeof(request.bytes), true) == -1)
+ initialize_binary_request(instance, request.message.header);
+ if ((memcached_io_write(instance) == false) or
+ (memcached_io_write(instance, request.bytes, sizeof(request.bytes), true) == -1))
{
memcached_instance_response_reset(instance);
memcached_io_reset(instance);
@@ -576,7 +569,6 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr,
}
}
-
return rc;
}
@@ -585,7 +577,7 @@ static memcached_return_t replication_binary_mget(memcached_st *ptr,
bool* dead_servers,
const char *const *keys,
const size_t *key_length,
- size_t number_of_keys)
+ const size_t number_of_keys)
{
memcached_return_t rc= MEMCACHED_NOTFOUND;
uint32_t start= 0;
@@ -604,9 +596,11 @@ static memcached_return_t replication_binary_mget(memcached_st *ptr,
for (uint32_t x= 0; x < number_of_keys; ++x)
{
if (hash[x] == memcached_server_count(ptr))
+ {
continue; /* Already successfully sent */
+ }
- uint32_t server= hash[x] + replica;
+ uint32_t server= hash[x] +replica;
/* In case of randomized reads */
if (randomize_read and ((server + start) <= (hash[x] + ptr->number_of_replicas)))
@@ -624,7 +618,7 @@ static memcached_return_t replication_binary_mget(memcached_st *ptr,
continue;
}
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, server);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, server);
if (instance->response_count() == 0)
{
@@ -685,12 +679,12 @@ static memcached_return_t replication_binary_mget(memcached_st *ptr,
}
static memcached_return_t binary_mget_by_key(memcached_st *ptr,
- uint32_t master_server_key,
+ const uint32_t master_server_key,
bool is_group_key_set,
const char * const *keys,
const size_t *key_length,
- size_t number_of_keys,
- bool mget_mode)
+ const size_t number_of_keys,
+ const bool mget_mode)
{
if (ptr->number_of_replicas == 0)
{
diff --git a/libmemcached/hosts.cc b/libmemcached/hosts.cc
index 747245f9..121e8f7c 100644
--- a/libmemcached/hosts.cc
+++ b/libmemcached/hosts.cc
@@ -46,8 +46,8 @@ static memcached_return_t update_continuum(Memcached *ptr);
static int compare_servers(const void *p1, const void *p2)
{
- memcached_server_instance_st a= (memcached_server_instance_st)p1;
- memcached_server_instance_st b= (memcached_server_instance_st)p2;
+ const memcached_instance_st * a= (const memcached_instance_st *)p1;
+ const memcached_instance_st * b= (const memcached_instance_st *)p2;
int return_value= strcmp(a->_hostname, b->_hostname);
@@ -63,7 +63,7 @@ static void sort_hosts(Memcached *ptr)
{
if (memcached_server_count(ptr))
{
- qsort(memcached_instance_list(ptr), memcached_server_count(ptr), sizeof(org::libmemcached::Instance), compare_servers);
+ qsort(memcached_instance_list(ptr), memcached_server_count(ptr), sizeof(memcached_instance_st), compare_servers);
}
}
@@ -146,7 +146,7 @@ static memcached_return_t update_continuum(Memcached *ptr)
return memcached_set_errno(*ptr, errno, MEMCACHED_AT);
}
- org::libmemcached::Instance* list= memcached_instance_list(ptr);
+ memcached_instance_st* list= memcached_instance_list(ptr);
/* count live servers (those without a retry delay set) */
bool is_auto_ejecting= _is_auto_eject_host(ptr);
@@ -365,7 +365,7 @@ static memcached_return_t server_add(Memcached *memc,
}
uint32_t host_list_size= memc->number_of_hosts +1;
- org::libmemcached::Instance* new_host_list= libmemcached_xrealloc(memc, memcached_instance_list(memc), host_list_size, org::libmemcached::Instance);
+ memcached_instance_st* new_host_list= libmemcached_xrealloc(memc, memcached_instance_list(memc), host_list_size, memcached_instance_st);
if (new_host_list == NULL)
{
@@ -376,7 +376,7 @@ static memcached_return_t server_add(Memcached *memc,
assert(memc->number_of_hosts == host_list_size);
/* TODO: Check return type */
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc, memcached_server_count(memc) -1);
+ memcached_instance_st* instance= memcached_instance_fetch(memc, memcached_server_count(memc) -1);
if (__instance_create_with(memc, instance, hostname, port, weight, type) == NULL)
{
@@ -409,7 +409,7 @@ memcached_return_t memcached_server_push(memcached_st *shell, const memcached_se
uint32_t count= memcached_server_list_count(list);
uint32_t host_list_size= count +original_host_size;
- org::libmemcached::Instance* new_host_list= libmemcached_xrealloc(ptr, memcached_instance_list(ptr), host_list_size, org::libmemcached::Instance);
+ memcached_instance_st* new_host_list= libmemcached_xrealloc(ptr, memcached_instance_list(ptr), host_list_size, memcached_instance_st);
if (new_host_list == NULL)
{
@@ -424,7 +424,7 @@ memcached_return_t memcached_server_push(memcached_st *shell, const memcached_se
WATCHPOINT_ASSERT(list[x].hostname[0] != 0);
// We have extended the array, and now we will find it, and use it.
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, original_host_size);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, original_host_size);
WATCHPOINT_ASSERT(instance);
memcached_string_t hostname= { memcached_string_make_from_cstr(list[x].hostname) };
@@ -449,7 +449,7 @@ memcached_return_t memcached_server_push(memcached_st *shell, const memcached_se
return MEMCACHED_INVALID_ARGUMENTS;
}
-memcached_return_t memcached_instance_push(memcached_st *ptr, const struct org::libmemcached::Instance* list, uint32_t number_of_hosts)
+memcached_return_t memcached_instance_push(memcached_st *ptr, const struct memcached_instance_st* list, uint32_t number_of_hosts)
{
if (list == NULL)
{
@@ -458,7 +458,7 @@ memcached_return_t memcached_instance_push(memcached_st *ptr, const struct org::
uint32_t original_host_size= memcached_server_count(ptr);
uint32_t host_list_size= number_of_hosts +original_host_size;
- org::libmemcached::Instance* new_host_list= libmemcached_xrealloc(ptr, memcached_instance_list(ptr), host_list_size, org::libmemcached::Instance);
+ memcached_instance_st* new_host_list= libmemcached_xrealloc(ptr, memcached_instance_list(ptr), host_list_size, memcached_instance_st);
if (new_host_list == NULL)
{
@@ -477,7 +477,7 @@ memcached_return_t memcached_instance_push(memcached_st *ptr, const struct org::
WATCHPOINT_ASSERT(list[x]._hostname[0] != 0);
// We have extended the array, and now we will find it, and use it.
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, original_host_size);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, original_host_size);
WATCHPOINT_ASSERT(instance);
memcached_string_t hostname= { memcached_string_make_from_cstr(list[x]._hostname) };
diff --git a/libmemcached/include.am b/libmemcached/include.am
index a09a0066..c6e1c6d6 100644
--- a/libmemcached/include.am
+++ b/libmemcached/include.am
@@ -46,6 +46,7 @@ noinst_HEADERS+= libmemcached/udp.hpp
noinst_HEADERS+= libmemcached/version.hpp
noinst_HEADERS+= libmemcached/virtual_bucket.h
noinst_HEADERS+= libmemcached/watchpoint.h
+noinst_HEADERS+= libmemcached/windows.hpp
lib_LTLIBRARIES+= libmemcached/libmemcached.la
EXTRA_libmemcached_libmemcached_la_DEPENDENCIES=
@@ -57,8 +58,8 @@ libmemcached_libmemcached_la_CXXFLAGS= -DBUILDING_LIBMEMCACHED
if BUILD_WIN32
libmemcached_libmemcached_la_CFLAGS+= -DBUILDING_HASHKIT
libmemcached_libmemcached_la_CXXFLAGS+= -DBUILDING_HASHKIT
-libmemcached_libmemcached_la_LIBADD+= -lmingw64
-libmemcached_libmemcached_la_LIBADD+= -lws2_64
+libmemcached_libmemcached_la_LIBADD+= -lmingw32
+libmemcached_libmemcached_la_LIBADD+= -lws2_32
endif
libmemcached_libmemcached_la_SOURCES+= libmemcached/instance.cc
diff --git a/libmemcached/instance.cc b/libmemcached/instance.cc
index ca3a30d8..82621f7a 100644
--- a/libmemcached/instance.cc
+++ b/libmemcached/instance.cc
@@ -37,7 +37,7 @@
#include <libmemcached/common.h>
-static inline void _server_init(org::libmemcached::Instance* self, Memcached *root,
+static inline void _server_init(memcached_instance_st* self, Memcached *root,
const memcached_string_t& hostname,
in_port_t port,
uint32_t weight, memcached_connection_t type)
@@ -87,11 +87,11 @@ static inline void _server_init(org::libmemcached::Instance* self, Memcached *ro
self->hostname(hostname);
}
-static org::libmemcached::Instance* _server_create(org::libmemcached::Instance* self, const memcached_st *memc)
+static memcached_instance_st* _server_create(memcached_instance_st* self, const memcached_st *memc)
{
if (self == NULL)
{
- self= libmemcached_xmalloc(memc, org::libmemcached::Instance);
+ self= libmemcached_xmalloc(memc, memcached_instance_st);
if (self == NULL)
{
@@ -110,7 +110,7 @@ static org::libmemcached::Instance* _server_create(org::libmemcached::Instance*
return self;
}
-void org::libmemcached::Instance::events(short arg)
+void memcached_instance_st::events(short arg)
{
if ((_events | arg) == _events)
{
@@ -120,7 +120,7 @@ void org::libmemcached::Instance::events(short arg)
_events|= arg;
}
-void org::libmemcached::Instance::revents(short arg)
+void memcached_instance_st::revents(short arg)
{
if (arg)
{
@@ -131,8 +131,8 @@ void org::libmemcached::Instance::revents(short arg)
_events&= short(~arg);
}
-org::libmemcached::Instance* __instance_create_with(memcached_st *memc,
- org::libmemcached::Instance* self,
+memcached_instance_st* __instance_create_with(memcached_st *memc,
+ memcached_instance_st* self,
const memcached_string_t& hostname,
const in_port_t port,
uint32_t weight,
@@ -162,7 +162,7 @@ org::libmemcached::Instance* __instance_create_with(memcached_st *memc,
return self;
}
-void __instance_free(org::libmemcached::Instance* self)
+void __instance_free(memcached_instance_st* self)
{
memcached_quit_server(self, false);
@@ -181,7 +181,7 @@ void __instance_free(org::libmemcached::Instance* self)
}
}
-void memcached_instance_free(org::libmemcached::Instance* self)
+void memcached_instance_free(memcached_instance_st* self)
{
if (self)
{
@@ -204,7 +204,7 @@ memcached_return_t memcached_server_cursor(const memcached_st* shell,
size_t errors= 0;
for (uint32_t x= 0; x < memcached_instance_list_count(memc); x++)
{
- org::libmemcached::Instance* instance= memcached_instance_by_position(memc, x);
+ memcached_instance_st* instance= memcached_instance_by_position(memc, x);
for (uint32_t y= 0; y < number_of_callbacks; y++)
{
@@ -233,7 +233,7 @@ memcached_return_t memcached_server_execute(memcached_st *memc,
bool some_errors= false;;
for (uint32_t x= 0; x < memcached_instance_list_count(memc); x++)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc, x);
+ memcached_instance_st* instance= memcached_instance_fetch(memc, x);
memcached_return_t rc= (*callback)(memc, instance, context);
if (rc == MEMCACHED_INVALID_ARGUMENTS)
@@ -250,7 +250,7 @@ memcached_return_t memcached_server_execute(memcached_st *memc,
return MEMCACHED_SUCCESS;
}
-memcached_server_instance_st memcached_server_by_key(memcached_st *shell,
+const memcached_instance_st * memcached_server_by_key(memcached_st *shell,
const char *key,
size_t key_length,
memcached_return_t *error)
@@ -283,7 +283,7 @@ memcached_server_instance_st memcached_server_by_key(memcached_st *shell,
/*
If we do not have a valid object to clone from, we toss an error.
*/
-static org::libmemcached::Instance* memcached_instance_clone(org::libmemcached::Instance* source)
+static memcached_instance_st* memcached_instance_clone(memcached_instance_st* source)
{
/* We just do a normal create if source is missing */
if (source == NULL)
@@ -299,7 +299,7 @@ static org::libmemcached::Instance* memcached_instance_clone(org::libmemcached::
source->type);
}
-void set_last_disconnected_host(org::libmemcached::Instance* self)
+void set_last_disconnected_host(memcached_instance_st* self)
{
assert(self->root);
if (self->root)
@@ -313,54 +313,48 @@ void set_last_disconnected_host(org::libmemcached::Instance* self)
// const_cast
memcached_st *root= (memcached_st *)self->root;
- memcached_instance_free((org::libmemcached::Instance*)(root->last_disconnected_server));
+ memcached_instance_free((memcached_instance_st*)(root->last_disconnected_server));
// We set is_parsing so that no lookup happens
root->state.is_parsing= true;
root->last_disconnected_server= memcached_instance_clone(self);
root->state.is_parsing= false;
- ((org::libmemcached::Instance*)memcached_server_get_last_disconnect(root))->version= self->version;
+ ((memcached_instance_st*)memcached_server_get_last_disconnect(root))->version= self->version;
}
}
-memcached_server_instance_st memcached_server_get_last_disconnect(const memcached_st *shell)
+const memcached_instance_st * memcached_server_get_last_disconnect(const memcached_st *shell)
{
const Memcached* self= memcached2Memcached(shell);
if (self)
{
- return (memcached_server_instance_st)self->last_disconnected_server;
+ return (const memcached_instance_st *)self->last_disconnected_server;
}
return 0;
}
-void memcached_instance_next_retry(memcached_server_instance_st self, const time_t absolute_time)
+void memcached_instance_next_retry(const memcached_instance_st * self, const time_t absolute_time)
{
WATCHPOINT_ASSERT(self);
if (self)
{
- ((org::libmemcached::Instance*)self)->next_retry= absolute_time;
+ ((memcached_instance_st*)self)->next_retry= absolute_time;
}
}
-namespace org {
-namespace libmemcached {
-
- bool Instance::valid() const
+bool memcached_instance_st::valid() const
+{
+ if (fd == INVALID_SOCKET)
{
- if (fd == INVALID_SOCKET)
- {
- return false;
- }
-
- return true;
+ return false;
}
- bool Instance::is_shutting_down() const
- {
- return options.is_shutting_down;
- }
+ return true;
+}
-} // namespace libmemcached
-} // namespace org
+bool memcached_instance_st::is_shutting_down() const
+{
+ return options.is_shutting_down;
+}
diff --git a/libmemcached/instance.hpp b/libmemcached/instance.hpp
index d0a772b9..c76dc7ee 100644
--- a/libmemcached/instance.hpp
+++ b/libmemcached/instance.hpp
@@ -58,11 +58,8 @@
#include "libmemcached/string.hpp"
-namespace org {
-namespace libmemcached {
-
// @todo Complete class transformation
-struct Instance {
+struct memcached_instance_st {
in_port_t port() const
{
return port_;
@@ -188,16 +185,13 @@ struct Instance {
}
};
-} // namespace libmemcached
-} // namespace org
-
-org::libmemcached::Instance* __instance_create_with(memcached_st *memc,
- org::libmemcached::Instance* self,
- const memcached_string_t& _hostname,
- const in_port_t port,
- uint32_t weight,
- const memcached_connection_t type);
+memcached_instance_st* __instance_create_with(memcached_st *memc,
+ memcached_instance_st* self,
+ const memcached_string_t& _hostname,
+ const in_port_t port,
+ uint32_t weight,
+ const memcached_connection_t type);
-memcached_return_t memcached_instance_push(memcached_st *ptr, const org::libmemcached::Instance*, uint32_t);
+memcached_return_t memcached_instance_push(memcached_st *ptr, const memcached_instance_st*, uint32_t);
-void __instance_free(org::libmemcached::Instance *);
+void __instance_free(memcached_instance_st *);
diff --git a/libmemcached/io.cc b/libmemcached/io.cc
index f6cc3696..cb8ed5c2 100644
--- a/libmemcached/io.cc
+++ b/libmemcached/io.cc
@@ -40,10 +40,10 @@
#include <libmemcached/common.h>
#ifdef HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
+# include <sys/socket.h>
#endif
-void initialize_binary_request(org::libmemcached::Instance* server, protocol_binary_request_header& header)
+void initialize_binary_request(memcached_instance_st* server, protocol_binary_request_header& header)
{
server->request_id++;
header.request.magic= PROTOCOL_BINARY_REQ;
@@ -61,7 +61,7 @@ enum memc_read_or_write {
*
* @param instance the server to pack
*/
-static bool repack_input_buffer(org::libmemcached::Instance* instance)
+static bool repack_input_buffer(memcached_instance_st* instance)
{
if (instance->read_ptr != instance->read_buffer)
{
@@ -134,7 +134,7 @@ static bool repack_input_buffer(org::libmemcached::Instance* instance)
* @param instance the server to star processing iput messages for
* @return true if we processed anything, false otherwise
*/
-static bool process_input_buffer(org::libmemcached::Instance* instance)
+static bool process_input_buffer(memcached_instance_st* instance)
{
/*
** We might be able to process some of the response messages if we
@@ -176,7 +176,7 @@ static bool process_input_buffer(org::libmemcached::Instance* instance)
return false;
}
-static memcached_return_t io_wait(org::libmemcached::Instance* instance,
+static memcached_return_t io_wait(memcached_instance_st* instance,
const memc_read_or_write read_or_write)
{
/*
@@ -212,7 +212,7 @@ static memcached_return_t io_wait(org::libmemcached::Instance* instance,
if (instance->root->poll_timeout == 0) // Mimic 0 causes timeout behavior (not all platforms do this)
{
- return memcached_set_error(*instance, MEMCACHED_TIMEOUT, MEMCACHED_AT);
+ return memcached_set_error(*instance, MEMCACHED_TIMEOUT, MEMCACHED_AT, memcached_literal_param("poll_timeout() was set to zero"));
}
size_t loop_max= 5;
@@ -257,7 +257,7 @@ static memcached_return_t io_wait(org::libmemcached::Instance* instance,
if (active_fd == 0)
{
- return memcached_set_error(*instance, MEMCACHED_TIMEOUT, MEMCACHED_AT);
+ return memcached_set_error(*instance, MEMCACHED_TIMEOUT, MEMCACHED_AT, memcached_literal_param("No active_fd were found"));
}
// Only an error should result in this code being called.
@@ -296,7 +296,7 @@ static memcached_return_t io_wait(org::libmemcached::Instance* instance,
memcached_literal_param("number of attempts to call io_wait() failed"));
}
-static bool io_flush(org::libmemcached::Instance* instance,
+static bool io_flush(memcached_instance_st* instance,
const bool with_flush,
memcached_return_t& error)
{
@@ -407,12 +407,12 @@ static bool io_flush(org::libmemcached::Instance* instance,
return true;
}
-memcached_return_t memcached_io_wait_for_write(org::libmemcached::Instance* instance)
+memcached_return_t memcached_io_wait_for_write(memcached_instance_st* instance)
{
return io_wait(instance, MEM_WRITE);
}
-static memcached_return_t _io_fill(org::libmemcached::Instance* instance)
+static memcached_return_t _io_fill(memcached_instance_st* instance)
{
ssize_t data_read;
do
@@ -488,7 +488,7 @@ static memcached_return_t _io_fill(org::libmemcached::Instance* instance)
return MEMCACHED_SUCCESS;
}
-memcached_return_t memcached_io_read(org::libmemcached::Instance* instance,
+memcached_return_t memcached_io_read(memcached_instance_st* instance,
void *buffer, size_t length, ssize_t& nread)
{
assert(memcached_is_udp(instance->root) == false);
@@ -540,7 +540,7 @@ memcached_return_t memcached_io_read(org::libmemcached::Instance* instance,
return MEMCACHED_SUCCESS;
}
-memcached_return_t memcached_io_slurp(org::libmemcached::Instance* instance)
+memcached_return_t memcached_io_slurp(memcached_instance_st* instance)
{
assert_msg(instance, "Programmer error, invalid Instance");
assert(memcached_is_udp(instance->root) == false);
@@ -597,7 +597,7 @@ memcached_return_t memcached_io_slurp(org::libmemcached::Instance* instance)
return MEMCACHED_CONNECTION_FAILURE;
}
-static bool _io_write(org::libmemcached::Instance* instance,
+static bool _io_write(memcached_instance_st* instance,
const void *buffer, size_t length, bool with_flush,
size_t& written)
{
@@ -650,13 +650,13 @@ static bool _io_write(org::libmemcached::Instance* instance,
return true;
}
-bool memcached_io_write(org::libmemcached::Instance* instance)
+bool memcached_io_write(memcached_instance_st* instance)
{
size_t written;
return _io_write(instance, NULL, 0, true, written);
}
-ssize_t memcached_io_write(org::libmemcached::Instance* instance,
+ssize_t memcached_io_write(memcached_instance_st* instance,
const void *buffer, const size_t length, const bool with_flush)
{
size_t written;
@@ -669,7 +669,7 @@ ssize_t memcached_io_write(org::libmemcached::Instance* instance,
return ssize_t(written);
}
-bool memcached_io_writev(org::libmemcached::Instance* instance,
+bool memcached_io_writev(memcached_instance_st* instance,
libmemcached_io_vector_st vector[],
const size_t number_of, const bool with_flush)
{
@@ -701,7 +701,7 @@ bool memcached_io_writev(org::libmemcached::Instance* instance,
return (complete_total == total);
}
-void org::libmemcached::Instance::start_close_socket()
+void memcached_instance_st::start_close_socket()
{
if (fd != INVALID_SOCKET)
{
@@ -710,7 +710,7 @@ void org::libmemcached::Instance::start_close_socket()
}
}
-void org::libmemcached::Instance::reset_socket()
+void memcached_instance_st::reset_socket()
{
if (fd != INVALID_SOCKET)
{
@@ -719,7 +719,7 @@ void org::libmemcached::Instance::reset_socket()
}
}
-void org::libmemcached::Instance::close_socket()
+void memcached_instance_st::close_socket()
{
if (fd != INVALID_SOCKET)
{
@@ -755,7 +755,7 @@ void org::libmemcached::Instance::close_socket()
major_version= minor_version= micro_version= UINT8_MAX;
}
-org::libmemcached::Instance* memcached_io_get_readable_server(Memcached *memc, memcached_return_t&)
+memcached_instance_st* memcached_io_get_readable_server(Memcached *memc, memcached_return_t&)
{
#define MAX_SERVERS_TO_POLL 100
struct pollfd fds[MAX_SERVERS_TO_POLL];
@@ -763,7 +763,7 @@ org::libmemcached::Instance* memcached_io_get_readable_server(Memcached *memc, m
for (uint32_t x= 0; x < memcached_server_count(memc) and host_index < MAX_SERVERS_TO_POLL; ++x)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc, x);
+ memcached_instance_st* instance= memcached_instance_fetch(memc, x);
if (instance->read_buffer_length > 0) /* I have data in the buffer */
{
@@ -784,7 +784,7 @@ org::libmemcached::Instance* memcached_io_get_readable_server(Memcached *memc, m
/* We have 0 or 1 server with pending events.. */
for (uint32_t x= 0; x< memcached_server_count(memc); ++x)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc, x);
+ memcached_instance_st* instance= memcached_instance_fetch(memc, x);
if (instance->response_count() > 0)
{
@@ -811,7 +811,7 @@ org::libmemcached::Instance* memcached_io_get_readable_server(Memcached *memc, m
{
for (uint32_t y= 0; y < memcached_server_count(memc); ++y)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc, y);
+ memcached_instance_st* instance= memcached_instance_fetch(memc, y);
if (instance->fd == fds[x].fd)
{
@@ -828,7 +828,7 @@ org::libmemcached::Instance* memcached_io_get_readable_server(Memcached *memc, m
/*
Eventually we will just kill off the server with the problem.
*/
-void memcached_io_reset(org::libmemcached::Instance* instance)
+void memcached_io_reset(memcached_instance_st* instance)
{
memcached_quit_server(instance, true);
}
@@ -837,7 +837,7 @@ void memcached_io_reset(org::libmemcached::Instance* instance)
* Read a given number of bytes from the server and place it into a specific
* buffer. Reset the IO channel on this server if an error occurs.
*/
-memcached_return_t memcached_safe_read(org::libmemcached::Instance* instance,
+memcached_return_t memcached_safe_read(memcached_instance_st* instance,
void *dta,
const size_t size)
{
@@ -862,7 +862,7 @@ memcached_return_t memcached_safe_read(org::libmemcached::Instance* instance,
return MEMCACHED_SUCCESS;
}
-memcached_return_t memcached_io_readline(org::libmemcached::Instance* instance,
+memcached_return_t memcached_io_readline(memcached_instance_st* instance,
char *buffer_ptr,
size_t size,
size_t& total_nr)
diff --git a/libmemcached/io.hpp b/libmemcached/io.hpp
index bf2133e8..f3fed345 100644
--- a/libmemcached/io.hpp
+++ b/libmemcached/io.hpp
@@ -38,35 +38,35 @@
#pragma once
-void initialize_binary_request(org::libmemcached::Instance* server, protocol_binary_request_header&);
+void initialize_binary_request(memcached_instance_st* server, protocol_binary_request_header&);
-bool memcached_io_write(org::libmemcached::Instance* ptr);
+bool memcached_io_write(memcached_instance_st* ptr);
-ssize_t memcached_io_write(org::libmemcached::Instance* ptr,
+ssize_t memcached_io_write(memcached_instance_st* ptr,
const void *buffer, size_t length, bool with_flush);
-bool memcached_io_writev(org::libmemcached::Instance* ptr,
+bool memcached_io_writev(memcached_instance_st* ptr,
libmemcached_io_vector_st vector[],
const size_t number_of, const bool with_flush);
-memcached_return_t memcached_io_wait_for_write(org::libmemcached::Instance* ptr);
+memcached_return_t memcached_io_wait_for_write(memcached_instance_st* ptr);
-void memcached_io_reset(org::libmemcached::Instance* ptr);
+void memcached_io_reset(memcached_instance_st* ptr);
-memcached_return_t memcached_io_read(org::libmemcached::Instance* ptr,
+memcached_return_t memcached_io_read(memcached_instance_st* ptr,
void *buffer, size_t length, ssize_t& nread);
/* Read a line (terminated by '\n') into the buffer */
-memcached_return_t memcached_io_readline(org::libmemcached::Instance* ptr,
+memcached_return_t memcached_io_readline(memcached_instance_st* ptr,
char *buffer_ptr,
size_t size,
size_t& total);
/* Read n bytes of data from the server and store them in dta */
-memcached_return_t memcached_safe_read(org::libmemcached::Instance* ptr,
+memcached_return_t memcached_safe_read(memcached_instance_st* ptr,
void *dta,
const size_t size);
-org::libmemcached::Instance* memcached_io_get_readable_server(memcached_st *memc, memcached_return_t&);
+memcached_instance_st* memcached_io_get_readable_server(memcached_st *memc, memcached_return_t&);
-memcached_return_t memcached_io_slurp(org::libmemcached::Instance* ptr);
+memcached_return_t memcached_io_slurp(memcached_instance_st* ptr);
diff --git a/libmemcached/memcached.cc b/libmemcached/memcached.cc
index 41c058cd..e1519d1e 100644
--- a/libmemcached/memcached.cc
+++ b/libmemcached/memcached.cc
@@ -136,7 +136,7 @@ static void __memcached_free(Memcached *ptr, bool release_st)
memcached_virtual_bucket_free(ptr);
- memcached_instance_free((org::libmemcached::Instance*)ptr->last_disconnected_server);
+ memcached_instance_free((memcached_instance_st*)ptr->last_disconnected_server);
if (ptr->on_cleanup)
{
@@ -297,7 +297,7 @@ void memcached_reset_last_disconnected_server(memcached_st *shell)
Memcached* self= memcached2Memcached(shell);
if (self)
{
- memcached_instance_free((org::libmemcached::Instance*)self->last_disconnected_server);
+ memcached_instance_free((memcached_instance_st*)self->last_disconnected_server);
self->last_disconnected_server= NULL;
}
}
@@ -432,10 +432,10 @@ void *memcached_set_user_data(memcached_st *shell, void *data)
memcached_return_t memcached_push(memcached_st *destination, const memcached_st *source)
{
- return memcached_instance_push(destination, (org::libmemcached::Instance*)source->servers, source->number_of_hosts);
+ return memcached_instance_push(destination, (memcached_instance_st*)source->servers, source->number_of_hosts);
}
-org::libmemcached::Instance* memcached_instance_fetch(Memcached *ptr, uint32_t server_key)
+memcached_instance_st* memcached_instance_fetch(Memcached *ptr, uint32_t server_key)
{
if (ptr == NULL)
{
@@ -445,7 +445,7 @@ org::libmemcached::Instance* memcached_instance_fetch(Memcached *ptr, uint32_t s
return &ptr->servers[server_key];
}
-memcached_server_instance_st memcached_server_instance_by_position(const memcached_st *shell, uint32_t server_key)
+const memcached_instance_st * memcached_server_instance_by_position(const memcached_st *shell, uint32_t server_key)
{
const Memcached* memc= memcached2Memcached(shell);
if (memc)
@@ -456,7 +456,7 @@ memcached_server_instance_st memcached_server_instance_by_position(const memcach
return NULL;
}
-org::libmemcached::Instance* memcached_instance_by_position(const memcached_st *shell, uint32_t server_key)
+memcached_instance_st* memcached_instance_by_position(const memcached_st *shell, uint32_t server_key)
{
const Memcached* memc= memcached2Memcached(shell);
if (memc)
@@ -478,12 +478,12 @@ uint64_t memcached_query_id(const memcached_st *shell)
return 0;
}
-org::libmemcached::Instance* memcached_instance_list(const memcached_st *shell)
+memcached_instance_st* memcached_instance_list(const memcached_st *shell)
{
const Memcached* memc= memcached2Memcached(shell);
if (memc)
{
- return (org::libmemcached::Instance*)memc->servers;
+ return (memcached_instance_st*)memc->servers;
}
return NULL;
diff --git a/libmemcached/parse.cc b/libmemcached/parse.cc
index 3284a4f6..7665b731 100644
--- a/libmemcached/parse.cc
+++ b/libmemcached/parse.cc
@@ -87,7 +87,13 @@ memcached_server_list_st memcached_servers_parse(const char *server_strings)
ptr++;
+ errno= 0;
port= (in_port_t) strtoul(ptr, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ memcached_server_free(servers);
+ return NULL;
+ }
ptr2= index(ptr, ' ');
if (! ptr2)
@@ -96,14 +102,22 @@ memcached_server_list_st memcached_servers_parse(const char *server_strings)
if (ptr2)
{
ptr2++;
- weight = (uint32_t) strtoul(ptr2, (char **)NULL, 10);
+ errno= 0;
+ weight= uint32_t(strtoul(ptr2, (char **)NULL, 10));
+ if (errno != 0)
+ {
+ memcached_server_free(servers);
+ return NULL;
+ }
}
}
servers= memcached_server_list_append_with_weight(servers, buffer, port, weight, &rc);
if (isspace(*begin_ptr))
+ {
begin_ptr++;
+ }
}
return servers;
diff --git a/libmemcached/poll.cc b/libmemcached/poll.cc
index abd15d4c..6fdf242c 100644
--- a/libmemcached/poll.cc
+++ b/libmemcached/poll.cc
@@ -12,7 +12,7 @@
#include "libmemcached/common.h"
-#if defined(WIN32) || defined(__MINGW32__)
+#if defined(_WIN32)
#include "libmemcached/poll.h"
#include <sys/time.h>
@@ -31,7 +31,7 @@ int poll(struct pollfd fds[], nfds_t nfds, int tmo)
{
if (fds[x].events & (POLLIN | POLLOUT))
{
-#ifndef WIN32
+#ifndef _WIN32
if (fds[x].fd > maxfd)
{
maxfd= fds[x].fd;
@@ -82,4 +82,4 @@ int poll(struct pollfd fds[], nfds_t nfds, int tmo)
return ret;
}
-#endif // defined(WIN32) || defined(__MINGW32__)
+#endif // defined(_WIN32)
diff --git a/libmemcached/poll.h b/libmemcached/poll.h
index 8445f009..46636c40 100644
--- a/libmemcached/poll.h
+++ b/libmemcached/poll.h
@@ -12,7 +12,7 @@
#pragma once
-#if defined(WIN32) || defined(__MINGW32__)
+#if defined(_WIN32)
#include <winsock2.h>
@@ -22,7 +22,7 @@ extern "C" {
typedef struct pollfd
{
-#ifdef WIN32
+#if defined(_WIN32)
SOCKET fd;
#else
int fd;
@@ -45,4 +45,4 @@ int poll(struct pollfd fds[], nfds_t nfds, int tmo);
}
#endif
-#endif // defined(WIN32) || defined(__MINGW32__)
+#endif // defined(_WIN32)
diff --git a/libmemcached/purge.cc b/libmemcached/purge.cc
index b1390d9c..5f6d4bb7 100644
--- a/libmemcached/purge.cc
+++ b/libmemcached/purge.cc
@@ -79,7 +79,7 @@ private:
int32_t& _origin;
};
-bool memcached_purge(org::libmemcached::Instance* ptr)
+bool memcached_purge(memcached_instance_st* ptr)
{
Memcached *root= (Memcached *)ptr->root;
diff --git a/libmemcached/quit.cc b/libmemcached/quit.cc
index 61930beb..7ece03b9 100644
--- a/libmemcached/quit.cc
+++ b/libmemcached/quit.cc
@@ -38,7 +38,7 @@
#include <libmemcached/common.h>
namespace {
- memcached_return_t send_quit_message(org::libmemcached::Instance* instance)
+ memcached_return_t send_quit_message(memcached_instance_st* instance)
{
memcached_return_t rc;
if (instance->root->flags.binary_protocol)
@@ -70,7 +70,7 @@ namespace {
return rc;
}
- void drain_instance(org::libmemcached::Instance* instance)
+ void drain_instance(memcached_instance_st* instance)
{
/* read until socket is closed, or there is an error
* closing the socket before all data is read
@@ -105,7 +105,7 @@ namespace {
will force data to be completed.
*/
-void memcached_quit_server(org::libmemcached::Instance* instance, bool io_death)
+void memcached_quit_server(memcached_instance_st* instance, bool io_death)
{
if (instance->valid())
{
@@ -130,7 +130,7 @@ void send_quit(Memcached *memc)
{
for (uint32_t x= 0; x < memcached_server_count(memc); x++)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc, x);
+ memcached_instance_st* instance= memcached_instance_fetch(memc, x);
memcached_quit_server(instance, false);
}
diff --git a/libmemcached/quit.hpp b/libmemcached/quit.hpp
index 76737b95..a48a8a7e 100644
--- a/libmemcached/quit.hpp
+++ b/libmemcached/quit.hpp
@@ -36,6 +36,6 @@
#pragma once
-void memcached_quit_server(org::libmemcached::Instance* ptr, bool io_death);
+void memcached_quit_server(memcached_instance_st* ptr, bool io_death);
void send_quit(memcached_st *ptr);
diff --git a/libmemcached/response.cc b/libmemcached/response.cc
index c3d7f2c8..f382671d 100644
--- a/libmemcached/response.cc
+++ b/libmemcached/response.cc
@@ -38,7 +38,7 @@
#include <libmemcached/common.h>
#include <libmemcached/string.hpp>
-static memcached_return_t textual_value_fetch(org::libmemcached::Instance* instance,
+static memcached_return_t textual_value_fetch(memcached_instance_st* instance,
char *buffer,
memcached_result_st *result)
{
@@ -90,9 +90,11 @@ static memcached_return_t textual_value_fetch(org::libmemcached::Instance* insta
}
for (next_ptr= string_ptr; isdigit(*string_ptr); string_ptr++) {};
+
+ errno= 0;
result->impl()->item_flags= (uint32_t) strtoul(next_ptr, &string_ptr, 10);
- if (end_ptr == string_ptr)
+ if (errno != 0 or end_ptr == string_ptr)
{
goto read_error;
}
@@ -105,9 +107,10 @@ static memcached_return_t textual_value_fetch(org::libmemcached::Instance* insta
}
for (next_ptr= string_ptr; isdigit(*string_ptr); string_ptr++) {};
+ errno= 0;
value_length= (size_t)strtoull(next_ptr, &string_ptr, 10);
- if (end_ptr == string_ptr)
+ if (errno != 0 or end_ptr == string_ptr)
{
goto read_error;
}
@@ -121,11 +124,14 @@ static memcached_return_t textual_value_fetch(org::libmemcached::Instance* insta
else
{
string_ptr++;
+
for (next_ptr= string_ptr; isdigit(*string_ptr); string_ptr++) {};
+
+ errno= 0;
result->impl()->item_cas= strtoull(next_ptr, &string_ptr, 10);
}
- if (end_ptr < string_ptr)
+ if (errno != 0 or end_ptr < string_ptr)
{
goto read_error;
}
@@ -207,7 +213,7 @@ read_error:
return MEMCACHED_PARTIAL_READ;
}
-static memcached_return_t textual_read_one_response(org::libmemcached::Instance* instance,
+static memcached_return_t textual_read_one_response(memcached_instance_st* instance,
char *buffer, const size_t buffer_length,
memcached_result_st *result)
{
@@ -238,8 +244,9 @@ static memcached_return_t textual_read_one_response(org::libmemcached::Instance*
char *response_ptr= index(buffer, ' ');
char *endptr;
+ errno= 0;
long int version= strtol(response_ptr, &endptr, 10);
- if (version == LONG_MIN or version == LONG_MAX or errno == EINVAL or version > UINT8_MAX or version == 0)
+ if (errno != 0 or version == LONG_MIN or version == LONG_MAX or version > UINT8_MAX or version == 0)
{
instance->major_version= instance->minor_version= instance->micro_version= UINT8_MAX;
return memcached_set_error(*instance, MEMCACHED_UNKNOWN_READ_FAILURE, MEMCACHED_AT, memcached_literal_param("strtol() failed to parse major version"));
@@ -247,8 +254,9 @@ static memcached_return_t textual_read_one_response(org::libmemcached::Instance*
instance->major_version= uint8_t(version);
endptr++;
+ errno= 0;
version= strtol(endptr, &endptr, 10);
- if (version == LONG_MIN or version == LONG_MAX or errno == EINVAL or version > UINT8_MAX)
+ if (errno != 0 or version == LONG_MIN or version == LONG_MAX or version > UINT8_MAX)
{
instance->major_version= instance->minor_version= instance->micro_version= UINT8_MAX;
return memcached_set_error(*instance, MEMCACHED_UNKNOWN_READ_FAILURE, MEMCACHED_AT, memcached_literal_param("strtol() failed to parse minor version"));
@@ -256,8 +264,9 @@ static memcached_return_t textual_read_one_response(org::libmemcached::Instance*
instance->minor_version= uint8_t(version);
endptr++;
+ errno= 0;
version= strtol(endptr, &endptr, 10);
- if (version == LONG_MIN or version == LONG_MAX or errno == EINVAL or version > UINT8_MAX)
+ if (errno != 0 or version == LONG_MIN or version == LONG_MAX or version > UINT8_MAX)
{
instance->major_version= instance->minor_version= instance->micro_version= UINT8_MAX;
return memcached_set_error(*instance, MEMCACHED_UNKNOWN_READ_FAILURE, MEMCACHED_AT, memcached_literal_param("strtol() failed to parse micro version"));
@@ -442,6 +451,7 @@ static memcached_return_t textual_read_one_response(org::libmemcached::Instance*
case '8': /* INCR/DECR response */
case '9': /* INCR/DECR response */
{
+ errno= 0;
unsigned long long int auto_return_value= strtoull(buffer, (char **)NULL, 10);
if (auto_return_value == ULLONG_MAX and errno == ERANGE)
@@ -456,6 +466,12 @@ static memcached_return_t textual_read_one_response(org::libmemcached::Instance*
return memcached_set_error(*instance, MEMCACHED_UNKNOWN_READ_FAILURE, MEMCACHED_AT,
memcached_literal_param("Numeric response was out of range"));
}
+ else if (errno != 0)
+ {
+ result->impl()->numeric_value= UINT64_MAX;
+ return memcached_set_error(*instance, MEMCACHED_UNKNOWN_READ_FAILURE, MEMCACHED_AT,
+ memcached_literal_param("Numeric response was out of range"));
+ }
result->impl()->numeric_value= uint64_t(auto_return_value);
@@ -480,7 +496,7 @@ static memcached_return_t textual_read_one_response(org::libmemcached::Instance*
buffer, total_read);
}
-static memcached_return_t binary_read_one_response(org::libmemcached::Instance* instance,
+static memcached_return_t binary_read_one_response(memcached_instance_st* instance,
char *buffer, const size_t buffer_length,
memcached_result_st *result)
{
@@ -620,8 +636,9 @@ static memcached_return_t binary_read_one_response(org::libmemcached::Instance*
}
char *endptr;
+ errno= 0;
long int version= strtol(version_buffer, &endptr, 10);
- if (version == LONG_MIN or version == LONG_MAX or errno == EINVAL or version > UINT8_MAX or version == 0)
+ if (errno != 0 or version == LONG_MIN or version == LONG_MAX or version > UINT8_MAX or version == 0)
{
instance->major_version= instance->minor_version= instance->micro_version= UINT8_MAX;
return memcached_set_error(*instance, MEMCACHED_UNKNOWN_READ_FAILURE, MEMCACHED_AT, memcached_literal_param("strtol() failed to parse major version"));
@@ -629,8 +646,9 @@ static memcached_return_t binary_read_one_response(org::libmemcached::Instance*
instance->major_version= uint8_t(version);
endptr++;
+ errno= 0;
version= strtol(endptr, &endptr, 10);
- if (version == LONG_MIN or version == LONG_MAX or errno == EINVAL or version > UINT8_MAX)
+ if (errno != 0 or version == LONG_MIN or version == LONG_MAX or version > UINT8_MAX)
{
instance->major_version= instance->minor_version= instance->micro_version= UINT8_MAX;
return memcached_set_error(*instance, MEMCACHED_UNKNOWN_READ_FAILURE, MEMCACHED_AT, memcached_literal_param("strtol() failed to parse minor version"));
@@ -638,8 +656,9 @@ static memcached_return_t binary_read_one_response(org::libmemcached::Instance*
instance->minor_version= uint8_t(version);
endptr++;
+ errno= 0;
version= strtol(endptr, &endptr, 10);
- if (version == LONG_MIN or version == LONG_MAX or errno == EINVAL or version > UINT8_MAX)
+ if (errno != 0 or version == LONG_MIN or version == LONG_MAX or version > UINT8_MAX)
{
instance->major_version= instance->minor_version= instance->micro_version= UINT8_MAX;
return memcached_set_error(*instance, MEMCACHED_UNKNOWN_READ_FAILURE, MEMCACHED_AT, memcached_literal_param("strtol() failed to parse micro version"));
@@ -648,6 +667,25 @@ static memcached_return_t binary_read_one_response(org::libmemcached::Instance*
}
break;
+ case PROTOCOL_BINARY_CMD_TOUCH:
+ {
+ rc= MEMCACHED_SUCCESS;
+ if (bodylen == 4) // The four byte read is a bug?
+ {
+ char touch_buffer[4]; // @todo document this number
+ rc= memcached_safe_read(instance, touch_buffer, sizeof(touch_buffer));
+#if 0
+ fprintf(stderr, "%s:%d %d %d %d %d %.*s(%d)\n", __FILE__, __LINE__,
+ int(touch_buffer[0]),
+ int(touch_buffer[1]),
+ int(touch_buffer[2]),
+ int(touch_buffer[3]),
+ int(bodylen), touch_buffer, int(bodylen));
+#endif
+ }
+ return memcached_set_error(*instance, rc, MEMCACHED_AT);
+ }
+
case PROTOCOL_BINARY_CMD_FLUSH:
case PROTOCOL_BINARY_CMD_QUIT:
case PROTOCOL_BINARY_CMD_SET:
@@ -656,13 +694,8 @@ static memcached_return_t binary_read_one_response(org::libmemcached::Instance*
case PROTOCOL_BINARY_CMD_APPEND:
case PROTOCOL_BINARY_CMD_PREPEND:
case PROTOCOL_BINARY_CMD_DELETE:
- case PROTOCOL_BINARY_CMD_TOUCH:
{
- if (bodylen != 0)
- {
- char touch_buffer[32]; // @todo document this number
- rc= memcached_safe_read(instance, buffer, sizeof(touch_buffer));
- }
+ WATCHPOINT_ASSERT(bodylen == 0);
return MEMCACHED_SUCCESS;
}
@@ -801,7 +834,7 @@ static memcached_return_t binary_read_one_response(org::libmemcached::Instance*
return rc;
}
-static memcached_return_t _read_one_response(org::libmemcached::Instance* instance,
+static memcached_return_t _read_one_response(memcached_instance_st* instance,
char *buffer, const size_t buffer_length,
memcached_result_st *result)
{
@@ -831,7 +864,7 @@ static memcached_return_t _read_one_response(org::libmemcached::Instance* instan
return rc;
}
-memcached_return_t memcached_read_one_response(org::libmemcached::Instance* instance,
+memcached_return_t memcached_read_one_response(memcached_instance_st* instance,
memcached_result_st *result)
{
char buffer[SMALL_STRING_LEN];
@@ -845,7 +878,7 @@ memcached_return_t memcached_read_one_response(org::libmemcached::Instance* inst
return _read_one_response(instance, buffer, sizeof(buffer), result);
}
-memcached_return_t memcached_response(org::libmemcached::Instance* instance,
+memcached_return_t memcached_response(memcached_instance_st* instance,
memcached_result_st *result)
{
char buffer[1024];
@@ -853,7 +886,7 @@ memcached_return_t memcached_response(org::libmemcached::Instance* instance,
return memcached_response(instance, buffer, sizeof(buffer), result);
}
-memcached_return_t memcached_response(org::libmemcached::Instance* instance,
+memcached_return_t memcached_response(memcached_instance_st* instance,
char *buffer, size_t buffer_length,
memcached_result_st *result)
{
diff --git a/libmemcached/response.h b/libmemcached/response.h
index 6d6d5644..c066f3b3 100644
--- a/libmemcached/response.h
+++ b/libmemcached/response.h
@@ -38,12 +38,12 @@
#pragma once
/* Read a single response from the server */
-memcached_return_t memcached_read_one_response(org::libmemcached::Instance* ptr,
+memcached_return_t memcached_read_one_response(memcached_instance_st* ptr,
memcached_result_st *result);
-memcached_return_t memcached_response(org::libmemcached::Instance* ptr,
+memcached_return_t memcached_response(memcached_instance_st* ptr,
memcached_result_st *result);
-memcached_return_t memcached_response(org::libmemcached::Instance* ptr,
+memcached_return_t memcached_response(memcached_instance_st* ptr,
char *buffer, size_t buffer_length,
memcached_result_st *result);
diff --git a/libmemcached/sasl.cc b/libmemcached/sasl.cc
index 8e180d6f..ee225868 100644
--- a/libmemcached/sasl.cc
+++ b/libmemcached/sasl.cc
@@ -75,7 +75,7 @@ sasl_callback_t *memcached_get_sasl_callbacks(memcached_st *shell)
* @param raddr remote address (out)
* @return true on success false otherwise (errno contains more info)
*/
-static memcached_return_t resolve_names(org::libmemcached::Instance& server, char *laddr, size_t laddr_length, char *raddr, size_t raddr_length)
+static memcached_return_t resolve_names(memcached_instance_st& server, char *laddr, size_t laddr_length, char *raddr, size_t raddr_length)
{
char host[MEMCACHED_NI_MAXHOST];
char port[MEMCACHED_NI_MAXSERV];
@@ -133,7 +133,7 @@ static void sasl_startup_function(void)
} // extern "C"
-memcached_return_t memcached_sasl_authenticate_connection(org::libmemcached::Instance* server)
+memcached_return_t memcached_sasl_authenticate_connection(memcached_instance_st* server)
{
if (LIBMEMCACHED_WITH_SASL_SUPPORT == 0)
{
diff --git a/libmemcached/sasl.hpp b/libmemcached/sasl.hpp
index c990cfb8..bda6b227 100644
--- a/libmemcached/sasl.hpp
+++ b/libmemcached/sasl.hpp
@@ -39,4 +39,4 @@
memcached_return_t memcached_clone_sasl(memcached_st *clone, const memcached_st *source);
-memcached_return_t memcached_sasl_authenticate_connection(org::libmemcached::Instance* server);
+memcached_return_t memcached_sasl_authenticate_connection(memcached_instance_st* server);
diff --git a/libmemcached/server.cc b/libmemcached/server.cc
index ba40a6ee..b38120ad 100644
--- a/libmemcached/server.cc
+++ b/libmemcached/server.cc
@@ -191,7 +191,7 @@ uint32_t memcached_server_count(const memcached_st *self)
return self->number_of_hosts;
}
-const char *memcached_server_name(const memcached_server_instance_st self)
+const char *memcached_server_name(const memcached_instance_st * self)
{
WATCHPOINT_ASSERT(self);
if (self)
@@ -202,7 +202,7 @@ const char *memcached_server_name(const memcached_server_instance_st self)
return NULL;
}
-in_port_t memcached_server_port(const memcached_server_instance_st self)
+in_port_t memcached_server_port(const memcached_instance_st * self)
{
WATCHPOINT_ASSERT(self);
if (self == NULL)
@@ -213,7 +213,7 @@ in_port_t memcached_server_port(const memcached_server_instance_st self)
return self->port();
}
-uint32_t memcached_server_response_count(const memcached_server_instance_st self)
+uint32_t memcached_server_response_count(const memcached_instance_st * self)
{
WATCHPOINT_ASSERT(self);
if (self == NULL)
@@ -224,7 +224,7 @@ uint32_t memcached_server_response_count(const memcached_server_instance_st self
return self->cursor_active_;
}
-const char *memcached_server_type(const memcached_server_instance_st ptr)
+const char *memcached_server_type(const memcached_instance_st * ptr)
{
if (ptr)
{
@@ -244,7 +244,7 @@ const char *memcached_server_type(const memcached_server_instance_st ptr)
return "UNKNOWN";
}
-uint8_t memcached_server_major_version(const memcached_server_instance_st instance)
+uint8_t memcached_server_major_version(const memcached_instance_st * instance)
{
if (instance)
{
@@ -254,7 +254,7 @@ uint8_t memcached_server_major_version(const memcached_server_instance_st instan
return UINT8_MAX;
}
-uint8_t memcached_server_minor_version(const memcached_server_instance_st instance)
+uint8_t memcached_server_minor_version(const memcached_instance_st * instance)
{
if (instance)
{
@@ -264,7 +264,7 @@ uint8_t memcached_server_minor_version(const memcached_server_instance_st instan
return UINT8_MAX;
}
-uint8_t memcached_server_micro_version(const memcached_server_instance_st instance)
+uint8_t memcached_server_micro_version(const memcached_instance_st * instance)
{
if (instance)
{
diff --git a/libmemcached/server.hpp b/libmemcached/server.hpp
index 8cbdc151..0c6ac798 100644
--- a/libmemcached/server.hpp
+++ b/libmemcached/server.hpp
@@ -68,11 +68,11 @@ static inline bool memcached_is_valid_filename(const memcached_string_t& arg)
return arg.c_str != NULL and arg.size > 0 and arg.size < MEMCACHED_NI_MAXHOST;
}
-void memcached_instance_free(org::libmemcached::Instance *);
+void memcached_instance_free(memcached_instance_st *);
-void set_last_disconnected_host(org::libmemcached::Instance* self);
+void set_last_disconnected_host(memcached_instance_st* self);
-static inline void memcached_mark_server_for_timeout(org::libmemcached::Instance* server)
+static inline void memcached_mark_server_for_timeout(memcached_instance_st* server)
{
if (server->state != MEMCACHED_SERVER_STATE_IN_TIMEOUT)
{
diff --git a/libmemcached/server_instance.h b/libmemcached/server_instance.h
index 3b69b77b..187f2744 100644
--- a/libmemcached/server_instance.h
+++ b/libmemcached/server_instance.h
@@ -38,8 +38,7 @@
#pragma once
#ifdef __cplusplus
-namespace org { namespace libmemcached { struct Instance; } }
-typedef struct org::libmemcached::Instance* memcached_server_write_instance_st;
+typedef struct memcached_instance_st* memcached_server_write_instance_st;
#else
typedef void* memcached_server_write_instance_st;
#endif
diff --git a/libmemcached/server_list.cc b/libmemcached/server_list.cc
index b42a9095..b5d5b72e 100644
--- a/libmemcached/server_list.cc
+++ b/libmemcached/server_list.cc
@@ -127,7 +127,7 @@ uint32_t memcached_instance_list_count(const memcached_st* self)
: self->number_of_hosts;
}
-void memcached_instance_set(memcached_st* memc, org::libmemcached::Instance* list, const uint32_t host_list_size)
+void memcached_instance_set(memcached_st* memc, memcached_instance_st* list, const uint32_t host_list_size)
{
assert(memc);
memc->servers= list;
@@ -148,7 +148,7 @@ void memcached_server_list_free(memcached_server_list_st self)
}
}
-void memcached_instance_list_free(org::libmemcached::Instance* self, uint32_t instance_count)
+void memcached_instance_list_free(memcached_instance_st* self, uint32_t instance_count)
{
if (self)
{
diff --git a/libmemcached/server_list.hpp b/libmemcached/server_list.hpp
index ffbb6a36..0280332c 100644
--- a/libmemcached/server_list.hpp
+++ b/libmemcached/server_list.hpp
@@ -36,12 +36,12 @@
#pragma once
-org::libmemcached::Instance* memcached_instance_list(const memcached_st *);
+memcached_instance_st* memcached_instance_list(const memcached_st *);
uint32_t memcached_instance_list_count(const memcached_st*);
uint32_t memcached_servers_set_count(memcached_server_list_st servers, uint32_t count);
-void memcached_instance_list_free(org::libmemcached::Instance* self, uint32_t count);
+void memcached_instance_list_free(memcached_instance_st* self, uint32_t count);
-void memcached_instance_set(memcached_st*, org::libmemcached::Instance*, const uint32_t host_list_size);
+void memcached_instance_set(memcached_st*, memcached_instance_st*, const uint32_t host_list_size);
diff --git a/libmemcached/stats.cc b/libmemcached/stats.cc
index 89d5be52..d70972ef 100644
--- a/libmemcached/stats.cc
+++ b/libmemcached/stats.cc
@@ -2,7 +2,7 @@
*
* Libmemcached library
*
- * Copyright (C) 2011 Data Differential, http://datadifferential.com/
+ * Copyright (C) 2011-2013 Data Differential, http://datadifferential.com/
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -91,7 +91,12 @@ static memcached_return_t set_data(memcached_stat_st *memc_stat, const char *key
}
else if (strcmp("pid", key) == 0)
{
+ errno= 0;
int64_t temp= strtoll(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
if (temp <= INT32_MAX and ( sizeof(pid_t) == sizeof(int32_t) ))
{
@@ -109,11 +114,21 @@ static memcached_return_t set_data(memcached_stat_st *memc_stat, const char *key
}
else if (not strcmp("uptime", key))
{
+ errno= 0;
memc_stat->uptime= strtoul(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("time", key))
{
+ errno= 0;
memc_stat->time= strtoul(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("version", key))
{
@@ -122,7 +137,12 @@ static memcached_return_t set_data(memcached_stat_st *memc_stat, const char *key
}
else if (not strcmp("pointer_size", key))
{
+ errno= 0;
memc_stat->pointer_size= strtoul(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("rusage_user", key))
{
@@ -130,8 +150,20 @@ static memcached_return_t set_data(memcached_stat_st *memc_stat, const char *key
for (walk_ptr= (char*)value; (!ispunct(*walk_ptr)); walk_ptr++) {};
*walk_ptr= 0;
walk_ptr++;
+
+ errno= 0;
memc_stat->rusage_user_seconds= strtoul(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
+
+ errno= 0;
memc_stat->rusage_user_microseconds= strtoul(walk_ptr, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("rusage_system", key))
{
@@ -139,85 +171,172 @@ static memcached_return_t set_data(memcached_stat_st *memc_stat, const char *key
for (walk_ptr= (char*)value; (!ispunct(*walk_ptr)); walk_ptr++) {};
*walk_ptr= 0;
walk_ptr++;
+
+ errno= 0;
memc_stat->rusage_system_seconds= strtoul(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
+
+ errno= 0;
memc_stat->rusage_system_microseconds= strtoul(walk_ptr, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("curr_items", key))
{
+ errno= 0;
memc_stat->curr_items= strtoul(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("total_items", key))
{
+ errno= 0;
memc_stat->total_items= strtoul(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("bytes_read", key))
{
+ errno= 0;
memc_stat->bytes_read= strtoull(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("bytes_written", key))
{
+ errno= 0;
memc_stat->bytes_written= strtoull(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("bytes", key))
{
+ errno= 0;
memc_stat->bytes= strtoull(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("curr_connections", key))
{
+ errno= 0;
memc_stat->curr_connections= strtoull(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("total_connections", key))
{
+ errno= 0;
memc_stat->total_connections= strtoull(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("connection_structures", key))
{
+ errno= 0;
memc_stat->connection_structures= strtoul(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("cmd_get", key))
{
+ errno= 0;
memc_stat->cmd_get= strtoull(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("cmd_set", key))
{
+ errno= 0;
memc_stat->cmd_set= strtoull(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("get_hits", key))
{
+ errno= 0;
memc_stat->get_hits= strtoull(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("get_misses", key))
{
+ errno= 0;
memc_stat->get_misses= strtoull(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("evictions", key))
{
+ errno= 0;
memc_stat->evictions= strtoull(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("limit_maxbytes", key))
{
+ errno= 0;
memc_stat->limit_maxbytes= strtoull(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
else if (not strcmp("threads", key))
{
+ errno= 0;
memc_stat->threads= strtoul(value, (char **)NULL, 10);
+ if (errno != 0)
+ {
+ return MEMCACHED_FAILURE;
+ }
}
- else if (not (strcmp("delete_misses", key) == 0 or /* New stats in the 1.3 beta */
- strcmp("delete_hits", key) == 0 or /* Just swallow them for now.. */
- strcmp("incr_misses", key) == 0 or
- strcmp("incr_hits", key) == 0 or
- strcmp("decr_misses", key) == 0 or
- strcmp("decr_hits", key) == 0 or
- strcmp("cas_misses", key) == 0 or
- strcmp("cas_hits", key) == 0 or
- strcmp("cas_badval", key) == 0 or
- strcmp("cmd_flush", key) == 0 or
- strcmp("accepting_conns", key) == 0 or
- strcmp("listen_disabled_num", key) == 0 or
- strcmp("conn_yields", key) == 0 or
- strcmp("auth_cmds", key) == 0 or
- strcmp("auth_errors", key) == 0 or
- strcmp("reclaimed", key) == 0))
+ else if ((strcmp("delete_misses", key) == 0 or /* New stats in the 1.3 beta */
+ strcmp("delete_hits", key) == 0 or /* Just swallow them for now.. */
+ strcmp("incr_misses", key) == 0 or
+ strcmp("incr_hits", key) == 0 or
+ strcmp("decr_misses", key) == 0 or
+ strcmp("decr_hits", key) == 0 or
+ strcmp("cas_misses", key) == 0 or
+ strcmp("cas_hits", key) == 0 or
+ strcmp("cas_badval", key) == 0 or
+ strcmp("cmd_flush", key) == 0 or
+ strcmp("accepting_conns", key) == 0 or
+ strcmp("listen_disabled_num", key) == 0 or
+ strcmp("conn_yields", key) == 0 or
+ strcmp("auth_cmds", key) == 0 or
+ strcmp("auth_errors", key) == 0 or
+ strcmp("reclaimed", key) == 0) == 0)
{
WATCHPOINT_STRING(key);
/* return MEMCACHED_UNKNOWN_STAT_KEY; */
@@ -358,7 +477,7 @@ char *memcached_stat_get_value(const memcached_st *, memcached_stat_st *memc_sta
static memcached_return_t binary_stats_fetch(memcached_stat_st *memc_stat,
const char *args,
const size_t args_length,
- org::libmemcached::Instance* instance,
+ memcached_instance_st* instance,
struct local_context *check)
{
char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
@@ -448,7 +567,7 @@ static memcached_return_t binary_stats_fetch(memcached_stat_st *memc_stat,
static memcached_return_t ascii_stats_fetch(memcached_stat_st *memc_stat,
const char *args,
const size_t args_length,
- org::libmemcached::Instance* instance,
+ memcached_instance_st* instance,
struct local_context *check)
{
libmemcached_io_vector_st vector[]=
@@ -565,7 +684,7 @@ memcached_stat_st *memcached_stat(memcached_st *shell, char *args, memcached_ret
stat_instance->pid= -1;
stat_instance->root= self;
- org::libmemcached::Instance* instance= memcached_instance_fetch(self, x);
+ memcached_instance_st* instance= memcached_instance_fetch(self, x);
memcached_return_t temp_return;
if (memcached_is_binary(self))
@@ -632,7 +751,7 @@ memcached_return_t memcached_stat_servername(memcached_stat_st *memc_stat, char
if (memcached_success(rc))
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc_ptr, 0);
+ memcached_instance_st* instance= memcached_instance_fetch(memc_ptr, 0);
if (memc.flags.binary_protocol)
{
rc= binary_stats_fetch(memc_stat, args, args_length, instance, NULL);
@@ -694,7 +813,7 @@ void memcached_stat_free(const memcached_st *, memcached_stat_st *memc_stat)
}
static memcached_return_t call_stat_fn(memcached_st *memc,
- org::libmemcached::Instance* instance,
+ memcached_instance_st* instance,
void *context)
{
if (memc)
diff --git a/libmemcached/storage.cc b/libmemcached/storage.cc
index 558d2ed5..80b5a7f1 100644
--- a/libmemcached/storage.cc
+++ b/libmemcached/storage.cc
@@ -139,7 +139,7 @@ static inline uint8_t get_com_code(const memcached_storage_action_t verb, const
}
static memcached_return_t memcached_send_binary(Memcached *ptr,
- org::libmemcached::Instance* server,
+ memcached_instance_st* server,
uint32_t server_key,
const char *key,
const size_t key_length,
@@ -218,7 +218,7 @@ static memcached_return_t memcached_send_binary(Memcached *ptr,
server_key= 0;
}
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, server_key);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, server_key);
if (memcached_vdo(instance, vector, 5, false) != MEMCACHED_SUCCESS)
{
@@ -246,7 +246,7 @@ static memcached_return_t memcached_send_binary(Memcached *ptr,
}
static memcached_return_t memcached_send_ascii(Memcached *ptr,
- org::libmemcached::Instance* instance,
+ memcached_instance_st* instance,
const char *key,
const size_t key_length,
const char *value,
@@ -373,7 +373,7 @@ static inline memcached_return_t memcached_send(memcached_st *shell,
}
uint32_t server_key= memcached_generate_hash_with_redistribution(ptr, group_key, group_key_length);
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, server_key);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, server_key);
WATCHPOINT_SET(instance->io_wait_count.read= 0);
WATCHPOINT_SET(instance->io_wait_count.write= 0);
diff --git a/libmemcached/touch.cc b/libmemcached/touch.cc
index 0c24aed1..1f793c55 100644
--- a/libmemcached/touch.cc
+++ b/libmemcached/touch.cc
@@ -38,7 +38,7 @@
#include <libmemcached/common.h>
#include <libmemcached/memcached/protocol_binary.h>
-static memcached_return_t ascii_touch(org::libmemcached::Instance* instance,
+static memcached_return_t ascii_touch(memcached_instance_st* instance,
const char *key, size_t key_length,
time_t expiration)
{
@@ -70,7 +70,7 @@ static memcached_return_t ascii_touch(org::libmemcached::Instance* instance,
return rc;
}
-static memcached_return_t binary_touch(org::libmemcached::Instance* instance,
+static memcached_return_t binary_touch(memcached_instance_st* instance,
const char *key, size_t key_length,
time_t expiration)
{
@@ -130,7 +130,7 @@ memcached_return_t memcached_touch_by_key(memcached_st *shell,
}
uint32_t server_key= memcached_generate_hash_with_redistribution(ptr, group_key, group_key_length);
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, server_key);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, server_key);
if (ptr->flags.binary_protocol)
{
diff --git a/libmemcached/udp.cc b/libmemcached/udp.cc
index 923e2734..5d21f9ff 100644
--- a/libmemcached/udp.cc
+++ b/libmemcached/udp.cc
@@ -48,7 +48,7 @@
* extracts the message number from message_id, increments it and then
* writes the new value back into the header
*/
-void increment_udp_message_id(org::libmemcached::Instance* ptr)
+void increment_udp_message_id(memcached_instance_st* ptr)
{
struct udp_datagram_header_st *header= (struct udp_datagram_header_st *)ptr->write_buffer;
uint16_t cur_req= get_udp_datagram_request_id(header);
@@ -61,7 +61,7 @@ void increment_udp_message_id(org::libmemcached::Instance* ptr)
header->request_id= htons((uint16_t) (thread_id | msg_num));
}
-bool memcached_io_init_udp_header(org::libmemcached::Instance* ptr, const uint16_t thread_id)
+bool memcached_io_init_udp_header(memcached_instance_st* ptr, const uint16_t thread_id)
{
if (thread_id > UDP_REQUEST_ID_MAX_THREAD_ID)
{
diff --git a/libmemcached/udp.hpp b/libmemcached/udp.hpp
index b2d2e9e9..7442c597 100644
--- a/libmemcached/udp.hpp
+++ b/libmemcached/udp.hpp
@@ -55,5 +55,5 @@ struct udp_datagram_header_st
uint16_t reserved;
};
-bool memcached_io_init_udp_header(org::libmemcached::Instance*, const uint16_t thread_id);
-void increment_udp_message_id(org::libmemcached::Instance*);
+bool memcached_io_init_udp_header(memcached_instance_st*, const uint16_t thread_id);
+void increment_udp_message_id(memcached_instance_st*);
diff --git a/libmemcached/verbosity.cc b/libmemcached/verbosity.cc
index 7f3a16e4..ed0e2440 100644
--- a/libmemcached/verbosity.cc
+++ b/libmemcached/verbosity.cc
@@ -44,7 +44,7 @@ struct context_st
};
static memcached_return_t _set_verbosity(const Memcached *,
- const memcached_server_instance_st server,
+ const memcached_instance_st * server,
void *context)
{
libmemcached_io_vector_st *vector= (libmemcached_io_vector_st *)context;
@@ -56,7 +56,7 @@ static memcached_return_t _set_verbosity(const Memcached *,
if (rc == MEMCACHED_SUCCESS)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc_ptr, 0);
+ memcached_instance_st* instance= memcached_instance_fetch(memc_ptr, 0);
rc= memcached_vdo(instance, vector, 4, true);
diff --git a/libmemcached/version.cc b/libmemcached/version.cc
index bbe46cc5..5f074912 100644
--- a/libmemcached/version.cc
+++ b/libmemcached/version.cc
@@ -52,7 +52,7 @@ static inline memcached_return_t memcached_version_textual(Memcached *memc)
bool errors_happened= false;
for (uint32_t x= 0; x < memcached_server_count(memc); x++)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc, x);
+ memcached_instance_st* instance= memcached_instance_fetch(memc, x);
// Optimization, we only fetch version once.
if (instance->major_version != UINT8_MAX)
@@ -73,7 +73,7 @@ static inline memcached_return_t memcached_version_textual(Memcached *memc)
if (success)
{
// Collect the returned items
- org::libmemcached::Instance* instance;
+ memcached_instance_st* instance;
memcached_return_t readable_error;
while ((instance= memcached_io_get_readable_server(memc, readable_error)))
{
@@ -105,7 +105,7 @@ static inline memcached_return_t memcached_version_binary(Memcached *memc)
bool errors_happened= false;
for (uint32_t x= 0; x < memcached_server_count(memc); x++)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(memc, x);
+ memcached_instance_st* instance= memcached_instance_fetch(memc, x);
initialize_binary_request(instance, request.message.header);
@@ -128,7 +128,7 @@ static inline memcached_return_t memcached_version_binary(Memcached *memc)
if (success)
{
// Collect the returned items
- org::libmemcached::Instance* instance;
+ memcached_instance_st* instance;
memcached_return_t readable_error;
while ((instance= memcached_io_get_readable_server(memc, readable_error)))
{
@@ -145,7 +145,7 @@ static inline memcached_return_t memcached_version_binary(Memcached *memc)
return errors_happened ? MEMCACHED_SOME_ERRORS : MEMCACHED_SUCCESS;
}
-static inline void version_ascii_instance(org::libmemcached::Instance* instance)
+static inline void version_ascii_instance(memcached_instance_st* instance)
{
if (instance->major_version != UINT8_MAX)
{
@@ -158,7 +158,7 @@ static inline void version_ascii_instance(org::libmemcached::Instance* instance)
}
}
-static inline void version_binary_instance(org::libmemcached::Instance* instance)
+static inline void version_binary_instance(memcached_instance_st* instance)
{
if (instance->major_version != UINT8_MAX)
{
@@ -178,7 +178,7 @@ static inline void version_binary_instance(org::libmemcached::Instance* instance
}
}
-void memcached_version_instance(org::libmemcached::Instance* instance)
+void memcached_version_instance(memcached_instance_st* instance)
{
if (instance)
{
diff --git a/libmemcached/version.hpp b/libmemcached/version.hpp
index b4a8234b..f420a262 100644
--- a/libmemcached/version.hpp
+++ b/libmemcached/version.hpp
@@ -41,4 +41,4 @@
#pragma once
-void memcached_version_instance(org::libmemcached::Instance*);
+void memcached_version_instance(memcached_instance_st*);
diff --git a/libmemcached/windows.hpp b/libmemcached/windows.hpp
new file mode 100644
index 00000000..40564b1d
--- /dev/null
+++ b/libmemcached/windows.hpp
@@ -0,0 +1,125 @@
+/*
+ * Libmemcached library
+ *
+ * Copyright (C) 2012 Data Differential, http://datadifferential.com/
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * * The names of its contributors may not be used to endorse or
+ * promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#pragma once
+
+#ifdef __cplusplus
+# include <cerrno>
+#else
+# include <errno.h>
+#endif
+
+#ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+
+#ifndef _WIN32_WINNT
+# define _WIN32_WINNT 0x0501
+#endif
+
+#ifdef __MINGW32__
+# if(_WIN32_WINNT >= 0x0501)
+# else
+# undef _WIN32_WINNT
+# define _WIN32_WINNT 0x0501
+# endif /* _WIN32_WINNT >= 0x0501 */
+#endif /* __MINGW32__ */
+
+#if defined(HAVE_WINSOCK2_H) && HAVE_WINSOCK2_H
+# include <winsock2.h>
+#endif
+
+#if defined(HAVE_WS2TCPIP_H) && HAVE_WS2TCPIP_H
+# include <ws2tcpip.h>
+#endif
+
+#if defined(HAVE_IO_H) && HAVE_IO_H
+# include <io.h>
+#endif
+
+struct sockaddr_un
+{
+ short int sun_family;
+ char sun_path[108];
+};
+
+static inline int translate_windows_error()
+{
+ int local_errno= WSAGetLastError();
+
+ switch(local_errno) {
+ case WSAEINVAL:
+ local_errno= EINPROGRESS;
+ break;
+ case WSAEALREADY:
+ case WSAEWOULDBLOCK:
+ local_errno= EAGAIN;
+ break;
+
+ case WSAECONNREFUSED:
+ local_errno= ECONNREFUSED;
+ break;
+
+ case WSAENETUNREACH:
+ local_errno= ENETUNREACH;
+ break;
+
+ case WSAETIMEDOUT:
+ local_errno= ETIMEDOUT;
+ break;
+
+ case WSAECONNRESET:
+ local_errno= ECONNRESET;
+ break;
+
+ case WSAEADDRINUSE:
+ local_errno= EADDRINUSE;
+ break;
+
+ case WSAEOPNOTSUPP:
+ local_errno= EOPNOTSUPP;
+ break;
+
+ case WSAENOPROTOOPT:
+ local_errno= ENOPROTOOPT;
+ break;
+
+ default:
+ break;
+ }
+
+ return local_errno;
+}
diff --git a/libmemcachedutil-1.2/pid.h b/libmemcachedutil-1.2/pid.h
index 01738acc..3ce0131c 100644
--- a/libmemcachedutil-1.2/pid.h
+++ b/libmemcachedutil-1.2/pid.h
@@ -36,8 +36,8 @@
#pragma once
-#ifndef WIN32
-#include <netdb.h>
+#ifndef _WIN32
+# include <netdb.h>
#endif
#include <sys/types.h>
diff --git a/libmemcachedutil/pid.cc b/libmemcachedutil/pid.cc
index 51948383..34656118 100644
--- a/libmemcachedutil/pid.cc
+++ b/libmemcachedutil/pid.cc
@@ -74,7 +74,7 @@ pid_t libmemcached_util_getpid(const char *hostname, in_port_t port, memcached_r
}
else if (rc == MEMCACHED_SOME_ERRORS) // Generic answer, we will now find the specific reason (if one exists)
{
- memcached_server_instance_st instance= memcached_server_instance_by_position(memc_ptr, 0);
+ const memcached_instance_st * instance= memcached_server_instance_by_position(memc_ptr, 0);
assert_msg(instance and memcached_server_error(instance), " ");
if (instance and memcached_server_error(instance))
@@ -139,7 +139,7 @@ pid_t libmemcached_util_getpid2(const char *hostname, in_port_t port, const char
}
else if (rc == MEMCACHED_SOME_ERRORS) // Generic answer, we will now find the specific reason (if one exists)
{
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc_ptr, 0);
#if 0
diff --git a/libmemcachedutil/ping.cc b/libmemcachedutil/ping.cc
index e2831beb..a867c56b 100644
--- a/libmemcachedutil/ping.cc
+++ b/libmemcachedutil/ping.cc
@@ -64,7 +64,7 @@ bool libmemcached_util_ping(const char *hostname, in_port_t port, memcached_retu
if (memcached_failed(rc) and rc == MEMCACHED_SOME_ERRORS)
{
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc_ptr, 0);
assert_msg(instance and memcached_server_error(instance), " ");
@@ -119,7 +119,7 @@ bool libmemcached_util_ping2(const char *hostname, in_port_t port, const char *u
if (memcached_failed(rc) and rc == MEMCACHED_SOME_ERRORS)
{
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc_ptr, 0);
assert_msg(instance and memcached_server_error(instance), " ");
diff --git a/libmemcachedutil/version.cc b/libmemcachedutil/version.cc
index 9674c059..0fcfb5c5 100644
--- a/libmemcachedutil/version.cc
+++ b/libmemcachedutil/version.cc
@@ -49,7 +49,7 @@ struct local_context
};
static memcached_return_t check_server_version(const memcached_st *,
- memcached_server_instance_st instance,
+ const memcached_instance_st * instance,
void *context)
{
/* Do Nothing */
diff --git a/libtest/alarm.cc b/libtest/alarm.cc
index a8bf17e8..6193fbb3 100644
--- a/libtest/alarm.cc
+++ b/libtest/alarm.cc
@@ -76,7 +76,7 @@ void set_alarm(long tv_sec, long tv_usec)
}
}
-#if defined(TARGET_OS_OSX) && TARGET_OS_OSX
+#ifdef __APPLE__
struct timeval it_value= { time_t(tv_sec), suseconds_t(tv_usec) };
#else
struct timeval it_value= { tv_sec, tv_usec };
diff --git a/libtest/common.h b/libtest/common.h
index 7be0221c..b611e1a9 100644
--- a/libtest/common.h
+++ b/libtest/common.h
@@ -69,7 +69,7 @@
# include <arpa/inet.h>
#endif
-#if defined(WIN32) || defined(__MINGW32__)
+#if defined(_WIN32)
# include "win32/wrappers.h"
# define get_socket_errno() WSAGetLastError()
#else
diff --git a/libtest/dream.cc b/libtest/dream.cc
index 114ac672..cd7d6aa6 100644
--- a/libtest/dream.cc
+++ b/libtest/dream.cc
@@ -41,7 +41,7 @@ namespace libtest {
void dream(time_t tv_sec, long tv_nsec)
{
-#ifdef WIN32
+#if defined(_WIN32)
if (tv_sec == 0 and tv_nsec)
{
tv_sec++;
diff --git a/libtest/lite.h b/libtest/lite.h
index 52e96380..70aee2b0 100644
--- a/libtest/lite.h
+++ b/libtest/lite.h
@@ -51,7 +51,7 @@
# include <string.h>
#endif
-#ifdef _WIN32
+#if defined(_WIN32)
# include <malloc.h>
#else
# include <alloca.h>
@@ -348,7 +348,7 @@ do \
} \
} while (0)
-#define ASSERT_NEQ(__expected, __actual, ...) \
+#define ASSERT_NEQ(__expected, __actual) \
do \
{ \
if ((__expected) == (__actual)) { \
diff --git a/libtest/m4/memcached.m4 b/libtest/m4/memcached.m4
deleted file mode 100644
index 0fece500..00000000
--- a/libtest/m4/memcached.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-#serial 2
-
-AC_DEFUN([YATL_MEMCACHED],
- [AX_WITH_PROG(MEMCACHED_BINARY, [memcached])
- AS_IF([test -f "$ac_cv_path_MEMCACHED_BINARY"],
- [AC_DEFINE([HAVE_MEMCACHED_BINARY], [1], [If Memcached binary is available])
- AC_DEFINE_UNQUOTED([MEMCACHED_BINARY], "$ac_cv_path_MEMCACHED_BINARY", [Name of the memcached binary used in make test])],
- [AC_DEFINE([HAVE_MEMCACHED_BINARY], [1], [If Memcached binary is available])
- AC_DEFINE([MEMCACHED_BINARY], ["memcached/memcached"], [Name of the memcached binary used in make test])
- ])
- ])
diff --git a/libtest/main.cc b/libtest/main.cc
index fe8938b9..80ffa769 100644
--- a/libtest/main.cc
+++ b/libtest/main.cc
@@ -158,7 +158,14 @@ int main(int argc, char *argv[])
break;
case OPT_LIBYATL_REPEAT:
+ errno= 0;
opt_repeat= strtoul(optarg, (char **) NULL, 10);
+ if (errno != 0)
+ {
+ Error << "unknown value passed to --repeat: `" << optarg << "`";
+ exit(EXIT_FAILURE);
+ }
+
break;
case OPT_LIBYATL_MATCH_COLLECTION:
@@ -186,9 +193,16 @@ int main(int argc, char *argv[])
srandom((unsigned int)time(NULL));
- if (bool(getenv("YATL_REPEAT")) and (strtoul(getenv("YATL_REPEAT"), (char **) NULL, 10) > 1))
+ errno= 0;
+ if (bool(getenv("YATL_REPEAT")))
{
+ errno= 0;
opt_repeat= strtoul(getenv("YATL_REPEAT"), (char **) NULL, 10);
+ if (errno != 0)
+ {
+ Error << "ENV YATL_REPEAT passed an invalid value: `" << getenv("YATL_REPEAT") << "`";
+ exit(EXIT_FAILURE);
+ }
}
if ((bool(getenv("YATL_QUIET")) and (strcmp(getenv("YATL_QUIET"), "0") == 0)) or opt_quiet)
diff --git a/libtest/memcached.hpp b/libtest/memcached.hpp
index e0e14851..142f167c 100644
--- a/libtest/memcached.hpp
+++ b/libtest/memcached.hpp
@@ -39,7 +39,7 @@
#if defined(HAVE_LIBMEMCACHED) && HAVE_LIBMEMCACHED
inline bool operator== (const memcached_st& memc, const memcached_return_t rc)
{
- if (memcached_last_error(const_cast<memcached_st *>(&memc)) == rc)
+ if (memcached_last_error(&memc) == rc)
{
return true;
}
@@ -47,7 +47,7 @@ inline bool operator== (const memcached_st& memc, const memcached_return_t rc)
return false;
}
-inline bool operator!= (const memcached_st& memc, const memcached_return_t rc)
+inline bool operator!= (const memcached_st& memc, memcached_return_t rc)
{
if (memcached_last_error(const_cast<memcached_st *>(&memc)) != rc)
{
@@ -57,7 +57,27 @@ inline bool operator!= (const memcached_st& memc, const memcached_return_t rc)
return false;
}
-inline bool operator!= (const memcached_return_t rc, const memcached_st& memc)
+inline bool operator== (memcached_st* const memc, memcached_return_t rc)
+{
+ if (memcached_last_error(memc) == rc)
+ {
+ return true;
+ }
+
+ return false;
+}
+
+inline bool operator!= (memcached_st* const memc, memcached_return_t rc)
+{
+ if (memcached_last_error(memc) != rc)
+ {
+ return true;
+ }
+
+ return false;
+}
+
+inline bool operator!= (memcached_return_t rc, const memcached_st& memc)
{
if (memcached_last_error(const_cast<memcached_st *>(&memc)) != rc)
{
@@ -66,5 +86,15 @@ inline bool operator!= (const memcached_return_t rc, const memcached_st& memc)
return false;
}
+
+inline bool operator!= (memcached_return_t rc, memcached_st* const memc)
+{
+ if (memcached_last_error(memc) != rc)
+ {
+ return true;
+ }
+
+ return false;
+}
#endif
diff --git a/libtest/unittest.cc b/libtest/unittest.cc
index b96fea06..c7be63fa 100644
--- a/libtest/unittest.cc
+++ b/libtest/unittest.cc
@@ -184,11 +184,11 @@ static test_return_t test_throw_fail_TEST(void *)
static test_return_t ASSERT_FALSE__TEST(void *)
{
try {
- ASSERT_FALSE_(true, __func__);
+ ASSERT_FALSE(true);
}
catch (const libtest::__failure& e)
{
- ASSERT_STREQ(e.what(), "Assertion '!true' [ ASSERT_FALSE__TEST ]");
+ ASSERT_STREQ(e.what(), "Assertion '!true'");
return TEST_SUCCESS;
}
catch (...)
@@ -199,6 +199,31 @@ static test_return_t ASSERT_FALSE__TEST(void *)
return TEST_FAILURE;
}
+static test_return_t ASSERT_NEQ_FAIL_TEST(void *)
+{
+ try {
+ ASSERT_NEQ(1,1);
+ }
+ catch (const libtest::__failure& e)
+ {
+ ASSERT_STREQ(e.what(), "Assertion '1' == '1'");
+ return TEST_SUCCESS;
+ }
+ catch (...)
+ {
+ return TEST_FAILURE;
+ }
+
+ return TEST_FAILURE;
+}
+
+static test_return_t ASSERT_NEQ_TEST(void *)
+{
+ ASSERT_NEQ(1,0);
+
+ return TEST_SUCCESS;
+}
+
static test_return_t ASSERT_FALSE_TEST(void *)
{
try {
@@ -1012,6 +1037,8 @@ test_st tests_log[] ={
{"FAIL", false, test_throw_fail_TEST },
{"ASSERT_FALSE_", false, ASSERT_FALSE__TEST },
{"ASSERT_FALSE", false, ASSERT_FALSE_TEST },
+ {"ASSERT_NEQ", false, ASSERT_NEQ_TEST },
+ {"ASSERT_NEQ FAIL", false, ASSERT_NEQ_FAIL_TEST },
{0, 0, 0}
};
diff --git a/libtest/yatl.m4 b/libtest/yatl.m4
index 4415863f..61d1a2f0 100644
--- a/libtest/yatl.m4
+++ b/libtest/yatl.m4
@@ -7,10 +7,8 @@ AC_SUBST([LIBTEST_VERSION],[1.0])
AC_CONFIG_FILES([libtest/version.h])
m4_include([libtest/m4/mysql.m4])
-m4_include([libtest/m4/memcached.m4])
AC_DEFINE([HAVE_MEMCACHED_SASL_BINARY],[0],[If Memcached binary with sasl support is available])
YATL_MYSQL
-YATL_MEMCACHED
AC_CONFIG_FILES([libtest/yatlcon.h])
diff --git a/m4/ax_harden_compiler_flags.m4 b/m4/ax_harden_compiler_flags.m4
index b31518aa..2daeb1a1 100644
--- a/m4/ax_harden_compiler_flags.m4
+++ b/m4/ax_harden_compiler_flags.m4
@@ -1,3 +1,4 @@
+# vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
# ===========================================================================
# https://github.com/BrianAker/ddm4/
# ===========================================================================
@@ -52,7 +53,7 @@
# ? _APPEND_COMPILE_FLAGS_ERROR([-Wlong-long]) -- Don't turn on for
# compatibility issues memcached_stat_st
-#serial 7
+#serial 8
AC_DEFUN([_WARNINGS_AS_ERRORS],
[AC_CACHE_CHECK([if all warnings into errors],[ac_cv_warnings_as_errors],
@@ -75,10 +76,12 @@ AC_DEFUN([_APPEND_COMPILE_FLAGS_ERROR],
# Everything above this does the heavy lifting, while what follows does the specifics.
AC_DEFUN([_HARDEN_LINKER_FLAGS],
- [_APPEND_LINK_FLAGS_ERROR([-z relro -z now])
- #_APPEND_LINK_FLAGS_ERROR([-pie])
- AS_IF([test "x$ac_cv_warnings_as_errors" = xyes],
- [AX_APPEND_LINK_FLAGS([-Werror])])
+ [
+ AS_IF([test "$CC" != "clang"],
+ [_APPEND_LINK_FLAGS_ERROR([-z relro -z now])
+#_APPEND_LINK_FLAGS_ERROR([-pie])
+ AS_IF([test "x$ac_cv_warnings_as_errors" = xyes],
+ [AX_APPEND_LINK_FLAGS([-Werror])])])
])
AC_DEFUN([_HARDEN_CC_COMPILER_FLAGS],
@@ -86,6 +89,7 @@ AC_DEFUN([_HARDEN_CC_COMPILER_FLAGS],
AS_IF([test "x$ax_enable_debug" = xyes],
[CFLAGS=''
+ _APPEND_COMPILE_FLAGS_ERROR([-H])
_APPEND_COMPILE_FLAGS_ERROR([-ggdb])
_APPEND_COMPILE_FLAGS_ERROR([-g])
_APPEND_COMPILE_FLAGS_ERROR([-O0])],
@@ -93,19 +97,26 @@ AC_DEFUN([_HARDEN_CC_COMPILER_FLAGS],
_APPEND_COMPILE_FLAGS_ERROR([-O2])])
AS_IF([test "x$ac_cv_vcs_checkout" = xyes],
- [_APPEND_COMPILE_FLAGS_ERROR([-fstack-check])],
- [_APPEND_COMPILE_FLAGS_ERROR([-Wno-pragmas])])
+ [_APPEND_COMPILE_FLAGS_ERROR([-fstack-check])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wpragmas])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wunknown-pragmas])],
+ [_APPEND_COMPILE_FLAGS_ERROR([-Wno-unknown-pragmas])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wno-pragmas])])
+
+ AS_IF([test "$CC" = "clang"],
+ [_APPEND_COMPILE_FLAGS_ERROR([-Qunused-arguments])])
_APPEND_COMPILE_FLAGS_ERROR([-Wall])
_APPEND_COMPILE_FLAGS_ERROR([-Wextra])
- _APPEND_COMPILE_FLAGS_ERROR([-Wunknown-pragmas])
_APPEND_COMPILE_FLAGS_ERROR([-Wthis-test-should-fail])
_APPEND_COMPILE_FLAGS_ERROR([-std=c99])
# Anything below this comment please keep sorted.
- _APPEND_COMPILE_FLAGS_ERROR([--param=ssp-buffer-size=1])
# _APPEND_COMPILE_FLAGS_ERROR([-Wmissing-format-attribute])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wunsuffixed-float-constants])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wjump-misses-init])
_APPEND_COMPILE_FLAGS_ERROR([-Wno-attributes])
_APPEND_COMPILE_FLAGS_ERROR([-Waddress])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wvarargs])
_APPEND_COMPILE_FLAGS_ERROR([-Warray-bounds])
_APPEND_COMPILE_FLAGS_ERROR([-Wbad-function-cast])
# Not in use -Wc++-compat
@@ -114,6 +125,7 @@ AC_DEFUN([_HARDEN_CC_COMPILER_FLAGS],
_APPEND_COMPILE_FLAGS_ERROR([-Wfloat-equal])
_APPEND_COMPILE_FLAGS_ERROR([-Wformat-security])
_APPEND_COMPILE_FLAGS_ERROR([-Wformat=2])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wformat-y2k])
_APPEND_COMPILE_FLAGS_ERROR([-Wlogical-op])
_APPEND_COMPILE_FLAGS_ERROR([-Wmaybe-uninitialized])
_APPEND_COMPILE_FLAGS_ERROR([-Wmissing-field-initializers])
@@ -123,7 +135,6 @@ AC_DEFUN([_HARDEN_CC_COMPILER_FLAGS],
_APPEND_COMPILE_FLAGS_ERROR([-Wmissing-prototypes])
_APPEND_COMPILE_FLAGS_ERROR([-Wnested-externs])
_APPEND_COMPILE_FLAGS_ERROR([-Wnormalized=id])
- _APPEND_COMPILE_FLAGS_ERROR([-Wold-style-definition])
_APPEND_COMPILE_FLAGS_ERROR([-Woverride-init])
_APPEND_COMPILE_FLAGS_ERROR([-Wpointer-arith])
_APPEND_COMPILE_FLAGS_ERROR([-Wpointer-sign])
@@ -140,10 +151,36 @@ AC_DEFUN([_HARDEN_CC_COMPILER_FLAGS],
_APPEND_COMPILE_FLAGS_ERROR([-Wstrict-overflow=1])
_APPEND_COMPILE_FLAGS_ERROR([-Wstrict-prototypes])
_APPEND_COMPILE_FLAGS_ERROR([-Wswitch-enum])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wtrampolines])
_APPEND_COMPILE_FLAGS_ERROR([-Wundef])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wunsafe-loop-optimizations])
+ _APPEND_COMPILE_FLAGS_ERROR([-funsafe-loop-optimizations])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=address])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=integer])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=thread])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=memory])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=alignment])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=bool])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=bounds])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=enum])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=float-cast-overflow])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=float-divide-by-zero])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=integer-divide-by-zero])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=null])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=object-size])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=return])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=shift])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=signed-integer-overflow])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=unreachable])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=unsigned-integer-overflow])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=vla-bound])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=vptr])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wclobbered])
_APPEND_COMPILE_FLAGS_ERROR([-Wunused])
_APPEND_COMPILE_FLAGS_ERROR([-Wunused-result])
_APPEND_COMPILE_FLAGS_ERROR([-Wunused-variable])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wunused-parameter])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wunused-local-typedefs])
_APPEND_COMPILE_FLAGS_ERROR([-Wwrite-strings])
_APPEND_COMPILE_FLAGS_ERROR([-floop-parallelize-all])
_APPEND_COMPILE_FLAGS_ERROR([-fwrapv])
@@ -157,6 +194,7 @@ AC_DEFUN([_HARDEN_CC_COMPILER_FLAGS],
[_APPEND_COMPILE_FLAGS_ERROR([-D_FORTIFY_SOURCE=2])
#_APPEND_COMPILE_FLAGS_ERROR([-Wstack-protector])
#_APPEND_COMPILE_FLAGS_ERROR([-fstack-protector])
+ #_APPEND_COMPILE_FLAGS_ERROR([--param=ssp-buffer-size=1])
_APPEND_COMPILE_FLAGS_ERROR([-fstack-protector-all])
])])])])
@@ -172,6 +210,7 @@ AC_DEFUN([_HARDEN_CXX_COMPILER_FLAGS],
AS_IF([test "x$ax_enable_debug" = xyes],
[CXXFLAGS=''
+ _APPEND_COMPILE_FLAGS_ERROR([-H])
_APPEND_COMPILE_FLAGS_ERROR([-ggdb])
_APPEND_COMPILE_FLAGS_ERROR([-g])
_APPEND_COMPILE_FLAGS_ERROR([-O0])],
@@ -179,17 +218,22 @@ AC_DEFUN([_HARDEN_CXX_COMPILER_FLAGS],
_APPEND_COMPILE_FLAGS_ERROR([-O2])])
AS_IF([test "x$ac_cv_vcs_checkout" = xyes],
- [_APPEND_COMPILE_FLAGS_ERROR([-fstack-check])],
- [_APPEND_COMPILE_FLAGS_ERROR([-Wno-pragmas])])
+ [_APPEND_COMPILE_FLAGS_ERROR([-fstack-check])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wpragmas])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wunknown-pragmas])],
+ [_APPEND_COMPILE_FLAGS_ERROR([-Wno-unknown-pragmas])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wno-pragmas])])
+
+ AS_IF([test "$CXX" = "clang++"],
+ [_APPEND_COMPILE_FLAGS_ERROR([-Qunused-arguments])])
_APPEND_COMPILE_FLAGS_ERROR([-Wall])
_APPEND_COMPILE_FLAGS_ERROR([-Wextra])
- _APPEND_COMPILE_FLAGS_ERROR([-Wunknown-pragmas])
_APPEND_COMPILE_FLAGS_ERROR([-Wthis-test-should-fail])
# Anything below this comment please keep sorted.
- _APPEND_COMPILE_FLAGS_ERROR([--param=ssp-buffer-size=1])
# _APPEND_COMPILE_FLAGS_ERROR([-Wmissing-format-attribute])
_APPEND_COMPILE_FLAGS_ERROR([-Wno-attributes])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wvarargs])
_APPEND_COMPILE_FLAGS_ERROR([-Waddress])
_APPEND_COMPILE_FLAGS_ERROR([-Warray-bounds])
_APPEND_COMPILE_FLAGS_ERROR([-Wchar-subscripts])
@@ -197,6 +241,7 @@ AC_DEFUN([_HARDEN_CXX_COMPILER_FLAGS],
_APPEND_COMPILE_FLAGS_ERROR([-Wctor-dtor-privacy])
_APPEND_COMPILE_FLAGS_ERROR([-Wfloat-equal])
_APPEND_COMPILE_FLAGS_ERROR([-Wformat=2])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wformat-y2k])
_APPEND_COMPILE_FLAGS_ERROR([-Wmaybe-uninitialized])
_APPEND_COMPILE_FLAGS_ERROR([-Wmissing-field-initializers])
_APPEND_COMPILE_FLAGS_ERROR([-Wlogical-op])
@@ -217,11 +262,39 @@ AC_DEFUN([_HARDEN_CXX_COMPILER_FLAGS],
_APPEND_COMPILE_FLAGS_ERROR([-Wsign-compare])
_APPEND_COMPILE_FLAGS_ERROR([-Wstrict-overflow=1])
_APPEND_COMPILE_FLAGS_ERROR([-Wswitch-enum])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wtrampolines])
_APPEND_COMPILE_FLAGS_ERROR([-Wundef])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wunsafe-loop-optimizations])
+ _APPEND_COMPILE_FLAGS_ERROR([-funsafe-loop-optimizations])
_APPEND_COMPILE_FLAGS_ERROR([-Wc++11-compat])
+# _APPEND_COMPILE_FLAGS_ERROR([-Weffc++])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=address])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=integer])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=thread])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=memory])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=alignment])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=bool])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=bounds])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=enum])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=float-cast-overflow])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=float-divide-by-zero])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=integer-divide-by-zero])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=null])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=object-size])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=return])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=shift])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=signed-integer-overflow])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=unreachable])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=unsigned-integer-overflow])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=vla-bound])
+ _APPEND_COMPILE_FLAGS_ERROR([-fsanitize=vptr])
+# _APPEND_COMPILE_FLAGS_ERROR([-Wold-style-cast])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wclobbered])
_APPEND_COMPILE_FLAGS_ERROR([-Wunused])
_APPEND_COMPILE_FLAGS_ERROR([-Wunused-result])
_APPEND_COMPILE_FLAGS_ERROR([-Wunused-variable])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wunused-parameter])
+ _APPEND_COMPILE_FLAGS_ERROR([-Wunused-local-typedefs])
_APPEND_COMPILE_FLAGS_ERROR([-Wwrite-strings])
_APPEND_COMPILE_FLAGS_ERROR([-Wformat-security])
_APPEND_COMPILE_FLAGS_ERROR([-floop-parallelize-all])
@@ -236,6 +309,7 @@ AC_DEFUN([_HARDEN_CXX_COMPILER_FLAGS],
[_APPEND_COMPILE_FLAGS_ERROR([-D_FORTIFY_SOURCE=2])
#_APPEND_COMPILE_FLAGS_ERROR([-Wstack-protector])
#_APPEND_COMPILE_FLAGS_ERROR([-fstack-protector])
+ #_APPEND_COMPILE_FLAGS_ERROR([--param=ssp-buffer-size=1])
_APPEND_COMPILE_FLAGS_ERROR([-fstack-protector-all])
])])])])
diff --git a/m4/ax_libevent.m4 b/m4/ax_libevent.m4
index 686bff23..c576bad5 100644
--- a/m4/ax_libevent.m4
+++ b/m4/ax_libevent.m4
@@ -20,7 +20,7 @@
# and this notice are preserved. This file is offered as-is, without any
# warranty.
-#serial 4
+#serial 5
AC_DEFUN([AX_LIBEVENT],
[AC_PREREQ([2.63])dnl
@@ -28,15 +28,15 @@ AC_DEFUN([AX_LIBEVENT],
[AX_SAVE_FLAGS
LIBS="-levent $LIBS"
AC_LANG_PUSH([C])
- AC_RUN_IFELSE([AC_LANG_PROGRAM([
+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
#include <sys/types.h>
#include <sys/time.h>
#include <stdlib.h>
#include <event.h>
- ],[
+ ]],[[
struct event_base *tmp_event= event_init();
event_base_free(tmp_event);
- ])],
+ ]])],
[ax_cv_libevent=yes],
[ax_cv_libevent=no],
[AC_MSG_WARN([test program execution failed])])
@@ -62,15 +62,15 @@ AC_DEFUN([AX_LIBEVENT2],
[AX_SAVE_FLAGS
LIBS="-levent $LIBS"
AC_LANG_PUSH([C])
- AC_RUN_IFELSE([AC_LANG_PROGRAM([
+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
#include <sys/types.h>
#include <sys/time.h>
#include <stdlib.h>
#include <event2/event.h>
- ],[
- struct event_base *tmp_event= event_init();
- event_base_free(tmp_event);
- ])],
+ ]],[[
+ struct event_base *___event_base= event_base_new();
+ event_base_free(___event_base);
+ ]])],
[ax_cv_libevent2=yes],
[ax_cv_libevent2=no],
[AC_MSG_WARN([test program execution failed])])
@@ -97,16 +97,18 @@ AC_DEFUN([AX_LIBEVENT2_EVHTTP],
[AX_SAVE_FLAGS
LIBS="-levent $LIBS"
AC_LANG_PUSH([C])
- AC_RUN_IFELSE([AC_LANG_PROGRAM([
+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
#include <sys/types.h>
#include <sys/time.h>
#include <stdlib.h>
#include <event2/event.h>
#include <event2/http.h>
- ],[
- struct event_base *libbase= event_base_new();
- struct evhttp *libsrvr= evhttp_new(libbase);
- ])],
+ ]],[[
+ struct event_base *___event_base= event_base_new();
+ struct evhttp *___evhttp= evhttp_new(___event_base);
+ evhttp_free(___evhttp);
+ event_base_free(___event_base);
+ ]])],
[ax_cv_libevent2_evhttp=yes],
[ax_cv_libevent2_evhttp=no],
[AC_MSG_WARN([test program execution failed])])
diff --git a/m4/ax_memcached.m4 b/m4/ax_memcached.m4
new file mode 100644
index 00000000..21067c68
--- /dev/null
+++ b/m4/ax_memcached.m4
@@ -0,0 +1,58 @@
+# vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+# ===========================================================================
+# https://github.com/BrianAker/ddm4/
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_PROG_MEMCACHED
+#
+# DESCRIPTION
+#
+# Check for memcached and list version
+#
+# LICENSE
+#
+# Copyright (C) 2013 Brian Aker
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#
+# * The names of its contributors may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#serial 3
+
+AC_DEFUN([AX_PROG_MEMCACHED],
+ [AX_WITH_PROG([MEMCACHED_BINARY],[memcached])
+ AS_IF([test -f "$ac_cv_path_MEMCACHED_BINARY"],
+ [AC_DEFINE([HAVE_MEMCACHED_BINARY], [1], [If Memcached binary is available])
+ AC_DEFINE_UNQUOTED([MEMCACHED_BINARY],"$ac_cv_path_MEMCACHED_BINARY",[Name of the memcached binary used in make test])
+ ax_memcached_version=`$MEMCACHED_BINARY -h | sed 1q | awk '{print \$ 2 }' | sed 's|[\-a-z0-9]*$||' | awk -F. '{printf "%d.%d.%d", $[]1, $[]2, $[]3}'`
+ AC_MSG_RESULT([memcached version "$ax_memcached_version"])
+ AC_DEFINE_UNQUOTED([MEMCACHED_VERSION],"$ax_memcached_version",[Memcached binary version])
+ ])
+ ])
diff --git a/m4/ax_platform.m4 b/m4/ax_platform.m4
index 56472c72..01ff25d9 100644
--- a/m4/ax_platform.m4
+++ b/m4/ax_platform.m4
@@ -49,8 +49,7 @@
AC_DEFINE([__APPLE_CC__],[1],[Workaround for bug in FreeBSD headers])],
[*solaris*],[AC_DEFINE([TARGET_OS_SOLARIS],[1],[Whether we are building for Solaris])],
[*darwin*],
- [TARGET_OSX="true"
- AC_DEFINE([TARGET_OS_OSX],[1],[Whether we build for OSX])],
+ [TARGET_OSX="true"],
[*linux*],
[TARGET_LINUX="true"
AC_DEFINE([TARGET_OS_LINUX],[1],[Whether we build for Linux])])
diff --git a/man/include.am b/man/include.am
index 512edc40..3b68557a 100644
--- a/man/include.am
+++ b/man/include.am
@@ -15,7 +15,6 @@ BUILT_SOURCES+= $(dist_man_MANS)
endif
endif
-if HAVE_RECENT_SPHINX
dist_man_MANS+= man/memaslap.1
dist_man_MANS+= man/memcapable.1
dist_man_MANS+= man/memcat.1
@@ -134,4 +133,3 @@ dist_man_MANS+= man/memcached_touch.3
dist_man_MANS+= man/memcached_touch_by_key.3
dist_man_MANS+= man/memcached_verbosity.3
dist_man_MANS+= man/memcached_version.3
-endif
diff --git a/support/libmemcached.spec.in b/support/libmemcached.spec.in
index fe372404..f179a1f5 100644
--- a/support/libmemcached.spec.in
+++ b/support/libmemcached.spec.in
@@ -25,7 +25,6 @@ BuildRequires: glibc-devel
BuildRequires: glibc-headers
BuildRequires: grep
BuildRequires: gzip
-BuildRequires: hostname
BuildRequires: libevent-devel
BuildRequires: libstdc++-devel
BuildRequires: libuuid-devel
diff --git a/tests/cli.am b/tests/cli.am
index bc0d9a06..573be2af 100644
--- a/tests/cli.am
+++ b/tests/cli.am
@@ -65,6 +65,13 @@ tests_memcat_LDADD= libtest/libtest.la $(TESTS_LDADDS)
check_PROGRAMS+= tests/memcat
noinst_PROGRAMS+= tests/memcat
+tests_memping_SOURCES= tests/memping.cc
+tests_memping_CXXFLAGS= $(AM_CXXFLAGS) $(NO_EFF_CXX)
+EXTRA_tests_memping_DEPENDENCIES= clients/memping
+tests_memping_LDADD= libtest/libtest.la $(TESTS_LDADDS)
+check_PROGRAMS+= tests/memping
+noinst_PROGRAMS+= tests/memping
+
tests_memerror_SOURCES= tests/memerror.cc
tests_memerror_CXXFLAGS= $(AM_CXXFLAGS) $(NO_EFF_CXX)
EXTRA_tests_memerror_DEPENDENCIES= clients/memerror
@@ -101,6 +108,9 @@ test-memerror: tests/memerror
test-memtouch: tests/memtouch
tests/memtouch
+test-memping: tests/memping
+ tests/memping
+
valgrind-memerror: tests/memerror
@$(VALGRIND_COMMAND) tests/memerror
diff --git a/tests/libmemcached-1.0/all_tests.h b/tests/libmemcached-1.0/all_tests.h
index fe28e733..2012d477 100644
--- a/tests/libmemcached-1.0/all_tests.h
+++ b/tests/libmemcached-1.0/all_tests.h
@@ -144,6 +144,7 @@ test_st behavior_tests[] ={
{"MEMCACHED_BEHAVIOR_TCP_KEEPALIVE", false, (test_callback_fn*)MEMCACHED_BEHAVIOR_TCP_KEEPALIVE_test},
{"MEMCACHED_BEHAVIOR_TCP_KEEPIDLE", false, (test_callback_fn*)MEMCACHED_BEHAVIOR_TCP_KEEPIDLE_test},
{"MEMCACHED_BEHAVIOR_POLL_TIMEOUT", false, (test_callback_fn*)MEMCACHED_BEHAVIOR_POLL_TIMEOUT_test},
+ {"MEMCACHED_BEHAVIOR_IO_KEY_PREFETCH_TEST", true, (test_callback_fn*)MEMCACHED_BEHAVIOR_IO_KEY_PREFETCH_TEST },
{"MEMCACHED_CALLBACK_DELETE_TRIGGER_and_MEMCACHED_BEHAVIOR_NOREPLY", false, (test_callback_fn*)test_MEMCACHED_CALLBACK_DELETE_TRIGGER_and_MEMCACHED_BEHAVIOR_NOREPLY},
{0, 0, 0}
};
@@ -163,6 +164,7 @@ test_st basic_tests[] ={
{"reset stack clone", true, (test_callback_fn*)basic_reset_stack_clone_test},
{"reset heap clone", true, (test_callback_fn*)basic_reset_heap_clone_test},
{"memcached_return_t", false, (test_callback_fn*)memcached_return_t_TEST },
+ {"c++ memcached_st == memcached_return_t", false, (test_callback_fn*)comparison_operator_memcached_st_and__memcached_return_t_TEST },
{0, 0, 0}
};
diff --git a/tests/libmemcached-1.0/debug.cc b/tests/libmemcached-1.0/debug.cc
index 36193582..8b0296e5 100644
--- a/tests/libmemcached-1.0/debug.cc
+++ b/tests/libmemcached-1.0/debug.cc
@@ -62,7 +62,7 @@ static memcached_return_t print_keys_callback(const memcached_st *,
}
static memcached_return_t server_wrapper_for_dump_callback(const memcached_st *,
- memcached_server_instance_st server,
+ const memcached_instance_st * server,
void *)
{
memcached_st *memc= memcached_create(NULL);
diff --git a/tests/libmemcached-1.0/dump.cc b/tests/libmemcached-1.0/dump.cc
index a04a2c93..89487401 100644
--- a/tests/libmemcached-1.0/dump.cc
+++ b/tests/libmemcached-1.0/dump.cc
@@ -65,7 +65,7 @@ static memcached_return_t callback_dump_counter(const memcached_st *,
return MEMCACHED_SUCCESS;
}
-static memcached_return_t item_counter(memcached_server_instance_st ,
+static memcached_return_t item_counter(const memcached_instance_st * ,
const char *key, size_t key_length,
const char *value, size_t, // value_length,
void *context)
diff --git a/tests/libmemcached-1.0/generate.cc b/tests/libmemcached-1.0/generate.cc
index 4b3de418..a0d19c49 100644
--- a/tests/libmemcached-1.0/generate.cc
+++ b/tests/libmemcached-1.0/generate.cc
@@ -131,7 +131,7 @@ test_return_t generate_data_with_stats(memcached_st *memc)
/* This test was changes so that "make test" would work properlly */
if (DEBUG)
{
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, host_index);
printf("\nserver %u|%s|%u bytes: %llu\n",
diff --git a/tests/libmemcached-1.0/ketama.cc b/tests/libmemcached-1.0/ketama.cc
index 585a878e..cd9ca3f0 100644
--- a/tests/libmemcached-1.0/ketama.cc
+++ b/tests/libmemcached-1.0/ketama.cc
@@ -83,7 +83,7 @@ test_return_t ketama_compatibility_libmemcached(memcached_st *)
for (uint32_t x= 0; x < 99; x++)
{
uint32_t server_idx = memcached_generate_hash(memc, ketama_test_cases[x].key, strlen(ketama_test_cases[x].key));
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, server_idx);
const char *hostname = memcached_server_name(instance);
@@ -145,7 +145,7 @@ test_return_t user_supplied_bug18(memcached_st *trash)
{
uint32_t server_idx = memcached_generate_hash(memc, ketama_test_cases[x].key, strlen(ketama_test_cases[x].key));
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, server_idx);
const char *hostname = memcached_server_name(instance);
@@ -201,7 +201,7 @@ test_return_t auto_eject_hosts(memcached_st *trash)
test_true(server_pool[7].port == 11211);
test_true(server_pool[7].weight == 100);
- memcached_server_instance_st instance= memcached_server_instance_by_position(memc, 2);
+ const memcached_instance_st * instance= memcached_server_instance_by_position(memc, 2);
memcached_instance_next_retry(instance, time(NULL) +15);
memc->ketama.next_distribution_rebuild= time(NULL) - 1;
@@ -276,7 +276,7 @@ test_return_t ketama_compatibility_spymemcached(memcached_st *)
{
uint32_t server_idx= memcached_generate_hash(memc, ketama_test_cases_spy[x].key, strlen(ketama_test_cases_spy[x].key));
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, server_idx);
const char *hostname= memcached_server_name(instance);
diff --git a/tests/libmemcached-1.0/mem_functions.cc b/tests/libmemcached-1.0/mem_functions.cc
index 91e75372..de82e5d9 100644
--- a/tests/libmemcached-1.0/mem_functions.cc
+++ b/tests/libmemcached-1.0/mem_functions.cc
@@ -113,7 +113,7 @@ static memcached_st * create_single_instance_memcached(const memcached_st *origi
* I only want to hit _one_ server so I know the number of requests I'm
* sending in the pipeline.
*/
- memcached_server_instance_st instance= memcached_server_instance_by_position(original_memc, 0);
+ const memcached_instance_st * instance= memcached_server_instance_by_position(original_memc, 0);
char server_string[1024];
int server_string_length;
@@ -176,7 +176,7 @@ test_return_t init_test(memcached_st *not_used)
in_port_t test_ports[TEST_PORT_COUNT];
static memcached_return_t server_display_function(const memcached_st *ptr,
- memcached_server_instance_st server,
+ const memcached_instance_st * server,
void *context)
{
/* Do Nothing */
@@ -189,7 +189,7 @@ static memcached_return_t server_display_function(const memcached_st *ptr,
}
static memcached_return_t dump_server_information(const memcached_st *ptr,
- memcached_server_instance_st instance,
+ const memcached_instance_st * instance,
void *context)
{
/* Do Nothing */
@@ -244,7 +244,7 @@ test_return_t server_sort2_test(memcached_st *ptr)
size_t bigger= 0; /* Prime the value for the test_true in server_display_function */
memcached_server_fn callbacks[1];
memcached_st *local_memc;
- memcached_server_instance_st instance;
+ const memcached_instance_st * instance;
(void)ptr;
local_memc= memcached_create(NULL);
@@ -295,7 +295,7 @@ test_return_t memcached_server_remove_test(memcached_st*)
}
static memcached_return_t server_display_unsort_function(const memcached_st*,
- memcached_server_instance_st server,
+ const memcached_instance_st * server,
void *context)
{
/* Do Nothing */
@@ -956,7 +956,7 @@ test_return_t flush_test(memcached_st *memc)
}
static memcached_return_t server_function(const memcached_st *,
- memcached_server_instance_st,
+ const memcached_instance_st *,
void *)
{
/* Do Nothing */
@@ -1259,7 +1259,7 @@ test_return_t mget_end(memcached_st *memc)
test_return_t stats_servername_test(memcached_st *memc)
{
memcached_stat_st memc_stat;
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, 0);
if (LIBMEMCACHED_WITH_SASL_SUPPORT and memcached_get_sasl_callbacks(memc))
@@ -1751,6 +1751,54 @@ test_return_t mget_execute(memcached_st *original_memc)
return TEST_SUCCESS;
}
+test_return_t MEMCACHED_BEHAVIOR_IO_KEY_PREFETCH_TEST(memcached_st *original_memc)
+{
+ test_skip(true, memcached_behavior_get(original_memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL));
+
+ memcached_st *memc= create_single_instance_memcached(original_memc, "--BINARY-PROTOCOL");
+ test_true(memc);
+
+ test_skip(MEMCACHED_SUCCESS, memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_IO_KEY_PREFETCH, 8));
+
+ keys_st keys(20480);
+
+ /* First add all of the items.. */
+ char blob[1024] = {0};
+
+ for (size_t x= 0; x < keys.size(); ++x)
+ {
+ uint64_t query_id= memcached_query_id(memc);
+ memcached_return_t rc= memcached_add(memc,
+ keys.key_at(x), keys.length_at(x),
+ blob, sizeof(blob),
+ 0, 0);
+ test_true(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED);
+ test_compare(query_id +1, memcached_query_id(memc));
+ }
+
+ /* Try to get all of them with a large multiget */
+ size_t counter= 0;
+ memcached_execute_fn callbacks[]= { &callback_counter };
+ test_compare(MEMCACHED_SUCCESS,
+ memcached_mget_execute(memc,
+ keys.keys_ptr(), keys.lengths_ptr(),
+ keys.size(), callbacks, &counter, 1));
+
+ {
+ uint64_t query_id= memcached_query_id(memc);
+ test_compare(MEMCACHED_SUCCESS,
+ memcached_fetch_execute(memc, callbacks, (void *)&counter, 1));
+ test_compare(query_id, memcached_query_id(memc));
+
+ /* Verify that we got all of the items */
+ test_compare(keys.size(), counter);
+ }
+
+ memcached_free(memc);
+
+ return TEST_SUCCESS;
+}
+
#define REGRESSION_BINARY_VS_BLOCK_COUNT 20480
static pairs_st *global_pairs= NULL;
@@ -1894,7 +1942,7 @@ test_return_t regression_1048945_TEST(memcached_st*)
memcached_server_list_free(list);
test_compare(status, MEMCACHED_SUCCESS);
- memcached_server_instance_st server= memcached_server_by_key(memc, test_literal_param(__func__), &status);
+ const memcached_instance_st * server= memcached_server_by_key(memc, test_literal_param(__func__), &status);
test_true(server);
test_compare(status, MEMCACHED_SUCCESS);
@@ -2644,7 +2692,7 @@ test_return_t user_supplied_bug19(memcached_st *)
memcached_st *memc= memcached(test_literal_param("--server=localhost:11311/?100 --server=localhost:11312/?100"));
- memcached_server_instance_st server= memcached_server_by_key(memc, "a", 1, &res);
+ const memcached_instance_st * server= memcached_server_by_key(memc, "a", 1, &res);
test_true(server);
memcached_free(memc);
@@ -2766,6 +2814,20 @@ test_return_t user_supplied_bug21(memcached_st *memc)
return TEST_SUCCESS;
}
+test_return_t comparison_operator_memcached_st_and__memcached_return_t_TEST(memcached_st *)
+{
+ test::Memc memc_;
+
+ memcached_st *memc= &memc_;
+
+ ASSERT_EQ(memc, MEMCACHED_SUCCESS);
+ test_compare(memc, MEMCACHED_SUCCESS);
+
+ ASSERT_NEQ(memc, MEMCACHED_FAILURE);
+
+ return TEST_SUCCESS;
+}
+
test_return_t ketama_TEST(memcached_st *)
{
test::Memc memc("--server=10.0.1.1:11211 --server=10.0.1.2:11211");
@@ -2830,7 +2892,7 @@ test_return_t output_ketama_weighted_keys(memcached_st *)
char *hostname = memc->hosts[server_idx].hostname;
in_port_t port = memc->hosts[server_idx].port;
fprintf(fp, "key %s is on host /%s:%u\n", key, hostname, port);
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, host_index);
}
fclose(fp);
@@ -3203,7 +3265,7 @@ test_return_t check_for_1_2_3(memcached_st *memc)
{
memcached_version(memc);
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, 0);
if ((instance->major_version >= 1 && (instance->minor_version == 2 && instance->micro_version >= 4))
@@ -3283,7 +3345,7 @@ test_return_t noreply_test(memcached_st *memc)
int no_msg=0;
for (uint32_t x= 0; x < memcached_server_count(memc); ++x)
{
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, x);
no_msg+=(int)(instance->cursor_active);
}
@@ -3412,7 +3474,7 @@ test_return_t util_version_test(memcached_st *memc)
}
test_true(if_successful == false);
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, 0);
memcached_version(memc);
@@ -3458,7 +3520,7 @@ test_return_t getpid_connection_failure_test(memcached_st *memc)
{
test_skip(memc->servers[0].type, MEMCACHED_CONNECTION_TCP);
memcached_return_t rc;
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, 0);
// Test both the version that returns a code, and the one that does not.
@@ -3476,7 +3538,7 @@ test_return_t getpid_connection_failure_test(memcached_st *memc)
test_return_t getpid_test(memcached_st *memc)
{
memcached_return_t rc;
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, 0);
// Test both the version that returns a code, and the one that does not.
@@ -3491,7 +3553,7 @@ test_return_t getpid_test(memcached_st *memc)
}
static memcached_return_t ping_each_server(const memcached_st*,
- memcached_server_instance_st instance,
+ const memcached_instance_st * instance,
void*)
{
// Test both the version that returns a code, and the one that does not.
@@ -4146,8 +4208,8 @@ test_return_t regression_bug_447342(memcached_st *memc)
* This is to verify correct behavior in the library. Fake that two servers
* are dead..
*/
- memcached_server_instance_st instance_one= memcached_server_instance_by_position(memc, 0);
- memcached_server_instance_st instance_two= memcached_server_instance_by_position(memc, 2);
+ const memcached_instance_st * instance_one= memcached_server_instance_by_position(memc, 0);
+ const memcached_instance_st * instance_two= memcached_server_instance_by_position(memc, 2);
in_port_t port0= instance_one->port();
in_port_t port2= instance_two->port();
@@ -4210,7 +4272,7 @@ test_return_t regression_bug_463297(memcached_st *memc)
test_true(memc_clone);
test_true(memcached_version(memc_clone) == MEMCACHED_SUCCESS);
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc_clone, 0);
if (instance->major_version > 1 ||
@@ -4274,7 +4336,7 @@ test_return_t regression_bug_463297(memcached_st *memc)
test_return_t test_get_last_disconnect(memcached_st *memc)
{
memcached_return_t rc;
- memcached_server_instance_st disconnected_server;
+ const memcached_instance_st * disconnected_server;
/* With the working set of server */
const char *key= "marmotte";
@@ -4342,7 +4404,7 @@ test_return_t test_multiple_get_last_disconnect(memcached_st *)
memcached_return_t ret= memcached_set(memc, msg, strlen(msg), NULL, 0, (time_t)0, (uint32_t)0);
test_true_got((ret == MEMCACHED_CONNECTION_FAILURE or ret == MEMCACHED_SERVER_TEMPORARILY_DISABLED), memcached_last_error_message(memc));
- memcached_server_instance_st disconnected_server= memcached_server_get_last_disconnect(memc);
+ const memcached_instance_st * disconnected_server= memcached_server_get_last_disconnect(memc);
test_true(disconnected_server);
test_strcmp("localhost", memcached_server_name(disconnected_server));
test_true(memcached_server_port(disconnected_server) >= 8888 and memcached_server_port(disconnected_server) <= 8892);
@@ -4367,7 +4429,7 @@ test_return_t test_verbosity(memcached_st *memc)
}
-static memcached_return_t stat_printer(memcached_server_instance_st server,
+static memcached_return_t stat_printer(const memcached_instance_st * server,
const char *key, size_t key_length,
const char *value, size_t value_length,
void *context)
@@ -4415,7 +4477,7 @@ test_return_t wrong_failure_counter_test(memcached_st *original_memc)
test_true(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED);
- memcached_server_instance_st instance= memcached_server_instance_by_position(memc, 0);
+ const memcached_instance_st * instance= memcached_server_instance_by_position(memc, 0);
/* The test is to see that the memcached_quit doesn't increase the
* the server failure conter, so let's ensure that it is zero
@@ -4604,7 +4666,7 @@ test_return_t regression_bug_583031(memcached_st *)
{
memcached_st *memc= memcached_create(NULL);
test_true(memc);
- test_compare(MEMCACHED_SUCCESS, memcached_server_add(memc, "10.2.3.4", 11211));
+ test_compare(MEMCACHED_SUCCESS, memcached_server_add(memc, "10.2.251.4", 11211));
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT, 3000);
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_RETRY_TIMEOUT, 1000);
@@ -4621,7 +4683,7 @@ test_return_t regression_bug_583031(memcached_st *)
test_false(value);
test_zero(length);
- test_compare_got(MEMCACHED_TIMEOUT, rc, memcached_error(memc));
+ test_compare(MEMCACHED_TIMEOUT, memc);
memcached_free(memc);
@@ -4938,7 +5000,7 @@ test_return_t kill_HUP_TEST(memcached_st *original_memc)
memcached_st *memc= create_single_instance_memcached(original_memc, 0);
test_true(memc);
- memcached_server_instance_st instance= memcached_server_instance_by_position(memc, 0);
+ const memcached_instance_st * instance= memcached_server_instance_by_position(memc, 0);
pid_t pid;
test_true((pid= libmemcached_util_getpid(memcached_server_name(instance),
@@ -4956,7 +5018,8 @@ test_return_t kill_HUP_TEST(memcached_st *original_memc)
test_literal_param(__func__), // Keys
test_literal_param(__func__), // Values
0, 0);
- test_compare(ret, MEMCACHED_CONNECTION_FAILURE);
+ test_compare(ret, memc);
+ test_compare(MEMCACHED_CONNECTION_FAILURE, memc);
memcached_free(memc);
diff --git a/tests/libmemcached-1.0/mem_functions.h b/tests/libmemcached-1.0/mem_functions.h
index 374bc9c4..9edc820e 100644
--- a/tests/libmemcached-1.0/mem_functions.h
+++ b/tests/libmemcached-1.0/mem_functions.h
@@ -108,6 +108,7 @@ test_return_t memcached_server_remove_test(memcached_st*);
test_return_t memcached_stat_execute_test(memcached_st *memc);
test_return_t mget_end(memcached_st *memc);
test_return_t mget_execute(memcached_st *original_memc);
+test_return_t MEMCACHED_BEHAVIOR_IO_KEY_PREFETCH_TEST(memcached_st *original_memc);
test_return_t mget_result_alloc_test(memcached_st *memc);
test_return_t mget_result_function(memcached_st *memc);
test_return_t mget_result_test(memcached_st *memc);
@@ -183,3 +184,4 @@ test_return_t regression_994772_TEST(memcached_st*);
test_return_t regression_1009493_TEST(memcached_st*);
test_return_t regression_1048945_TEST(memcached_st*);
test_return_t regression_1067242_TEST(memcached_st*);
+test_return_t comparison_operator_memcached_st_and__memcached_return_t_TEST(memcached_st*);
diff --git a/tests/libmemcached-1.0/parser.cc b/tests/libmemcached-1.0/parser.cc
index bd84cd54..3c474fe7 100644
--- a/tests/libmemcached-1.0/parser.cc
+++ b/tests/libmemcached-1.0/parser.cc
@@ -85,7 +85,7 @@ struct scanner_variable_t {
// Check and make sure the first host is what we expect it to be
static test_return_t __check_host(memcached_st *memc, const scanner_string_st &hostname)
{
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, 0);
test_true(instance);
@@ -617,7 +617,7 @@ test_return_t random_statement_build_test(memcached_st*)
}
static memcached_return_t dump_server_information(const memcached_st *,
- memcached_server_instance_st instance,
+ const memcached_instance_st * instance,
void *)
{
if (strcmp(memcached_server_name(instance), "localhost"))
@@ -667,7 +667,7 @@ struct socket_weight_t {
};
static memcached_return_t dump_socket_information(const memcached_st *,
- memcached_server_instance_st instance,
+ const memcached_instance_st * instance,
void *context)
{
socket_weight_t *check= (socket_weight_t *)context;
diff --git a/tests/libmemcached-1.0/plus.cpp b/tests/libmemcached-1.0/plus.cpp
index ff6a5ab0..3079b9b3 100644
--- a/tests/libmemcached-1.0/plus.cpp
+++ b/tests/libmemcached-1.0/plus.cpp
@@ -218,7 +218,7 @@ static test_return_t lp_1010899_with_args_TEST(memcached_st *original)
{
// Check to see everything is setup internally even when a host is specified
// on creation.
- memcached_server_instance_st instance= memcached_server_instance_by_position(original, 0);
+ const memcached_instance_st* instance= memcached_server_instance_by_position(original, 0);
Memcache memc(memcached_server_name(instance), memcached_server_port(instance));
test_false(memc.increment(__func__, 0, NULL));
diff --git a/tests/libmemcached-1.0/pool.cc b/tests/libmemcached-1.0/pool.cc
index ced14bbc..577c0e94 100644
--- a/tests/libmemcached-1.0/pool.cc
+++ b/tests/libmemcached-1.0/pool.cc
@@ -340,7 +340,7 @@ static memcached_st * create_single_instance_memcached(const memcached_st *origi
* I only want to hit _one_ server so I know the number of requests I'm
* sending in the pipeline.
*/
- memcached_server_instance_st instance= memcached_server_instance_by_position(original_memc, 0);
+ const memcached_instance_st * instance= memcached_server_instance_by_position(original_memc, 0);
char server_string[1024];
int server_string_length;
diff --git a/tests/libmemcached-1.0/print.cc b/tests/libmemcached-1.0/print.cc
index a05901d0..f1cfe462 100644
--- a/tests/libmemcached-1.0/print.cc
+++ b/tests/libmemcached-1.0/print.cc
@@ -48,7 +48,7 @@ using namespace libtest;
#include "tests/print.h"
memcached_return_t server_print_callback(const memcached_st*,
- memcached_server_instance_st server,
+ const memcached_instance_st * server,
void *context)
{
if (context)
@@ -59,18 +59,8 @@ memcached_return_t server_print_callback(const memcached_st*,
return MEMCACHED_SUCCESS;
}
-const char * print_version(memcached_st *memc)
-{
- memcached_server_fn callbacks[1];
- callbacks[0]= server_print_version_callback;
- memcached_server_cursor(memc, callbacks, NULL, 1);
-
- return "print_version()";
-}
-
-
memcached_return_t server_print_version_callback(const memcached_st *,
- memcached_server_instance_st server,
+ const memcached_instance_st * server,
void *)
{
std::cerr << "Server: " << memcached_server_name(server) << ":" << memcached_server_port(server) << " "
@@ -81,3 +71,12 @@ memcached_return_t server_print_version_callback(const memcached_st *,
return MEMCACHED_SUCCESS;
}
+
+const char * print_version(memcached_st *memc)
+{
+ memcached_server_fn callbacks[1];
+ callbacks[0]= server_print_version_callback;
+ memcached_server_cursor(memc, callbacks, NULL, 1);
+
+ return "print_version()";
+}
diff --git a/tests/libmemcached-1.0/replication.cc b/tests/libmemcached-1.0/replication.cc
index 5a7fa876..9c31ab3d 100644
--- a/tests/libmemcached-1.0/replication.cc
+++ b/tests/libmemcached-1.0/replication.cc
@@ -126,7 +126,7 @@ test_return_t replication_get_test(memcached_st *memc)
for (uint32_t host= 0; host < memcached_server_count(memc); ++host)
{
memcached_st *memc_clone= memcached_clone(NULL, memc);
- org::libmemcached::Instance* instance= (org::libmemcached::Instance*)memcached_server_instance_by_position(memc_clone, host);
+ memcached_instance_st* instance= (memcached_instance_st*)memcached_server_instance_by_position(memc_clone, host);
instance->port(0);
@@ -188,7 +188,7 @@ test_return_t replication_mget_test(memcached_st *memc)
for (uint32_t host= 0; host < memcached_server_count(memc_clone); host++)
{
memcached_st *new_clone= memcached_clone(NULL, memc);
- memcached_server_instance_st instance= memcached_server_instance_by_position(new_clone, host);
+ const memcached_instance_st * instance= memcached_server_instance_by_position(new_clone, host);
((memcached_server_write_instance_st)instance)->port(0);
for (int x= 'a'; x <= 'z'; ++x)
diff --git a/tests/libmemcached-1.0/stat.cc b/tests/libmemcached-1.0/stat.cc
index 5305eeac..f2847bdb 100644
--- a/tests/libmemcached-1.0/stat.cc
+++ b/tests/libmemcached-1.0/stat.cc
@@ -48,7 +48,7 @@ using namespace libtest;
#include "tests/libmemcached-1.0/stat.h"
-static memcached_return_t item_counter(memcached_server_instance_st ,
+static memcached_return_t item_counter(const memcached_instance_st * ,
const char *key, size_t key_length,
const char *value, size_t, // value_length,
void *context)
diff --git a/tests/libmemcached-1.0/touch.cc b/tests/libmemcached-1.0/touch.cc
index 4f5385ec..092a182a 100644
--- a/tests/libmemcached-1.0/touch.cc
+++ b/tests/libmemcached-1.0/touch.cc
@@ -48,14 +48,13 @@ using namespace libtest;
static test_return_t pre_touch(memcached_st *memc)
{
test_compare(MEMCACHED_SUCCESS, memcached_version(memc));
- test_skip(true, libmemcached_util_version_check(memc, 1, 4, 8));
+ test_skip(true, libmemcached_util_version_check(memc, 1, 4, 15));
return TEST_SUCCESS;
}
test_return_t test_memcached_touch(memcached_st *memc)
{
-
test_skip(TEST_SUCCESS, pre_touch(memc));
size_t len;
@@ -85,21 +84,20 @@ test_return_t test_memcached_touch(memcached_st *memc)
free(value);
}
- test_compare(MEMCACHED_SUCCESS,
- memcached_touch(memc, test_literal_param(__func__), 60 *60));
+ rc= memcached_touch(memc, test_literal_param(__func__), 60 *60);
+ ASSERT_EQ_(MEMCACHED_SUCCESS, rc, "%s", memcached_last_error_message(memc));
rc= memcached_touch(memc, test_literal_param(__func__), 60 *60 *24 *60);
- test_compare(MEMCACHED_SUCCESS, rc);
+ ASSERT_EQ_(MEMCACHED_SUCCESS, rc, "%s", memcached_last_error_message(memc));
- test_compare(MEMCACHED_NOTFOUND,
- memcached_exist(memc, test_literal_param(__func__)));
+ rc= memcached_exist(memc, test_literal_param(__func__));
+ ASSERT_EQ_(MEMCACHED_NOTFOUND, rc, "%s", memcached_last_error_message(memc));
return TEST_SUCCESS;
}
test_return_t test_memcached_touch_by_key(memcached_st *memc)
{
-
test_skip(TEST_SUCCESS, pre_touch(memc));
size_t len;
@@ -132,19 +130,20 @@ test_return_t test_memcached_touch_by_key(memcached_st *memc)
free(value);
}
- test_compare(MEMCACHED_SUCCESS,
- memcached_touch_by_key(memc,
- test_literal_param("grouping_key"),
- test_literal_param(__func__),
- 60 *60));
+ rc= memcached_touch_by_key(memc,
+ test_literal_param("grouping_key"),
+ test_literal_param(__func__),
+ 60 *60);
+ ASSERT_EQ_(MEMCACHED_SUCCESS, rc, "%s", memcached_last_error_message(memc));
- test_compare(MEMCACHED_SUCCESS,
- memcached_touch_by_key(memc,
- test_literal_param("grouping_key"),
- test_literal_param(__func__),
- 60 *60 *24 *60));
- test_compare(MEMCACHED_NOTFOUND,
- memcached_exist_by_key(memc, test_literal_param("grouping_key"),test_literal_param(__func__)));
+ rc= memcached_touch_by_key(memc,
+ test_literal_param("grouping_key"),
+ test_literal_param(__func__),
+ 60 *60 *24 *60);
+ ASSERT_EQ_(MEMCACHED_SUCCESS, rc, "%s", memcached_last_error_message(memc));
+
+ rc= memcached_exist_by_key(memc, test_literal_param("grouping_key"),test_literal_param(__func__));
+ ASSERT_EQ_(MEMCACHED_NOTFOUND, rc, "%s", memcached_last_error_message(memc));
return TEST_SUCCESS;
}
diff --git a/tests/mem_udp.cc b/tests/mem_udp.cc
index dc2d10f5..41fc910b 100644
--- a/tests/mem_udp.cc
+++ b/tests/mem_udp.cc
@@ -106,9 +106,9 @@ static void get_udp_request_ids(memcached_st *memc, Expected &ids)
{
for (uint32_t x= 0; x < memcached_server_count(memc); x++)
{
- memcached_server_instance_st instance= memcached_server_instance_by_position(memc, x);
+ const memcached_instance_st * instance= memcached_server_instance_by_position(memc, x);
- ids.push_back(get_udp_datagram_request_id((struct udp_datagram_header_st *) ((memcached_server_instance_st )instance)->write_buffer));
+ ids.push_back(get_udp_datagram_request_id((struct udp_datagram_header_st *) ((const memcached_instance_st * )instance)->write_buffer));
}
}
@@ -173,7 +173,7 @@ static test_return_t add_tcp_server_udp_client_test(memcached_st *memc)
(void)memc;
#if 0
memcached_server_st server;
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, 0);
memcached_server_clone(&server, &memc->hosts[0]);
test_true(memcached_server_remove(&(memc->hosts[0])) == MEMCACHED_SUCCESS);
@@ -188,7 +188,7 @@ static test_return_t add_udp_server_tcp_client_test(memcached_st *memc)
(void)memc;
#if 0
memcached_server_st server;
- memcached_server_instance_st instance=
+ const memcached_instance_st * instance=
memcached_server_instance_by_position(memc, 0);
memcached_server_clone(&server, &memc->hosts[0]);
test_true(memcached_server_remove(&(memc->hosts[0])) == MEMCACHED_SUCCESS);
@@ -284,7 +284,7 @@ static test_return_t udp_set_test(memcached_st *memc)
get_udp_request_ids(memc, expected_ids);
unsigned int server_key= memcached_generate_hash(memc, test_literal_param("foo"));
test_true(server_key < memcached_server_count(memc));
- memcached_server_instance_st instance= memcached_server_instance_by_position(memc, server_key);
+ const memcached_instance_st * instance= memcached_server_instance_by_position(memc, server_key);
size_t init_offset= instance->write_buffer_offset;
test_compare_hint(MEMCACHED_SUCCESS,
@@ -349,7 +349,7 @@ static test_return_t udp_delete_test(memcached_st *memc)
get_udp_request_ids(memc, expected_ids);
unsigned int server_key= memcached_generate_hash(memc, test_literal_param("foo"));
- memcached_server_instance_st instance= memcached_server_instance_by_position(memc, server_key);
+ const memcached_instance_st * instance= memcached_server_instance_by_position(memc, server_key);
size_t init_offset= instance->write_buffer_offset;
test_compare(MEMCACHED_SUCCESS,
@@ -483,7 +483,7 @@ static test_return_t udp_get_test(memcached_st *memc)
size_t vlen;
Expected expected_ids;
get_udp_request_ids(memc, expected_ids);
- test_null(memcached_get(memc, test_literal_param("foo"), &vlen, (uint32_t)0, &rc));
+ test_null(memcached_get(memc, test_literal_param("foo"), &vlen, NULL, &rc));
test_compare(MEMCACHED_NOT_SUPPORTED, rc);
return post_udp_op_check(memc, expected_ids);
diff --git a/tests/memping.cc b/tests/memping.cc
new file mode 100644
index 00000000..6161611d
--- /dev/null
+++ b/tests/memping.cc
@@ -0,0 +1,121 @@
+/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+ *
+ * Test memping
+ *
+ * Copyright (C) 2011-2013 Data Differential, http://datadifferential.com/
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * * The names of its contributors may not be used to endorse or
+ * promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+
+/*
+ Test that we are cycling the servers we are creating during testing.
+*/
+
+#include <mem_config.h>
+
+#include <libtest/test.hpp>
+#include <libmemcached-1.2/memcached.h>
+
+using namespace libtest;
+
+#ifndef __INTEL_COMPILER
+#pragma GCC diagnostic ignored "-Wstrict-aliasing"
+#endif
+
+static std::string executable("clients/memping");
+
+static test_return_t help_test(void *)
+{
+ const char *args[]= { "--help", 0 };
+
+ test_compare(EXIT_SUCCESS, exec_cmdline(executable, args, true));
+
+ return TEST_SUCCESS;
+}
+
+static test_return_t ping_TEST(void *)
+{
+ char buffer[1024];
+ snprintf(buffer, sizeof(buffer), "--server=localhost:%d", int(default_port()));
+ const char *args[]= { buffer, 0 };
+
+ test_compare(EXIT_SUCCESS, exec_cmdline(executable, args, true));
+
+ return TEST_SUCCESS;
+}
+
+static test_return_t NOT_FOUND_TEST(void *)
+{
+ char buffer[1024];
+ snprintf(buffer, sizeof(buffer), "--server=nonexist.libmemcached.org:%d", int(default_port()));
+ const char *args[]= { buffer, 0 };
+
+ test_compare(EXIT_FAILURE, exec_cmdline(executable, args, true));
+
+ return TEST_SUCCESS;
+}
+
+test_st memping_TESTS[] ={
+ {"--help", true, help_test },
+ {"ping(FOUND)", true, ping_TEST },
+ {"ping(NOT_FOUND)", true, NOT_FOUND_TEST },
+ {0, 0, 0}
+};
+
+collection_st collection[] ={
+ {"memping", 0, 0, memping_TESTS },
+ {0, 0, 0, 0}
+};
+
+static void *world_create(server_startup_st& servers, test_return_t& error)
+{
+ if (libtest::has_memcached() == false)
+ {
+ error= TEST_SKIPPED;
+ return NULL;
+ }
+
+ if (server_startup(servers, "memcached", libtest::default_port(), NULL) == false)
+ {
+ error= TEST_FAILURE;
+ }
+
+ return &servers;
+}
+
+
+void get_world(libtest::Framework* world)
+{
+ world->collections(collection);
+ world->create(world_create);
+}
+
+
diff --git a/tests/print.h b/tests/print.h
index 7460dc3b..f5fcf899 100644
--- a/tests/print.h
+++ b/tests/print.h
@@ -38,11 +38,11 @@
#pragma once
memcached_return_t server_print_callback(const memcached_st *ptr,
- memcached_server_instance_st server,
+ const memcached_instance_st *server,
void *context);
memcached_return_t server_print_version_callback(const memcached_st *ptr,
- memcached_server_instance_st server,
+ const memcached_server_st *server,
void *context);
const char * print_version(memcached_st *memc);