X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fmemcached_get.c;h=560a50de07dffb36274fcaff566ecc350a6dac48;hb=557de9b08007dd2b482778ba934574bcf7ee531f;hp=a18854506d4743b9fb7d404786adbd16434c34e1;hpb=875200dc0c5668bba4f8a68b487f9d2f2a1eedb0;p=m6w6%2Flibmemcached diff --git a/lib/memcached_get.c b/lib/memcached_get.c index a1885450..560a50de 100644 --- a/lib/memcached_get.c +++ b/lib/memcached_get.c @@ -5,7 +5,7 @@ char *memcached_get(memcached_st *ptr, char *key, size_t key_length, uint16_t *flags, memcached_return *error) { - size_t send_length; + size_t send_length, sent_length; char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; char *string_ptr; unsigned int server_key; @@ -20,11 +20,26 @@ char *memcached_get(memcached_st *ptr, char *key, size_t key_length, send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, "get %.*s\r\n", (int)key_length, key); - if (*error != MEMCACHED_SUCCESS) + + if (send_length >= MEMCACHED_DEFAULT_COMMAND_SIZE) + { + *error= MEMCACHED_WRITE_FAILURE; return NULL; + } + + sent_length= write(ptr->hosts[server_key].fd, buffer, send_length); + + if (sent_length == -1) + { + fprintf(stderr, "error %s: write: %m\n", __FUNCTION__); + *error= MEMCACHED_WRITE_FAILURE; + return NULL; + } - if ((write(ptr->hosts[server_key].fd, buffer, send_length) == -1)) + if (sent_length != send_length) { + fprintf(stderr, "error %s: short write %d %d: %m\n", + __FUNCTION__, sent_length, send_length); *error= MEMCACHED_WRITE_FAILURE; return NULL; }