vinted-memcached 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/BENCHMARKS +142 -0
- data/CHANGELOG +176 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +45 -0
- data/LICENSE +184 -0
- data/Manifest +209 -0
- data/README.rdoc +124 -0
- data/Rakefile +134 -0
- data/TODO +1 -0
- data/ext/extconf-make.rb +25 -0
- data/ext/extconf.rb +78 -0
- data/ext/libmemcached-0.32/AUTHORS +7 -0
- data/ext/libmemcached-0.32/COPYING +32 -0
- data/ext/libmemcached-0.32/ChangeLog +303 -0
- data/ext/libmemcached-0.32/INSTALL +302 -0
- data/ext/libmemcached-0.32/Makefile.am +36 -0
- data/ext/libmemcached-0.32/Makefile.in +911 -0
- data/ext/libmemcached-0.32/NEWS +1 -0
- data/ext/libmemcached-0.32/README +33 -0
- data/ext/libmemcached-0.32/THANKS +14 -0
- data/ext/libmemcached-0.32/TODO +11 -0
- data/ext/libmemcached-0.32/aclocal.m4 +2108 -0
- data/ext/libmemcached-0.32/clients/Makefile.am +80 -0
- data/ext/libmemcached-0.32/clients/Makefile.in +773 -0
- data/ext/libmemcached-0.32/clients/client_options.h +32 -0
- data/ext/libmemcached-0.32/clients/execute.c +64 -0
- data/ext/libmemcached-0.32/clients/execute.h +5 -0
- data/ext/libmemcached-0.32/clients/generator.c +74 -0
- data/ext/libmemcached-0.32/clients/generator.h +20 -0
- data/ext/libmemcached-0.32/clients/memcat.c +178 -0
- data/ext/libmemcached-0.32/clients/memcp.c +251 -0
- data/ext/libmemcached-0.32/clients/memdump.c +170 -0
- data/ext/libmemcached-0.32/clients/memerror.c +80 -0
- data/ext/libmemcached-0.32/clients/memflush.c +143 -0
- data/ext/libmemcached-0.32/clients/memrm.c +160 -0
- data/ext/libmemcached-0.32/clients/memslap.c +441 -0
- data/ext/libmemcached-0.32/clients/memstat.c +326 -0
- data/ext/libmemcached-0.32/clients/utilities.c +207 -0
- data/ext/libmemcached-0.32/clients/utilities.h +41 -0
- data/ext/libmemcached-0.32/config/compile +143 -0
- data/ext/libmemcached-0.32/config/config.guess +1561 -0
- data/ext/libmemcached-0.32/config/config.rpath +666 -0
- data/ext/libmemcached-0.32/config/config.sub +1686 -0
- data/ext/libmemcached-0.32/config/depcomp +630 -0
- data/ext/libmemcached-0.32/config/install-sh +520 -0
- data/ext/libmemcached-0.32/config/ltmain.sh +9636 -0
- data/ext/libmemcached-0.32/config/missing +376 -0
- data/ext/libmemcached-0.32/config.h.in +254 -0
- data/ext/libmemcached-0.32/configure +23843 -0
- data/ext/libmemcached-0.32/configure.ac +120 -0
- data/ext/libmemcached-0.32/libmemcached/Makefile.am +111 -0
- data/ext/libmemcached-0.32/libmemcached/Makefile.in +1069 -0
- data/ext/libmemcached-0.32/libmemcached/byteorder.c +31 -0
- data/ext/libmemcached-0.32/libmemcached/common.h +189 -0
- data/ext/libmemcached-0.32/libmemcached/crc.c +86 -0
- data/ext/libmemcached-0.32/libmemcached/hsieh_hash.c +68 -0
- data/ext/libmemcached-0.32/libmemcached/jenkins_hash.c +213 -0
- data/ext/libmemcached-0.32/libmemcached/libmemcached.ver +1 -0
- data/ext/libmemcached-0.32/libmemcached/libmemcached_probes.d +30 -0
- data/ext/libmemcached-0.32/libmemcached/libmemcached_probes.h +82 -0
- data/ext/libmemcached-0.32/libmemcached/md5.c +354 -0
- data/ext/libmemcached-0.32/libmemcached/memcached/README.txt +7 -0
- data/ext/libmemcached-0.32/libmemcached/memcached/protocol_binary.h +385 -0
- data/ext/libmemcached-0.32/libmemcached/memcached.c +153 -0
- data/ext/libmemcached-0.32/libmemcached/memcached.h +305 -0
- data/ext/libmemcached-0.32/libmemcached/memcached.hpp +799 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_allocators.c +72 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_analyze.c +100 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_auto.c +207 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_behavior.c +290 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_callback.c +175 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_configure.h.in +23 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_connect.c +371 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_constants.h +146 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_delete.c +0 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_do.c +72 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_dump.c +79 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_exist.c +114 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_exist.h +20 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_fetch.c +102 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_flush.c +89 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_flush_buffers.c +23 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_get.c +494 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_get.h +87 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_hash.c +252 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_hosts.c +510 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_internal.h +31 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_io.c +594 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_io.h +72 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_key.c +28 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_parse.c +74 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_pool.h +38 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_purge.c +76 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_quit.c +75 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_response.c +529 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_result.c +57 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_result.h +59 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_sasl.c +225 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_sasl.h +44 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_server.c +159 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_server.h +93 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_stats.c +437 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_storage.c +514 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_storage.h +107 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_strerror.c +92 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_string.c +138 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_string.h +53 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_touch.c +60 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_touch.h +31 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_types.h +44 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_util.h +15 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_verbosity.c +36 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_version.c +112 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_watchpoint.h +38 -0
- data/ext/libmemcached-0.32/libmemcached/murmur_hash.c +76 -0
- data/ext/libmemcached-0.32/libmemcached/visibility.h +51 -0
- data/ext/libmemcached-0.32/libmemcachedutil/Makefile.am +11 -0
- data/ext/libmemcached-0.32/libmemcachedutil/Makefile.in +604 -0
- data/ext/libmemcached-0.32/libmemcachedutil/libmemcachedutil.ver +1 -0
- data/ext/libmemcached-0.32/libmemcachedutil/memcached_pool.c +170 -0
- data/ext/libmemcached-0.32/m4/ac_cxx_compile_stdcxx_0x.m4 +103 -0
- data/ext/libmemcached-0.32/m4/ac_cxx_header_stdcxx_98.m4 +67 -0
- data/ext/libmemcached-0.32/m4/acx_pthread.m4 +276 -0
- data/ext/libmemcached-0.32/m4/byteorder.m4 +40 -0
- data/ext/libmemcached-0.32/m4/deprecated.m4 +17 -0
- data/ext/libmemcached-0.32/m4/enable_utillib.m4 +16 -0
- data/ext/libmemcached-0.32/m4/extensions.m4 +94 -0
- data/ext/libmemcached-0.32/m4/hsieh.m4 +18 -0
- data/ext/libmemcached-0.32/m4/lib-prefix.m4 +221 -0
- data/ext/libmemcached-0.32/m4/libtool.m4 +7831 -0
- data/ext/libmemcached-0.32/m4/ltoptions.m4 +369 -0
- data/ext/libmemcached-0.32/m4/ltsugar.m4 +123 -0
- data/ext/libmemcached-0.32/m4/ltversion.m4 +23 -0
- data/ext/libmemcached-0.32/m4/lt~obsolete.m4 +98 -0
- data/ext/libmemcached-0.32/m4/memcached.m4 +30 -0
- data/ext/libmemcached-0.32/m4/pandora_64bit.m4 +55 -0
- data/ext/libmemcached-0.32/m4/pandora_canonical.m4 +151 -0
- data/ext/libmemcached-0.32/m4/pandora_check_compiler_version.m4 +37 -0
- data/ext/libmemcached-0.32/m4/pandora_check_cxx_standard.m4 +16 -0
- data/ext/libmemcached-0.32/m4/pandora_enable_dtrace.m4 +41 -0
- data/ext/libmemcached-0.32/m4/pandora_ensure_gcc_version.m4 +36 -0
- data/ext/libmemcached-0.32/m4/pandora_have_better_malloc.m4 +54 -0
- data/ext/libmemcached-0.32/m4/pandora_have_sasl.m4 +133 -0
- data/ext/libmemcached-0.32/m4/pandora_header_assert.m4 +23 -0
- data/ext/libmemcached-0.32/m4/pandora_libtool.m4 +15 -0
- data/ext/libmemcached-0.32/m4/pandora_optimize.m4 +79 -0
- data/ext/libmemcached-0.32/m4/pandora_shared_ptr.m4 +56 -0
- data/ext/libmemcached-0.32/m4/pandora_vc_build.m4 +32 -0
- data/ext/libmemcached-0.32/m4/pandora_warnings.m4 +262 -0
- data/ext/libmemcached-0.32/m4/pod2man.m4 +7 -0
- data/ext/libmemcached-0.32/m4/protocol_binary.m4 +23 -0
- data/ext/libmemcached-0.32/m4/setsockopt.m4 +57 -0
- data/ext/libmemcached-0.32/m4/visibility.m4 +52 -0
- data/ext/libmemcached-0.32/support/Makefile.am +4 -0
- data/ext/libmemcached-0.32/support/Makefile.in +487 -0
- data/ext/libmemcached-0.32/support/libmemcached-fc.spec.in +105 -0
- data/ext/libmemcached-0.32/support/libmemcached.pc.in +10 -0
- data/ext/libmemcached-0.32/support/libmemcached.spec +105 -0
- data/ext/libmemcached-0.32/support/libmemcached.spec.in +105 -0
- data/ext/libmemcached-0.32/support/set_benchmark.sh +5 -0
- data/ext/libmemcached-0.32/tests/Makefile.am +113 -0
- data/ext/libmemcached-0.32/tests/Makefile.in +762 -0
- data/ext/libmemcached-0.32/tests/atomsmasher.c +245 -0
- data/ext/libmemcached-0.32/tests/function.c +4904 -0
- data/ext/libmemcached-0.32/tests/ketama_test_cases.h +108 -0
- data/ext/libmemcached-0.32/tests/output.cmp +7 -0
- data/ext/libmemcached-0.32/tests/output.res +7 -0
- data/ext/libmemcached-0.32/tests/output2.res +46 -0
- data/ext/libmemcached-0.32/tests/plus.cpp +293 -0
- data/ext/libmemcached-0.32/tests/r/memcat.res +19 -0
- data/ext/libmemcached-0.32/tests/r/memcp.res +27 -0
- data/ext/libmemcached-0.32/tests/r/memrm.res +19 -0
- data/ext/libmemcached-0.32/tests/r/memslap.res +33 -0
- data/ext/libmemcached-0.32/tests/r/memstat.res +33 -0
- data/ext/libmemcached-0.32/tests/server.c +118 -0
- data/ext/libmemcached-0.32/tests/server.h +25 -0
- data/ext/libmemcached-0.32/tests/start.c +16 -0
- data/ext/libmemcached-0.32/tests/t/memcat.test +4 -0
- data/ext/libmemcached-0.32/tests/t/memcp.test +3 -0
- data/ext/libmemcached-0.32/tests/t/memrm.test +3 -0
- data/ext/libmemcached-0.32/tests/t/memslap.test +5 -0
- data/ext/libmemcached-0.32/tests/t/memstat.test +3 -0
- data/ext/libmemcached-0.32/tests/test.c +137 -0
- data/ext/libmemcached-0.32/tests/test.h +46 -0
- data/ext/libmemcached-0.32/tests/udp.c +76 -0
- data/ext/rlibmemcached.i +258 -0
- data/ext/rlibmemcached_wrap.c +13917 -0
- data/lib/memcached/auth.rb +16 -0
- data/lib/memcached/behaviors.rb +78 -0
- data/lib/memcached/exceptions.rb +84 -0
- data/lib/memcached/experimental.rb +48 -0
- data/lib/memcached/marshal_codec.rb +10 -0
- data/lib/memcached/memcached.rb +732 -0
- data/lib/memcached/rails.rb +250 -0
- data/lib/memcached.rb +33 -0
- data/memcached.gemspec +0 -0
- data/test/profile/benchmark.rb +280 -0
- data/test/profile/c_profiler.rb +14 -0
- data/test/profile/exercise.rb +185 -0
- data/test/profile/rb_profiler.rb +21 -0
- data/test/profile/valgrind.rb +10 -0
- data/test/setup.rb +30 -0
- data/test/teardown.rb +0 -0
- data/test/test_helper.rb +18 -0
- data/test/unit/binding_test.rb +8 -0
- data/test/unit/memcached_experimental_test.rb +272 -0
- data/test/unit/memcached_test.rb +1487 -0
- data/test/unit/rails_test.rb +330 -0
- metadata +336 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
#include "common.h"
|
|
2
|
+
|
|
3
|
+
const char *memcached_strerror(memcached_st *ptr __attribute__((unused)), memcached_return rc)
|
|
4
|
+
{
|
|
5
|
+
switch (rc)
|
|
6
|
+
{
|
|
7
|
+
case MEMCACHED_SUCCESS:
|
|
8
|
+
return "SUCCESS";
|
|
9
|
+
case MEMCACHED_FAILURE:
|
|
10
|
+
return "FAILURE";
|
|
11
|
+
case MEMCACHED_HOST_LOOKUP_FAILURE:
|
|
12
|
+
return "HOSTNAME LOOKUP FAILURE";
|
|
13
|
+
case MEMCACHED_CONNECTION_FAILURE:
|
|
14
|
+
return "CONNECTION FAILURE";
|
|
15
|
+
case MEMCACHED_CONNECTION_BIND_FAILURE:
|
|
16
|
+
return "CONNECTION BIND FAILURE";
|
|
17
|
+
case MEMCACHED_READ_FAILURE:
|
|
18
|
+
return "READ FAILURE";
|
|
19
|
+
case MEMCACHED_UNKNOWN_READ_FAILURE:
|
|
20
|
+
return "UNKNOWN READ FAILURE";
|
|
21
|
+
case MEMCACHED_PROTOCOL_ERROR:
|
|
22
|
+
return "PROTOCOL ERROR";
|
|
23
|
+
case MEMCACHED_CLIENT_ERROR:
|
|
24
|
+
return "CLIENT ERROR";
|
|
25
|
+
case MEMCACHED_SERVER_ERROR:
|
|
26
|
+
return "SERVER ERROR";
|
|
27
|
+
case MEMCACHED_WRITE_FAILURE:
|
|
28
|
+
return "WRITE FAILURE";
|
|
29
|
+
case MEMCACHED_CONNECTION_SOCKET_CREATE_FAILURE:
|
|
30
|
+
return "CONNECTION SOCKET CREATE FAILURE";
|
|
31
|
+
case MEMCACHED_DATA_EXISTS:
|
|
32
|
+
return "CONNECTION DATA EXISTS";
|
|
33
|
+
case MEMCACHED_DATA_DOES_NOT_EXIST:
|
|
34
|
+
return "CONNECTION DATA DOES NOT EXIST";
|
|
35
|
+
case MEMCACHED_NOTSTORED:
|
|
36
|
+
return "NOT STORED";
|
|
37
|
+
case MEMCACHED_STORED:
|
|
38
|
+
return "STORED";
|
|
39
|
+
case MEMCACHED_NOTFOUND:
|
|
40
|
+
return "NOT FOUND";
|
|
41
|
+
case MEMCACHED_MEMORY_ALLOCATION_FAILURE:
|
|
42
|
+
return "MEMORY ALLOCATION FAILURE";
|
|
43
|
+
case MEMCACHED_PARTIAL_READ:
|
|
44
|
+
return "PARTIAL READ";
|
|
45
|
+
case MEMCACHED_SOME_ERRORS:
|
|
46
|
+
return "SOME ERRORS WERE REPORTED";
|
|
47
|
+
case MEMCACHED_NO_SERVERS:
|
|
48
|
+
return "NO SERVERS DEFINED";
|
|
49
|
+
case MEMCACHED_END:
|
|
50
|
+
return "SERVER END";
|
|
51
|
+
case MEMCACHED_DELETED:
|
|
52
|
+
return "SERVER DELETE";
|
|
53
|
+
case MEMCACHED_VALUE:
|
|
54
|
+
return "SERVER VALUE";
|
|
55
|
+
case MEMCACHED_STAT:
|
|
56
|
+
return "STAT VALUE";
|
|
57
|
+
case MEMCACHED_ITEM:
|
|
58
|
+
return "ITEM VALUE";
|
|
59
|
+
case MEMCACHED_ERRNO:
|
|
60
|
+
return "SYSTEM ERROR";
|
|
61
|
+
case MEMCACHED_FAIL_UNIX_SOCKET:
|
|
62
|
+
return "COULD NOT OPEN UNIX SOCKET";
|
|
63
|
+
case MEMCACHED_NOT_SUPPORTED:
|
|
64
|
+
return "ACTION NOT SUPPORTED";
|
|
65
|
+
case MEMCACHED_FETCH_NOTFINISHED:
|
|
66
|
+
return "FETCH WAS NOT COMPLETED";
|
|
67
|
+
case MEMCACHED_NO_KEY_PROVIDED:
|
|
68
|
+
return "A KEY LENGTH OF ZERO WAS PROVIDED";
|
|
69
|
+
case MEMCACHED_BUFFERED:
|
|
70
|
+
return "ACTION QUEUED";
|
|
71
|
+
case MEMCACHED_TIMEOUT:
|
|
72
|
+
return "A TIMEOUT OCCURRED";
|
|
73
|
+
case MEMCACHED_BAD_KEY_PROVIDED:
|
|
74
|
+
return "A BAD KEY WAS PROVIDED/CHARACTERS OUT OF RANGE";
|
|
75
|
+
case MEMCACHED_INVALID_HOST_PROTOCOL:
|
|
76
|
+
return "THE HOST TRANSPORT PROTOCOL DOES NOT MATCH THAT OF THE CLIENT";
|
|
77
|
+
case MEMCACHED_SERVER_MARKED_DEAD:
|
|
78
|
+
return "SERVER IS MARKED DEAD";
|
|
79
|
+
case MEMCACHED_UNKNOWN_STAT_KEY:
|
|
80
|
+
return "ENCOUNTERED AN UNKNOWN STAT KEY";
|
|
81
|
+
case MEMCACHED_AUTH_PROBLEM:
|
|
82
|
+
return "FAILED TO SEND AUTHENTICATION TO SERVER";
|
|
83
|
+
case MEMCACHED_AUTH_FAILURE:
|
|
84
|
+
return "AUTHENTICATION FAILURE";
|
|
85
|
+
case MEMCACHED_AUTH_CONTINUE:
|
|
86
|
+
return "CONTINUE AUTHENTICATION";
|
|
87
|
+
case MEMCACHED_MAXIMUM_RETURN:
|
|
88
|
+
return "Gibberish returned!";
|
|
89
|
+
default:
|
|
90
|
+
return "Gibberish returned!";
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#include "common.h"
|
|
2
|
+
|
|
3
|
+
memcached_return memcached_string_check(memcached_string_st *string, size_t need)
|
|
4
|
+
{
|
|
5
|
+
if (need && need > (size_t)(string->current_size - (size_t)(string->end - string->string)))
|
|
6
|
+
{
|
|
7
|
+
size_t current_offset= (size_t) (string->end - string->string);
|
|
8
|
+
char *new_value;
|
|
9
|
+
size_t adjust;
|
|
10
|
+
size_t new_size;
|
|
11
|
+
|
|
12
|
+
/* This is the block multiplier. To keep it larger and surive division errors we must round it up */
|
|
13
|
+
adjust= (need - (size_t)(string->current_size - (size_t)(string->end - string->string))) / string->block_size;
|
|
14
|
+
adjust++;
|
|
15
|
+
|
|
16
|
+
new_size= sizeof(char) * (size_t)((adjust * string->block_size) + string->current_size);
|
|
17
|
+
/* Test for overflow */
|
|
18
|
+
if (new_size < need)
|
|
19
|
+
return MEMCACHED_MEMORY_ALLOCATION_FAILURE;
|
|
20
|
+
|
|
21
|
+
new_value= string->root->call_realloc(string->root, string->string, new_size);
|
|
22
|
+
|
|
23
|
+
if (new_value == NULL)
|
|
24
|
+
return MEMCACHED_MEMORY_ALLOCATION_FAILURE;
|
|
25
|
+
|
|
26
|
+
string->string= new_value;
|
|
27
|
+
string->end= string->string + current_offset;
|
|
28
|
+
|
|
29
|
+
string->current_size+= (string->block_size * adjust);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return MEMCACHED_SUCCESS;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
memcached_string_st *memcached_string_create(memcached_st *ptr, memcached_string_st *string, size_t initial_size)
|
|
36
|
+
{
|
|
37
|
+
memcached_return rc;
|
|
38
|
+
|
|
39
|
+
/* Saving malloc calls :) */
|
|
40
|
+
if (string)
|
|
41
|
+
memset(string, 0, sizeof(memcached_string_st));
|
|
42
|
+
else
|
|
43
|
+
{
|
|
44
|
+
string= ptr->call_calloc(ptr, 1, sizeof(memcached_string_st));
|
|
45
|
+
|
|
46
|
+
if (string == NULL)
|
|
47
|
+
return NULL;
|
|
48
|
+
string->is_allocated= true;
|
|
49
|
+
}
|
|
50
|
+
string->block_size= MEMCACHED_BLOCK_SIZE;
|
|
51
|
+
string->root= ptr;
|
|
52
|
+
|
|
53
|
+
rc= memcached_string_check(string, initial_size);
|
|
54
|
+
if (rc != MEMCACHED_SUCCESS)
|
|
55
|
+
{
|
|
56
|
+
ptr->call_free(ptr, string);
|
|
57
|
+
return NULL;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
WATCHPOINT_ASSERT(string->string == string->end);
|
|
61
|
+
|
|
62
|
+
return string;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
memcached_return memcached_string_append_character(memcached_string_st *string,
|
|
66
|
+
char character)
|
|
67
|
+
{
|
|
68
|
+
memcached_return rc;
|
|
69
|
+
|
|
70
|
+
rc= memcached_string_check(string, 1);
|
|
71
|
+
|
|
72
|
+
if (rc != MEMCACHED_SUCCESS)
|
|
73
|
+
return rc;
|
|
74
|
+
|
|
75
|
+
*string->end= character;
|
|
76
|
+
string->end++;
|
|
77
|
+
|
|
78
|
+
return MEMCACHED_SUCCESS;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
memcached_return memcached_string_append(memcached_string_st *string,
|
|
82
|
+
const char *value, size_t length)
|
|
83
|
+
{
|
|
84
|
+
memcached_return rc;
|
|
85
|
+
|
|
86
|
+
rc= memcached_string_check(string, length);
|
|
87
|
+
|
|
88
|
+
if (rc != MEMCACHED_SUCCESS)
|
|
89
|
+
return rc;
|
|
90
|
+
|
|
91
|
+
WATCHPOINT_ASSERT(length <= string->current_size);
|
|
92
|
+
WATCHPOINT_ASSERT(string->string);
|
|
93
|
+
WATCHPOINT_ASSERT(string->end >= string->string);
|
|
94
|
+
|
|
95
|
+
memcpy(string->end, value, length);
|
|
96
|
+
string->end+= length;
|
|
97
|
+
|
|
98
|
+
return MEMCACHED_SUCCESS;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
char *memcached_string_c_copy(memcached_string_st *string)
|
|
102
|
+
{
|
|
103
|
+
char *c_ptr;
|
|
104
|
+
|
|
105
|
+
if (memcached_string_length(string) == 0)
|
|
106
|
+
return NULL;
|
|
107
|
+
|
|
108
|
+
c_ptr= string->root->call_malloc(string->root, (memcached_string_length(string)+1) * sizeof(char));
|
|
109
|
+
|
|
110
|
+
if (c_ptr == NULL)
|
|
111
|
+
return NULL;
|
|
112
|
+
|
|
113
|
+
memcpy(c_ptr, memcached_string_value(string), memcached_string_length(string));
|
|
114
|
+
c_ptr[memcached_string_length(string)]= 0;
|
|
115
|
+
|
|
116
|
+
return c_ptr;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
memcached_return memcached_string_reset(memcached_string_st *string)
|
|
120
|
+
{
|
|
121
|
+
string->end= string->string;
|
|
122
|
+
|
|
123
|
+
return MEMCACHED_SUCCESS;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
void memcached_string_free(memcached_string_st *ptr)
|
|
127
|
+
{
|
|
128
|
+
if (ptr == NULL)
|
|
129
|
+
return;
|
|
130
|
+
|
|
131
|
+
if (ptr->string)
|
|
132
|
+
ptr->root->call_free(ptr->root, ptr->string);
|
|
133
|
+
|
|
134
|
+
if (ptr->is_allocated)
|
|
135
|
+
ptr->root->call_free(ptr->root, ptr);
|
|
136
|
+
else
|
|
137
|
+
memset(ptr, 0, sizeof(memcached_string_st));
|
|
138
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Summary: String structure used for libmemcached.
|
|
3
|
+
*
|
|
4
|
+
* Copy: See Copyright for the status of this software.
|
|
5
|
+
*
|
|
6
|
+
* Author: Brian Aker
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#ifndef __MEMCACHED_STRING_H__
|
|
10
|
+
#define __MEMCACHED_STRING_H__
|
|
11
|
+
|
|
12
|
+
#ifdef __cplusplus
|
|
13
|
+
extern "C" {
|
|
14
|
+
#endif
|
|
15
|
+
|
|
16
|
+
struct memcached_string_st {
|
|
17
|
+
memcached_st *root;
|
|
18
|
+
char *end;
|
|
19
|
+
char *string;
|
|
20
|
+
size_t current_size;
|
|
21
|
+
size_t block_size;
|
|
22
|
+
bool is_allocated;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
#define memcached_string_length(A) (size_t)((A)->end - (A)->string)
|
|
26
|
+
#define memcached_string_set_length(A, B) (A)->end= (A)->string + B
|
|
27
|
+
#define memcached_string_size(A) (A)->current_size
|
|
28
|
+
#define memcached_string_value(A) (A)->string
|
|
29
|
+
|
|
30
|
+
LIBMEMCACHED_API
|
|
31
|
+
memcached_string_st *memcached_string_create(memcached_st *ptr,
|
|
32
|
+
memcached_string_st *string,
|
|
33
|
+
size_t initial_size);
|
|
34
|
+
LIBMEMCACHED_API
|
|
35
|
+
memcached_return memcached_string_check(memcached_string_st *string, size_t need);
|
|
36
|
+
LIBMEMCACHED_API
|
|
37
|
+
char *memcached_string_c_copy(memcached_string_st *string);
|
|
38
|
+
LIBMEMCACHED_API
|
|
39
|
+
memcached_return memcached_string_append_character(memcached_string_st *string,
|
|
40
|
+
char character);
|
|
41
|
+
LIBMEMCACHED_API
|
|
42
|
+
memcached_return memcached_string_append(memcached_string_st *string,
|
|
43
|
+
const char *value, size_t length);
|
|
44
|
+
LIBMEMCACHED_API
|
|
45
|
+
memcached_return memcached_string_reset(memcached_string_st *string);
|
|
46
|
+
LIBMEMCACHED_API
|
|
47
|
+
void memcached_string_free(memcached_string_st *string);
|
|
48
|
+
|
|
49
|
+
#ifdef __cplusplus
|
|
50
|
+
}
|
|
51
|
+
#endif
|
|
52
|
+
|
|
53
|
+
#endif /* __MEMCACHED_STRING_H__ */
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#include "common.h"
|
|
2
|
+
|
|
3
|
+
memcached_return memcached_touch(memcached_st *ptr,
|
|
4
|
+
const char *key, size_t key_length,
|
|
5
|
+
time_t expiration)
|
|
6
|
+
{
|
|
7
|
+
return memcached_touch_by_key(ptr, key, key_length, key, key_length, expiration);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
memcached_return memcached_touch_by_key(memcached_st *ptr,
|
|
11
|
+
const char *master_key, size_t master_key_length,
|
|
12
|
+
const char *key, size_t key_length,
|
|
13
|
+
time_t expiration)
|
|
14
|
+
{
|
|
15
|
+
memcached_return rc;
|
|
16
|
+
|
|
17
|
+
LIBMEMCACHED_MEMCACHED_TOUCH_START();
|
|
18
|
+
|
|
19
|
+
unlikely (ptr->flags & MEM_USE_UDP)
|
|
20
|
+
return MEMCACHED_NOT_SUPPORTED;
|
|
21
|
+
|
|
22
|
+
unlikely ((ptr->flags & MEM_BINARY_PROTOCOL) == 0)
|
|
23
|
+
return MEMCACHED_NOT_SUPPORTED;
|
|
24
|
+
|
|
25
|
+
unlikely (ptr->number_of_hosts == 0)
|
|
26
|
+
return MEMCACHED_NO_SERVERS;
|
|
27
|
+
|
|
28
|
+
rc= memcached_validate_key_length(key_length, 1);
|
|
29
|
+
unlikely (rc != MEMCACHED_SUCCESS)
|
|
30
|
+
return rc;
|
|
31
|
+
|
|
32
|
+
rc= memcached_validate_key_length(master_key_length, 1);
|
|
33
|
+
unlikely (rc != MEMCACHED_SUCCESS)
|
|
34
|
+
return rc;
|
|
35
|
+
|
|
36
|
+
uint32_t server_key= memcached_generate_hash(ptr, master_key, master_key_length);
|
|
37
|
+
memcached_server_st* instance= &ptr->hosts[server_key];
|
|
38
|
+
rc= memcached_connect(instance);
|
|
39
|
+
if (rc != MEMCACHED_SUCCESS)
|
|
40
|
+
return rc;
|
|
41
|
+
|
|
42
|
+
protocol_binary_request_touch request= {.bytes= {0}};
|
|
43
|
+
request.message.header.request.magic= PROTOCOL_BINARY_REQ;
|
|
44
|
+
request.message.header.request.opcode= PROTOCOL_BINARY_CMD_TOUCH;
|
|
45
|
+
request.message.header.request.extlen= 4;
|
|
46
|
+
request.message.header.request.keylen= htons((uint16_t)(key_length + ptr->prefix_key_length));
|
|
47
|
+
request.message.header.request.datatype= PROTOCOL_BINARY_RAW_BYTES;
|
|
48
|
+
request.message.header.request.bodylen= htonl((uint32_t)(key_length + ptr->prefix_key_length + request.message.header.request.extlen));
|
|
49
|
+
request.message.body.expiration= htonl((uint32_t) expiration);
|
|
50
|
+
|
|
51
|
+
if ((memcached_do(instance, (const char*)request.bytes, sizeof(request.bytes), 0) != MEMCACHED_SUCCESS) ||
|
|
52
|
+
(memcached_io_write(instance, ptr->prefix_key, ptr->prefix_key_length, 0) == -1) ||
|
|
53
|
+
(memcached_io_write(instance, key, key_length, 1) == -1)) {
|
|
54
|
+
memcached_io_reset(instance);
|
|
55
|
+
return MEMCACHED_WRITE_FAILURE;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
rc = memcached_response(instance, NULL, 0, NULL);
|
|
59
|
+
return rc;
|
|
60
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Summary: Touch function for libmemcached
|
|
3
|
+
*
|
|
4
|
+
* Copy: See Copyright for the status of this software.
|
|
5
|
+
*
|
|
6
|
+
* Author: Sergey Avseyev
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#ifndef __MEMCACHED_TOUCH_H__
|
|
10
|
+
#define __MEMCACHED_TOUCH_H__
|
|
11
|
+
|
|
12
|
+
#ifdef __cplusplus
|
|
13
|
+
extern "C" {
|
|
14
|
+
#endif
|
|
15
|
+
|
|
16
|
+
LIBMEMCACHED_API
|
|
17
|
+
memcached_return memcached_touch(memcached_st *ptr,
|
|
18
|
+
const char *key, size_t key_length,
|
|
19
|
+
time_t expiration);
|
|
20
|
+
|
|
21
|
+
LIBMEMCACHED_API
|
|
22
|
+
memcached_return memcached_touch_by_key(memcached_st *ptr,
|
|
23
|
+
const char *group_key, size_t group_key_length,
|
|
24
|
+
const char *key, size_t key_length,
|
|
25
|
+
time_t expiration);
|
|
26
|
+
|
|
27
|
+
#ifdef __cplusplus
|
|
28
|
+
}
|
|
29
|
+
#endif
|
|
30
|
+
|
|
31
|
+
#endif /* __MEMCACHED_TOUCH_H__ */
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Summary: Typpes for libmemcached
|
|
3
|
+
*
|
|
4
|
+
* Copy: See Copyright for the status of this software.
|
|
5
|
+
*
|
|
6
|
+
* Author: Brian Aker
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#ifndef __MEMCACHED_TYPES_H__
|
|
10
|
+
#define __MEMCACHED_TYPES_H__
|
|
11
|
+
|
|
12
|
+
#ifdef __cplusplus
|
|
13
|
+
extern "C" {
|
|
14
|
+
#endif
|
|
15
|
+
|
|
16
|
+
typedef struct memcached_st memcached_st;
|
|
17
|
+
typedef struct memcached_stat_st memcached_stat_st;
|
|
18
|
+
typedef struct memcached_analysis_st memcached_analysis_st;
|
|
19
|
+
typedef struct memcached_result_st memcached_result_st;
|
|
20
|
+
typedef struct memcached_string_st memcached_string_st;
|
|
21
|
+
typedef struct memcached_server_st memcached_server_st;
|
|
22
|
+
typedef struct memcached_continuum_item_st memcached_continuum_item_st;
|
|
23
|
+
typedef memcached_return (*memcached_clone_func)(memcached_st *parent, memcached_st *clone);
|
|
24
|
+
typedef memcached_return (*memcached_cleanup_func)(memcached_st *ptr);
|
|
25
|
+
typedef void (*memcached_free_function)(memcached_st *ptr, void *mem);
|
|
26
|
+
typedef void *(*memcached_malloc_function)(memcached_st *ptr, const size_t size);
|
|
27
|
+
typedef void *(*memcached_realloc_function)(memcached_st *ptr, void *mem, const size_t size);
|
|
28
|
+
typedef void *(*memcached_calloc_function)(memcached_st *ptr, size_t nelem, const size_t elsize);
|
|
29
|
+
typedef memcached_return (*memcached_execute_function)(memcached_st *ptr, memcached_result_st *result, void *context);
|
|
30
|
+
typedef memcached_return (*memcached_server_function)(memcached_st *ptr, memcached_server_st *server, void *context);
|
|
31
|
+
typedef memcached_return (*memcached_trigger_key)(memcached_st *ptr,
|
|
32
|
+
const char *key, size_t key_length,
|
|
33
|
+
memcached_result_st *result);
|
|
34
|
+
typedef memcached_return (*memcached_trigger_delete_key)(memcached_st *ptr,
|
|
35
|
+
const char *key, size_t key_length);
|
|
36
|
+
|
|
37
|
+
typedef memcached_return (*memcached_dump_func)(memcached_st *ptr,
|
|
38
|
+
const char *key, size_t key_length, void *context);
|
|
39
|
+
|
|
40
|
+
#ifdef __cplusplus
|
|
41
|
+
}
|
|
42
|
+
#endif
|
|
43
|
+
|
|
44
|
+
#endif /* __MEMCACHED_TYPES_H__ */
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Summary: interface for libmemcached utility library
|
|
3
|
+
* Description: main include file for libmemcachedutil
|
|
4
|
+
*
|
|
5
|
+
* Copy: See Copyright for the status of this software.
|
|
6
|
+
*
|
|
7
|
+
* Author: Trond Norbye
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
#ifndef MEMCACHED_UTIL_H
|
|
11
|
+
#define MEMCACHED_UTIL_H
|
|
12
|
+
|
|
13
|
+
#include <libmemcached/memcached_pool.h>
|
|
14
|
+
|
|
15
|
+
#endif /* MEMCACHED_UTIL_H */
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#include "common.h"
|
|
2
|
+
|
|
3
|
+
memcached_return memcached_verbosity(memcached_st *ptr, unsigned int verbosity)
|
|
4
|
+
{
|
|
5
|
+
unsigned int x;
|
|
6
|
+
size_t send_length;
|
|
7
|
+
memcached_return rc;
|
|
8
|
+
char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
|
|
9
|
+
|
|
10
|
+
send_length= (size_t) snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE,
|
|
11
|
+
"verbosity %u\r\n", verbosity);
|
|
12
|
+
unlikely (send_length >= MEMCACHED_DEFAULT_COMMAND_SIZE)
|
|
13
|
+
return MEMCACHED_WRITE_FAILURE;
|
|
14
|
+
|
|
15
|
+
rc= MEMCACHED_SUCCESS;
|
|
16
|
+
for (x= 0; x < ptr->number_of_hosts; x++)
|
|
17
|
+
{
|
|
18
|
+
memcached_return rrc;
|
|
19
|
+
|
|
20
|
+
rrc= memcached_do(&ptr->hosts[x], buffer, send_length, 1);
|
|
21
|
+
if (rrc != MEMCACHED_SUCCESS)
|
|
22
|
+
{
|
|
23
|
+
rc= MEMCACHED_SOME_ERRORS;
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
unlikely (ptr->flags & MEM_USE_UDP)
|
|
28
|
+
continue;
|
|
29
|
+
|
|
30
|
+
rrc= memcached_response(&ptr->hosts[x], buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
|
|
31
|
+
if (rrc != MEMCACHED_SUCCESS)
|
|
32
|
+
rc= MEMCACHED_SOME_ERRORS;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return rc;
|
|
36
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
#include "common.h"
|
|
2
|
+
|
|
3
|
+
const char * memcached_lib_version(void)
|
|
4
|
+
{
|
|
5
|
+
return LIBMEMCACHED_VERSION_STRING;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
static inline memcached_return memcached_version_binary(memcached_st *ptr);
|
|
9
|
+
static inline memcached_return memcached_version_textual(memcached_st *ptr);
|
|
10
|
+
|
|
11
|
+
memcached_return memcached_version(memcached_st *ptr)
|
|
12
|
+
{
|
|
13
|
+
if (ptr->flags & MEM_USE_UDP)
|
|
14
|
+
return MEMCACHED_NOT_SUPPORTED;
|
|
15
|
+
|
|
16
|
+
if (ptr->flags & MEM_BINARY_PROTOCOL)
|
|
17
|
+
return memcached_version_binary(ptr);
|
|
18
|
+
else
|
|
19
|
+
return memcached_version_textual(ptr);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static inline memcached_return memcached_version_textual(memcached_st *ptr)
|
|
23
|
+
{
|
|
24
|
+
unsigned int x;
|
|
25
|
+
size_t send_length;
|
|
26
|
+
memcached_return rc;
|
|
27
|
+
char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
|
|
28
|
+
char *response_ptr;
|
|
29
|
+
const char *command= "version\r\n";
|
|
30
|
+
|
|
31
|
+
send_length= strlen(command);
|
|
32
|
+
|
|
33
|
+
rc= MEMCACHED_SUCCESS;
|
|
34
|
+
for (x= 0; x < ptr->number_of_hosts; x++)
|
|
35
|
+
{
|
|
36
|
+
memcached_return rrc;
|
|
37
|
+
|
|
38
|
+
rrc= memcached_do(&ptr->hosts[x], command, send_length, 1);
|
|
39
|
+
if (rrc != MEMCACHED_SUCCESS)
|
|
40
|
+
{
|
|
41
|
+
rc= MEMCACHED_SOME_ERRORS;
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
rrc= memcached_response(&ptr->hosts[x], buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
|
|
46
|
+
if (rrc != MEMCACHED_SUCCESS)
|
|
47
|
+
{
|
|
48
|
+
rc= MEMCACHED_SOME_ERRORS;
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* Find the space, and then move one past it to copy version */
|
|
53
|
+
response_ptr= index(buffer, ' ');
|
|
54
|
+
response_ptr++;
|
|
55
|
+
|
|
56
|
+
ptr->hosts[x].major_version= (uint8_t)strtol(response_ptr, (char **)NULL, 10);
|
|
57
|
+
response_ptr= index(response_ptr, '.');
|
|
58
|
+
response_ptr++;
|
|
59
|
+
ptr->hosts[x].minor_version= (uint8_t)strtol(response_ptr, (char **)NULL, 10);
|
|
60
|
+
response_ptr= index(response_ptr, '.');
|
|
61
|
+
response_ptr++;
|
|
62
|
+
ptr->hosts[x].micro_version= (uint8_t)strtol(response_ptr, (char **)NULL, 10);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return rc;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
static inline memcached_return memcached_version_binary(memcached_st *ptr)
|
|
69
|
+
{
|
|
70
|
+
memcached_return rc;
|
|
71
|
+
unsigned int x;
|
|
72
|
+
protocol_binary_request_version request= { .bytes= {0}};
|
|
73
|
+
request.message.header.request.magic= PROTOCOL_BINARY_REQ;
|
|
74
|
+
request.message.header.request.opcode= PROTOCOL_BINARY_CMD_VERSION;
|
|
75
|
+
request.message.header.request.datatype= PROTOCOL_BINARY_RAW_BYTES;
|
|
76
|
+
|
|
77
|
+
rc= MEMCACHED_SUCCESS;
|
|
78
|
+
for (x= 0; x < ptr->number_of_hosts; x++)
|
|
79
|
+
{
|
|
80
|
+
memcached_return rrc;
|
|
81
|
+
|
|
82
|
+
rrc= memcached_do(&ptr->hosts[x], request.bytes, sizeof(request.bytes), 1);
|
|
83
|
+
if (rrc != MEMCACHED_SUCCESS)
|
|
84
|
+
{
|
|
85
|
+
memcached_io_reset(&ptr->hosts[x]);
|
|
86
|
+
rc= MEMCACHED_SOME_ERRORS;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
for (x= 0; x < ptr->number_of_hosts; x++)
|
|
92
|
+
if (memcached_server_response_count(&ptr->hosts[x]) > 0)
|
|
93
|
+
{
|
|
94
|
+
memcached_return rrc;
|
|
95
|
+
char buffer[32];
|
|
96
|
+
char *p;
|
|
97
|
+
|
|
98
|
+
rrc= memcached_response(&ptr->hosts[x], buffer, sizeof(buffer), NULL);
|
|
99
|
+
if (rrc != MEMCACHED_SUCCESS)
|
|
100
|
+
{
|
|
101
|
+
memcached_io_reset(&ptr->hosts[x]);
|
|
102
|
+
rc= MEMCACHED_SOME_ERRORS;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
ptr->hosts[x].major_version= (uint8_t)strtol(buffer, &p, 10);
|
|
107
|
+
ptr->hosts[x].minor_version= (uint8_t)strtol(p + 1, &p, 10);
|
|
108
|
+
ptr->hosts[x].micro_version= (uint8_t)strtol(p + 1, NULL, 10);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return rc;
|
|
112
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Summary: Localized copy of WATCHPOINT debug symbols
|
|
3
|
+
*
|
|
4
|
+
* Copy: See Copyright for the status of this software.
|
|
5
|
+
*
|
|
6
|
+
* Author: Brian Aker
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#ifndef LIBMEMCACHED_MEMCACHED_WATCHPOINT_H
|
|
10
|
+
#define LIBMEMCACHED_MEMCACHED_WATCHPOINT_H
|
|
11
|
+
|
|
12
|
+
/* Some personal debugging functions */
|
|
13
|
+
#if defined(DEBUG)
|
|
14
|
+
|
|
15
|
+
#include <assert.h>
|
|
16
|
+
|
|
17
|
+
#define WATCHPOINT fprintf(stderr, "\nWATCHPOINT %s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout);
|
|
18
|
+
#define WATCHPOINT_ERROR(A) fprintf(stderr, "\nWATCHPOINT %s:%d %s\n", __FILE__, __LINE__, memcached_strerror(NULL, A));fflush(stdout);
|
|
19
|
+
#define WATCHPOINT_IFERROR(A) if(A != MEMCACHED_SUCCESS)fprintf(stderr, "\nWATCHPOINT %s:%d %s\n", __FILE__, __LINE__, memcached_strerror(NULL, A));fflush(stdout);
|
|
20
|
+
#define WATCHPOINT_STRING(A) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %s\n", __FILE__, __LINE__,__func__,A);fflush(stdout);
|
|
21
|
+
#define WATCHPOINT_STRING_LENGTH(A,B) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %.*s\n", __FILE__, __LINE__,__func__,(int)B,A);fflush(stdout);
|
|
22
|
+
#define WATCHPOINT_NUMBER(A) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %zu\n", __FILE__, __LINE__,__func__,(size_t)(A));fflush(stdout);
|
|
23
|
+
#define WATCHPOINT_ERRNO(A) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %s\n", __FILE__, __LINE__,__func__, strerror(A));fflush(stdout);
|
|
24
|
+
#define WATCHPOINT_ASSERT_PRINT(A,B,C) if(!(A)){fprintf(stderr, "\nWATCHPOINT ASSERT %s:%d (%s) ", __FILE__, __LINE__,__func__);fprintf(stderr, (B),(C));fprintf(stderr,"\n");fflush(stdout);}assert((A));
|
|
25
|
+
#define WATCHPOINT_ASSERT(A) assert((A));
|
|
26
|
+
#else
|
|
27
|
+
#define WATCHPOINT
|
|
28
|
+
#define WATCHPOINT_ERROR(A)
|
|
29
|
+
#define WATCHPOINT_IFERROR(A)
|
|
30
|
+
#define WATCHPOINT_STRING(A)
|
|
31
|
+
#define WATCHPOINT_NUMBER(A)
|
|
32
|
+
#define WATCHPOINT_ERRNO(A)
|
|
33
|
+
#define WATCHPOINT_ASSERT_PRINT(A,B,C)
|
|
34
|
+
#define WATCHPOINT_ASSERT(A)
|
|
35
|
+
|
|
36
|
+
#endif /* DEBUG */
|
|
37
|
+
|
|
38
|
+
#endif /* LIBMEMCACHED_MEMCACHED_WATCHPOINT_H */
|