X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Futilities.c;h=1dfd60b254e841680f49b59084bae0ab3ccb8991;hb=89aca153336105c0f29903e31ebb6bd743d95307;hp=ce6cd925bdc76d566ca15d4a5243d71102e32a47;hpb=ca065f55235fd9979ede818963780f417d70c64e;p=awesomized%2Flibmemcached diff --git a/src/utilities.c b/src/utilities.c index ce6cd925..1dfd60b2 100644 --- a/src/utilities.c +++ b/src/utilities.c @@ -1,77 +1,72 @@ -#include +#include +#include +#include +#include "utilities.h" -static char **cleanup_list= NULL; -static char cleanup_list_length= 0; -void parse_opt_servers(memcached_st *memc, - char *server_strings) +long int timedif(struct timeval a, struct timeval b) { - char *string; - unsigned int port; - char *begin_ptr; - char *end_ptr; + register int us, s; - end_ptr= server_strings + strlen(server_strings); + us = a.tv_usec - b.tv_usec; + us /= 1000; + s = a.tv_sec - b.tv_sec; + s *= 1000; + return s + us; +} - assert(server_strings); - assert(memc); +void version_command(char *command_name) +{ + printf("%s v%u.%u\n", command_name, 1, 0); + exit(0); +} - for (begin_ptr= server_strings, string= index(server_strings, ','); - begin_ptr == end_ptr; - begin_ptr= ++string, string= index(begin_ptr, ',')) +char *lookup_help(memcached_options option) +{ + switch (option) { - char buffer[HUGE_STRING_LEN]; - char *ptr; - - memset(buffer, 0, HUGE_STRING_LEN); - if (string) - { - memcpy(buffer, begin_ptr, string - begin_ptr); - } - else - { - size_t length= strlen(server_strings); - memcpy(buffer, begin_ptr, length); - string= server_strings+length; - } - - ptr= index(buffer, ':'); - - if (ptr) - { - ptr[0]= 0; - - ptr++; - - port= strtol(ptr, (char **)NULL, 10); - - memcached_server_add(memc, buffer, port); - } - else - { - memcached_server_add(memc, buffer, 0); - } - } + case OPT_SERVERS: return("List which servers you wish to connect to."); + case OPT_VERSION: return("Display the version of the application and then exit."); + case OPT_HELP: return("Diplay this message and then exit."); + case OPT_VERBOSE: return("Give more details on the progression of the application."); + case OPT_DEBUG: return("Provide output only useful for debugging."); + case OPT_FLAG: return("Provide flag information for storage operation."); + case OPT_EXPIRE: return("Set the expire option for the object."); + case OPT_SET: return("Use set command with memcached when storing."); + case OPT_REPLACE: return("Use replace command with memcached when storing."); + case OPT_ADD: return("Use add command with memcached when storing."); + case OPT_SLAP_EXECUTE_NUMBER: return("Number of times to execute the given test."); + case OPT_SLAP_INITIAL_LOAD: return("Number of key pairs to load before executing tests."); + case OPT_SLAP_TEST: return("Test to run."); + case OPT_SLAP_CONCURRENCY: return("Number of users to simulate with load."); + case OPT_SLAP_NON_BLOCK: return("Set TCP up to use non-blocking IO."); + case OPT_SLAP_TCP_NODELAY: return("Set TCP socket up to use nodelay."); + case OPT_FLUSH: return("Flush servers before running tests."); + }; + + return "forgot to document this one :)"; } -void cleanup(void) +void help_command(char *command_name, char *description, + const struct option *long_options, + memcached_programs_help_st *options) { unsigned int x; - for (x= 0; x < cleanup_list_length; x++) - free(cleanup_list[x]); - - free(cleanup_list); -} -char *strdup_cleanup(const char *str) -{ - char *ptr; + printf("%s v%u.%u\n\n", command_name, 1, 0); + printf("\t%s\n\n", description); + printf("Current options. A '=' means the option takes a value.\n\n"); - ptr= strdup(str); + for (x= 0; long_options[x].name; x++) + { + char *help_message; - cleanup_list= (char **)realloc(cleanup_list, sizeof(char *) * (cleanup_list_length+1)); - cleanup_list[cleanup_list_length]= ptr; - cleanup_list_length++; + printf("\t --%s%c\n", long_options[x].name, + long_options[x].has_arg ? '=' : ' '); + if ((help_message= lookup_help(long_options[x].val))) + printf("\t\t%s\n", help_message); + } - return ptr; + printf("\n"); + exit(0); }