~mordred/libmemcached/fix-weird-link

« back to all changes in this revision

Viewing changes to libmemcached/memcached_delete.c

  • Committer: brian@gir-2.local
  • Date: 2008-03-10 15:04:41 UTC
  • mto: (317.6.1)
  • mto: This revision was merged to the branch mainline in revision 321.
  • Revision ID: brian@gir-2.local-20080310150441-jyhbjx6bwo46f6tg
Huge refactoring of directory structure.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "common.h"
 
2
 
 
3
memcached_return memcached_delete(memcached_st *ptr, char *key, size_t key_length,
 
4
                                  time_t expiration)
 
5
{
 
6
  return memcached_delete_by_key(ptr, key, key_length,
 
7
                                 key, key_length, expiration);
 
8
}
 
9
 
 
10
memcached_return memcached_delete_by_key(memcached_st *ptr, 
 
11
                                         char *master_key, size_t master_key_length,
 
12
                                         char *key, size_t key_length,
 
13
                                         time_t expiration)
 
14
{
 
15
  char to_write;
 
16
  size_t send_length;
 
17
  memcached_return rc;
 
18
  char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
 
19
  unsigned int server_key;
 
20
 
 
21
  LIBMEMCACHED_MEMCACHED_DELETE_START();
 
22
 
 
23
  unlikely (key_length == 0)
 
24
    return MEMCACHED_NO_KEY_PROVIDED;
 
25
 
 
26
  unlikely (ptr->hosts == NULL || ptr->number_of_hosts == 0)
 
27
    return MEMCACHED_NO_SERVERS;
 
28
 
 
29
  server_key= memcached_generate_hash(ptr, master_key, master_key_length);
 
30
 
 
31
  if (expiration)
 
32
    send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, 
 
33
                          "delete %.*s %llu\r\n", (int)key_length, key, 
 
34
                          (unsigned long long)expiration);
 
35
  else
 
36
    send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, 
 
37
                          "delete %.*s\r\n", (int)key_length, key);
 
38
 
 
39
  if (send_length >= MEMCACHED_DEFAULT_COMMAND_SIZE)
 
40
  {
 
41
    rc= MEMCACHED_WRITE_FAILURE;
 
42
    goto error;
 
43
  }
 
44
 
 
45
  to_write= (ptr->flags & MEM_BUFFER_REQUESTS) ? 0 : 1;
 
46
 
 
47
  rc= memcached_do(&ptr->hosts[server_key], buffer, send_length, to_write);
 
48
  if (rc != MEMCACHED_SUCCESS)
 
49
    goto error;
 
50
 
 
51
  if ((ptr->flags & MEM_BUFFER_REQUESTS))
 
52
  {
 
53
    rc= MEMCACHED_BUFFERED;
 
54
  }
 
55
  else
 
56
  {
 
57
    rc= memcached_response(&ptr->hosts[server_key], buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
 
58
    if (rc == MEMCACHED_DELETED)
 
59
      rc= MEMCACHED_SUCCESS;
 
60
  }
 
61
 
 
62
error:
 
63
  LIBMEMCACHED_MEMCACHED_DELETE_END();
 
64
  return rc;
 
65
}