~brianaker/libmemcached/1164440

928.2.7 by Brian Aker
Import parser/etc
1
/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
2
 * 
3
 *  LibMemcached
4
 *
5
 *  Copyright (C) 2011 Data Differential, http://datadifferential.com/
6
 *  All rights reserved.
7
 *
8
 *  Redistribution and use in source and binary forms, with or without
9
 *  modification, are permitted provided that the following conditions are
10
 *  met:
11
 *
12
 *      * Redistributions of source code must retain the above copyright
13
 *  notice, this list of conditions and the following disclaimer.
14
 *
15
 *      * Redistributions in binary form must reproduce the above
16
 *  copyright notice, this list of conditions and the following disclaimer
17
 *  in the documentation and/or other materials provided with the
18
 *  distribution.
19
 *
20
 *      * The names of its contributors may not be used to endorse or
21
 *  promote products derived from this software without specific prior
22
 *  written permission.
23
 *
24
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27
 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28
 *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29
 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30
 *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31
 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32
 *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34
 *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
 *
36
 */
37
929.1.99 by Brian Aker
Merge in fetch updates/break out memory/create error bits for host failures.
38
#include <libmemcached/common.h>
929.1.104 by Brian Aker
This fixes bug 776354.
39
#include <assert.h>
40
#include <iso646.h>
928.2.7 by Brian Aker
Import parser/etc
41
42
struct memcached_array_st
43
{
1144.1.2 by Brian Aker
Clean up interfaces so that 1.2 is a bit easier to upgrade too.
44
  Memcached *root;
928.2.7 by Brian Aker
Import parser/etc
45
  size_t size;
46
  char c_str[];
47
};
48
929.1.99 by Brian Aker
Merge in fetch updates/break out memory/create error bits for host failures.
49
1144.1.2 by Brian Aker
Clean up interfaces so that 1.2 is a bit easier to upgrade too.
50
memcached_array_st *memcached_array_clone(Memcached *memc, const memcached_array_st *original)
928.2.9 by Brian Aker
Fix prefix key so that it is not statically built.
51
{
1041 by Brian Aker
Fix cppcheck warnings.
52
  if (original)
53
  {
54
    return memcached_strcpy(memc, original->c_str, original->size);
55
  }
928.2.9 by Brian Aker
Fix prefix key so that it is not statically built.
56
1041 by Brian Aker
Fix cppcheck warnings.
57
  return NULL;
928.2.9 by Brian Aker
Fix prefix key so that it is not statically built.
58
}
59
1144.1.2 by Brian Aker
Clean up interfaces so that 1.2 is a bit easier to upgrade too.
60
memcached_array_st *memcached_strcpy(Memcached *memc, const char *str, size_t str_length)
928.2.9 by Brian Aker
Fix prefix key so that it is not statically built.
61
{
929.1.104 by Brian Aker
This fixes bug 776354.
62
  assert(memc);
63
  assert(str);
64
  assert(str_length);
65
928.2.9 by Brian Aker
Fix prefix key so that it is not statically built.
66
  memcached_array_st *array= (struct memcached_array_st *)libmemcached_malloc(memc, sizeof(struct memcached_array_st) +str_length +1);
67
1041 by Brian Aker
Fix cppcheck warnings.
68
  if (array)
69
  {
70
    array->root= memc;
71
    array->size= str_length; // We don't count the NULL ending
72
    memcpy(array->c_str, str, str_length);
73
    array->c_str[str_length]= 0;
74
  }
928.2.7 by Brian Aker
Import parser/etc
75
76
  return array;
77
}
78
929.1.104 by Brian Aker
This fixes bug 776354.
79
bool memcached_array_is_null(memcached_array_st *array)
80
{
1041 by Brian Aker
Fix cppcheck warnings.
81
  if (array)
82
  {
83
    return false;
84
  }
929.1.104 by Brian Aker
This fixes bug 776354.
85
86
  return true;
87
}
88
928.2.11 by Brian Aker
Updates to configuration API.
89
memcached_string_t memcached_array_to_string(memcached_array_st *array)
90
{
929.1.104 by Brian Aker
This fixes bug 776354.
91
  assert(array);
92
  assert(array->c_str);
93
  assert(array->size);
928.2.11 by Brian Aker
Updates to configuration API.
94
  memcached_string_t tmp;
95
  tmp.c_str= array->c_str;
96
  tmp.size= array->size;
97
98
  return tmp;
99
}
100
928.2.7 by Brian Aker
Import parser/etc
101
void memcached_array_free(memcached_array_st *array)
102
{
1041 by Brian Aker
Fix cppcheck warnings.
103
  if (array)
104
  {
105
    WATCHPOINT_ASSERT(array->root);
106
    libmemcached_free(array->root, array);
107
  }
928.2.9 by Brian Aker
Fix prefix key so that it is not statically built.
108
}
109
110
size_t memcached_array_size(memcached_array_st *array)
111
{
1041 by Brian Aker
Fix cppcheck warnings.
112
  if (array)
113
  {
114
    return array->size;
115
  }
928.2.9 by Brian Aker
Fix prefix key so that it is not statically built.
116
1041 by Brian Aker
Fix cppcheck warnings.
117
  return 0;
928.2.9 by Brian Aker
Fix prefix key so that it is not statically built.
118
}
119
120
const char *memcached_array_string(memcached_array_st *array)
121
{
1041 by Brian Aker
Fix cppcheck warnings.
122
  if (array)
123
  {
124
    return array->c_str;
125
  }
928.2.9 by Brian Aker
Fix prefix key so that it is not statically built.
126
1041 by Brian Aker
Fix cppcheck warnings.
127
  return NULL;
928.2.7 by Brian Aker
Import parser/etc
128
}