~brianaker/libmemcached/embedded

« back to all changes in this revision

Viewing changes to lib/memcached_parse.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
 
/* 
2
 
  I debated about putting this in the client library since it does an 
3
 
  action I don't really believe belongs in the library.
4
 
 
5
 
  Frankly its too damn useful not to be here though.
6
 
*/
7
 
 
8
 
#include <memcached.h>
9
 
#include "common.h"
10
 
 
11
 
memcached_server_st *memcached_servers_parse(char *server_strings)
12
 
{
13
 
  char *string;
14
 
  unsigned int port;
15
 
  char *begin_ptr;
16
 
  char *end_ptr;
17
 
  memcached_server_st *servers= NULL;
18
 
  memcached_return rc;
19
 
 
20
 
  WATCHPOINT_ASSERT(server_strings);
21
 
 
22
 
  end_ptr= server_strings + strlen(server_strings);
23
 
 
24
 
  for (begin_ptr= server_strings, string= index(server_strings, ','); 
25
 
       begin_ptr != end_ptr; 
26
 
       string= index(begin_ptr, ','))
27
 
  {
28
 
    char buffer[HUGE_STRING_LEN];
29
 
    char *ptr;
30
 
    port= 0;
31
 
 
32
 
    if (string)
33
 
    {
34
 
      memcpy(buffer, begin_ptr, string - begin_ptr);
35
 
      buffer[(unsigned int)(string - begin_ptr)]= 0;
36
 
      begin_ptr= string+1;
37
 
    }
38
 
    else
39
 
    {
40
 
      size_t length= strlen(begin_ptr);
41
 
      memcpy(buffer, begin_ptr, length);
42
 
      buffer[length]= 0;
43
 
      begin_ptr= end_ptr;
44
 
    }
45
 
 
46
 
    ptr= index(buffer, ':');
47
 
 
48
 
    if (ptr)
49
 
    {
50
 
      ptr[0]= 0;
51
 
 
52
 
      ptr++;
53
 
 
54
 
      port= strtol(ptr, (char **)NULL, 10);
55
 
    }
56
 
 
57
 
    servers= memcached_server_list_append(servers, buffer, port, &rc);
58
 
 
59
 
    if (isspace(*begin_ptr))
60
 
      begin_ptr++;
61
 
  }
62
 
 
63
 
  return servers;
64
 
}