Merge from Mark's code. Modified memcat to use enum for options.
[awesomized/libmemcached] / src / memcp.c
1 #include <stdio.h>
2 #include <sys/types.h>
3 #include <sys/stat.h>
4 #include <sys/types.h>
5 #include <sys/mman.h>
6 #include <fcntl.h>
7
8 #include <memcached.h>
9
10 int main(int argc, char *argv[])
11 {
12 memcached_st *memc;
13 char *string;
14 unsigned int x;
15 size_t string_length;
16 uint16_t flags;
17 memcached_return rc;
18
19 if (argc < 3)
20 return 0;
21
22 memc= memcached_init(NULL);
23
24 /* Get the server name */
25 {
26 char *ptr;
27 char *hostname;
28 size_t hostname_length;
29 unsigned int port;
30
31 ptr= index(argv[argc-1], ':');
32
33 if (ptr)
34 {
35 hostname_length= ptr - argv[argc-1];
36 hostname= (char *)malloc(hostname_length+1);
37 memset(hostname, 0, hostname_length+1);
38 memcpy(hostname, argv[argc-1], hostname_length);
39
40 ptr++;
41
42 port= strtol(ptr, (char **)NULL, 10);
43
44 memcached_server_add(memc, hostname, port);
45 free(hostname);
46 }
47 else
48 {
49 memcached_server_add(memc, argv[argc -1], 0);
50 }
51 }
52
53 for (x= 1; x < argc-1; x++)
54 {
55 char *mptr;
56 struct stat sbuf;
57 int fd;
58 char *ptr;
59
60 fd= open(argv[x], O_RDONLY);
61
62 if (fd == -1)
63 {
64 fprintf(stderr, "Failed opening %s\n", argv[x]);
65 exit(1);
66 }
67
68 (void)fstat(fd, &sbuf);
69 mptr= mmap(NULL, sbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
70
71 ptr= rindex(argv[x], '/');
72 if (ptr)
73 {
74 ptr++;
75 }
76 else
77 {
78 ptr= argv[x];
79 }
80
81 rc= memcached_set(memc, ptr, strlen(ptr),
82 mptr, sbuf.st_size,
83 (time_t)0, (uint16_t)0);
84
85 munmap(mptr, sbuf.st_size);
86 close(fd);
87 }
88
89 memcached_deinit(memc);
90
91 return 0;
92 };