From 11306f2bd5354f93e07837157ddbb52e228087b8 Mon Sep 17 00:00:00 2001 From: brettlangdon Date: Mon, 22 Jul 2013 22:20:50 -0400 Subject: [PATCH] list_shift and queue_get now take a char** --- src/handlers.c | 27 +++++++++++++++++---------- src/queue.c | 2 +- src/queue.h | 2 +- src/util.c | 7 ++++--- src/util.h | 2 +- 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/handlers.c b/src/handlers.c index 5dea25e..d7f24e9 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -56,18 +56,24 @@ void handle_flush(KCLIST* tokens, FILE* client){ void handle_delete(KCLIST* tokens, FILE* client){ if(kclistcount(tokens)){ - char key[128]; - list_shift(tokens, key); - if(kcdbremove(db, key, strlen(key))){ - fputs("DELETED\r\n", client); + char* key; + list_shift(tokens, &key); + if(key != NULL){ + if(kcdbremove(db, key, strlen(key))){ + fputs("DELETED\r\n", client); + } + free(key); } } } void handle_get(KCLIST* tokens, FILE* client){ if(kclistcount(tokens)){ - char key[128]; - list_shift(tokens, key); + char* key; + list_shift(tokens, &key); + if(key == NULL){ + return; + } char out[1024]; char* result_buffer; size_t result_size; @@ -88,20 +94,20 @@ void handle_get(KCLIST* tokens, FILE* client){ queue_add(&requests, key); } fputs(out, client); + free(key); } else{ fputs("INVALID GET COMMAND: GET \r\n", client); - return; } } int handle_command(char* buffer, FILE* client){ int status = 0; - char command[1024]; KCLIST* tokens = kclistnew(); tokenize(tokens, buffer, " "); - list_shift(tokens, command); + char* command; + list_shift(tokens, &command); if(command != NULL){ - if(strcmp(command, "get") == 0){ + if(strncmp(command, "get", 3) == 0){ handle_get(tokens, client); } else if(strcmp(command, "stats") == 0){ handle_stats(tokens, client); @@ -118,6 +124,7 @@ int handle_command(char* buffer, FILE* client){ sprintf(out, "UNKNOWN COMMAND: %s\r\n", command); fputs(out, client); } + free(command); } kclistdel(tokens); diff --git a/src/queue.c b/src/queue.c index 27deb7a..c05ad74 100644 --- a/src/queue.c +++ b/src/queue.c @@ -21,7 +21,7 @@ void queue_add(PTR_QUEUE q, char* value){ pthread_cond_signal(&q->cond); } -void queue_get(PTR_QUEUE q, char* value){ +void queue_get(PTR_QUEUE q, char** value){ pthread_mutex_lock(&q->mutex); while(*(&q->size) == 0){ pthread_cond_wait(&q->cond, &q->mutex); diff --git a/src/queue.h b/src/queue.h index 20cc26b..f9bb611 100644 --- a/src/queue.h +++ b/src/queue.h @@ -17,7 +17,7 @@ typedef QUEUE* PTR_QUEUE; void queue_del(PTR_QUEUE q); void queue_init(PTR_QUEUE q); void queue_add(PTR_QUEUE q, char* value); -void queue_get(PTR_QUEUE q, char* value); +void queue_get(PTR_QUEUE q, char** value); int queue_size(PTR_QUEUE q); #endif diff --git a/src/util.c b/src/util.c index 09cf8d1..7a1da9d 100644 --- a/src/util.c +++ b/src/util.c @@ -1,10 +1,11 @@ #include "util.h" -void list_shift(KCLIST* list, char* next){ +void list_shift(KCLIST* list, char** next){ size_t size; const char* results = kclistget(list, 0, &size); - strcpy(next, results); - next[size] = 0; + *next = malloc((size * sizeof(char)) + 1); + strcpy(*next, results); + (*next)[size] = 0; kclistshift(list); } diff --git a/src/util.h b/src/util.h index d5a3c4b..279d1c7 100644 --- a/src/util.h +++ b/src/util.h @@ -3,7 +3,7 @@ #include -void list_shift(KCLIST* list, char* next); +void list_shift(KCLIST* list, char** next); void lower(char* word); void tokenize(KCLIST* tokens, char* base, char* delimiter); #endif