Added memerror so that I can find out what an error code is without
authorBrian Aker <brian@tangent.org>
Tue, 20 Nov 2007 01:19:09 +0000 (17:19 -0800)
committerBrian Aker <brian@tangent.org>
Tue, 20 Nov 2007 01:19:09 +0000 (17:19 -0800)
resorting to reading the source :)

ChangeLog
docs/Makefile.am
docs/libmemcached.pod
docs/memerror.pod [new file with mode: 0755]
src/Makefile.am
src/memerror.c [new file with mode: 0644]
support/libmemcached.spec.in

index ac498778fb465291ef9e2088f11ec0750bbb3ae3..b880e29d863a33cc60b1c280e475df338d5577b6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,8 @@
     multiple DNS lookups.
   * Added CAS support, though this is optional and must be enabled during
     runtime.
+  * Added the utility memerror to create human readable error strings
+    from memcached errors (aka convert ints to strings)
 
 0.9 Thu Nov 15 07:44:00 PST 2007
   * fix for when no servers are definied.
index 378a881934b5e223b366864cabcc16fdbb874cda..767065d464f4e3cb78921d9104d1ac4842daeb02 100644 (file)
@@ -4,6 +4,7 @@ EXTRA_DIST = libmemcached.pod\
        memcached_flush.pod\\r
        memcached_stats.pod\\r
        memrm.pod\\r
+       memerror.pod\\r
        libmemcached_examples.pod\\r
        memcached_get.pod\\r
        memcached_strerror.pod\\r
@@ -26,6 +27,7 @@ man_MANS = libmemcached.3\
        libmemcached_examples.3\\r
        memcat.1\\r
        memcp.1\\r
+       memerror.1\\r
        memflush.1\\r
        memrm.1\\r
        memslap.1\\r
@@ -217,6 +219,9 @@ memstat.1: memstat.pod
 memrm.1: memrm.pod\r
        pod2man -c "libmemcached" -r "" -s 1 memrm.pod > memrm.1\r
 \r
+memerror.1: memerror.pod\r
+       pod2man -c "libmemcached" -r "" -s 1 memerror.pod > memerror.1\r
+\r
 memflush.1: memflush.pod\r
        pod2man -c "libmemcached" -r "" -s 1 memflush.pod > memflush.1\r
 \r
index 02bd04e0d529e3f82bd91a6692cc21cb478ad028..9685e01e88614ee309c1c3dbf04332678df26691 100755 (executable)
@@ -62,6 +62,6 @@ Brian Aker, E<lt>brian@tangent.orgE<gt>
 
 =head1 SEE ALSO
 
-memcached(1) libmemcached_examples(3) libmemcached(1) memcat(1) memcp(1) memflush(1) memrm(1) memslap(1) memstat(1) memcached_fetch(3) memcached_replace(3) memcached_server_list_free(3) libmemcached_examples(3) memcached_clone(3) memcached_free(3) memcached_server_add(3) memcached_server_push(3) memcached_add(3) memcached_get(3) memcached_server_count(3) memcached_servers_parse(3) memcached_create(3) memcached_increment(3) memcached_server_list(3) memcached_set(3) memcached_decrement(3) memcached_mget(3) memcached_server_list_append(3) memcached_strerror(3) memcached_delete(3) memcached_quit(3) memcached_server_list_count(3) memcached_verbosity(3) memcached_server_add_unix_socket(3) memcahed_result_create(3)  memcached_result_free(3)  memcached_result_key_value(3)  memcached_result_key_length(3)  memcached_result_value(3)  memcached_result_length(3)  memcached_result_flags(3)  memcached_result_cas(3) memcached_result_st(3) memcached_append(3) memcached_prepend(3) memcached_fetch_result(3)
+memcached(1) libmemcached_examples(3) libmemcached(1) memcat(1) memcp(1) memflush(1) memrm(1) memslap(1) memstat(1) memcached_fetch(3) memcached_replace(3) memcached_server_list_free(3) libmemcached_examples(3) memcached_clone(3) memcached_free(3) memcached_server_add(3) memcached_server_push(3) memcached_add(3) memcached_get(3) memcached_server_count(3) memcached_servers_parse(3) memcached_create(3) memcached_increment(3) memcached_server_list(3) memcached_set(3) memcached_decrement(3) memcached_mget(3) memcached_server_list_append(3) memcached_strerror(3) memcached_delete(3) memcached_quit(3) memcached_server_list_count(3) memcached_verbosity(3) memcached_server_add_unix_socket(3) memcahed_result_create(3)  memcached_result_free(3)  memcached_result_key_value(3)  memcached_result_key_length(3)  memcached_result_value(3)  memcached_result_length(3)  memcached_result_flags(3)  memcached_result_cas(3) memcached_result_st(3) memcached_append(3) memcached_prepend(3) memcached_fetch_result(3) memerror(1)
 =cut
 
diff --git a/docs/memerror.pod b/docs/memerror.pod
new file mode 100755 (executable)
index 0000000..9dc2e0c
--- /dev/null
@@ -0,0 +1,30 @@
+=head1 NAME
+
+memerror - Translate a memcached error code to a string
+
+=head1 SYNOPSIS
+
+  memerror [options] error_code
+
+=head1 DESCRIPTION
+
+B<memerror> translate an error code from libmemcached(3) to  a human
+readable string.
+
+For a full list of operations run the tool with the B<--help> option.
+
+=head1 HOME
+
+To find out more infoerroration please check:
+L<http://tangent.org/552/libmemcached.html>
+
+=head1 AUTHOR
+
+Brian Aker, E<lt>brian@tangent.orgE<gt>
+
+=head1 SEE ALSO
+
+memcached(1) libmemcached(3)
+
+=cut
+
index 435376bd0cc68b5c78d07cb28c33c166d4f4445d..0bf6ec8769cf90dbcfb165afbde4de6a3c726ce2 100644 (file)
@@ -1,7 +1,7 @@
 INCLUDES = -I$(top_builddir)/include
 LDADDS = ../lib/libmemcached.la
 
-bin_PROGRAMS = memcat memcp memstat memrm memflush memslap
+bin_PROGRAMS = memcat memcp memstat memrm memflush memslap memerror
 
 noinst_HEADERS = client_options.h \
                utilities.h \
@@ -23,5 +23,8 @@ memrm_LDADD = $(LDADDS)
 memflush_SOURCES = memflush.c utilities.c
 memflush_LDADD = $(LDADDS)
 
+memerror_SOURCES = memerror.c utilities.c
+memerror_LDADD = $(LDADDS)
+
 memslap_SOURCES = memslap.c utilities.c generator.c execute.c
 memslap_LDADD = $(LDADDS) -lpthread
diff --git a/src/memerror.c b/src/memerror.c
new file mode 100644 (file)
index 0000000..d6bfbf7
--- /dev/null
@@ -0,0 +1,79 @@
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <stdlib.h>
+#include <memcached.h>
+
+#include "utilities.h"
+
+#define PROGRAM_NAME "memerror"
+#define PROGRAM_DESCRIPTION "Translate a memcached errror code into a string."
+
+
+/* Prototypes */
+void options_parse(int argc, char *argv[]);
+
+static int opt_verbose= 0;
+
+int main(int argc, char *argv[])
+{
+  options_parse(argc, argv);
+
+  if (argc != 2)
+    return 1;
+
+  printf("%s\n", memcached_strerror(NULL, atoi(argv[1])));
+
+  return 0;
+}
+
+
+void options_parse(int argc, char *argv[])
+{
+  int option_index= 0;
+  int option_rv;
+
+  memcached_programs_help_st help_options[]=
+  {
+    {0},
+  };
+
+  static struct option long_options[]=
+    {
+      {"version", no_argument, NULL, OPT_VERSION},
+      {"help", no_argument, NULL, OPT_HELP},
+      {"verbose", no_argument, &opt_verbose, OPT_VERBOSE},
+      {"debug", no_argument, &opt_verbose, OPT_DEBUG},
+      {0, 0, 0, 0},
+    };
+
+  while (1) 
+  {
+    option_rv= getopt_long(argc, argv, "Vhvds:", long_options, &option_index);
+    if (option_rv == -1) break;
+    switch (option_rv)
+    {
+    case 0:
+      break;
+    case OPT_VERBOSE: /* --verbose or -v */
+      opt_verbose = OPT_VERBOSE;
+      break;
+    case OPT_DEBUG: /* --debug or -d */
+      opt_verbose = OPT_DEBUG;
+      break;
+    case OPT_VERSION: /* --version or -V */
+      version_command(PROGRAM_NAME);
+      break;
+    case OPT_HELP: /* --help or -h */
+      help_command(PROGRAM_NAME, PROGRAM_DESCRIPTION, long_options, help_options);
+      break;
+    case '?':
+      /* getopt_long already printed an error message. */
+      exit(1);
+    default:
+      abort();
+    }
+  }
+}
index d2eef19c022909f267de429f33fa45a6cbbdf7ad..8e6b1aa74d5ee6ae5d41d0efcd80e85234577ecc 100644 (file)
@@ -24,6 +24,7 @@ memrm - Remove a key(s) from the serrver.
 memstat - Dump the stats of your servers to standard output.
 memslap - Generate testing loads on a memcached cluster.
 memcp - Copy files to memcached servers.
+memerror - Creates human readable messages from libmemecached error codes.
 
 %prep
 %setup -q
@@ -43,6 +44,7 @@ memcp - Copy files to memcached servers.
 %files
 %{_bindir}/memcat
 %{_bindir}/memcp
+%{_bindir}/memerror
 %{_bindir}/memflush
 %{_bindir}/memrm
 %{_bindir}/memstat