2 * This file is part of buxton.
4 * Copyright (C) 2013 Intel Corporation
6 * buxton is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as
8 * published by the Free Software Foundation; either version 2.1
9 * of the License, or (at your option) any later version.
22 #include "configurator.h"
27 size_t page_size(void)
29 static __thread size_t pgsz = 0;
32 if (_likely_(pgsz > 0)) {
36 r = sysconf(_SC_PAGESIZE);
43 void* greedy_realloc(void **p, size_t *allocated, size_t need)
51 if (*allocated >= need) {
55 a = MAX(64u, need * 2);
66 char* get_layer_path(BuxtonLayer *layer)
74 switch (layer->type) {
76 r = asprintf(&path, "%s/%s.db", buxton_db_path(), layer->name.value);
82 /* uid must already be set in layer before calling */
83 sprintf(uid, "%d", (int)layer->uid);
84 r = asprintf(&path, "%s/%s-%s.db", buxton_db_path(), layer->name.value, uid);
96 bool buxton_data_copy(BuxtonData* original, BuxtonData *copy)
98 BuxtonDataStore store;
103 switch (original->type) {
105 store.d_string.value = malloc(original->store.d_string.length);
106 if (!store.d_string.value) {
109 memcpy(store.d_string.value, original->store.d_string.value, original->store.d_string.length);
110 store.d_string.length = original->store.d_string.length;
113 store.d_int32 = original->store.d_int32;
116 store.d_uint32 = original->store.d_uint32;
119 store.d_int64 = original->store.d_int64;
122 store.d_uint64 = original->store.d_uint64;
125 store.d_float = original->store.d_float;
128 store.d_double = original->store.d_double;
131 store.d_boolean = original->store.d_boolean;
137 copy->type = original->type;
143 memset(copy, 0, sizeof(BuxtonData));
147 bool buxton_string_copy(BuxtonString *original, BuxtonString *copy)
149 if (!original || !copy) {
153 copy->value = malloc0(original->length);
158 memcpy(copy->value, original->value, original->length);
159 copy->length = original->length;
164 bool buxton_key_copy(_BuxtonKey *original, _BuxtonKey *copy)
166 if (!original || !copy) {
170 if (original->group.value) {
171 if (!buxton_string_copy(&original->group, ©->group)) {
175 if (original->name.value) {
176 if (!buxton_string_copy(&original->name, ©->name)) {
180 if (original->layer.value) {
181 if (!buxton_string_copy(&original->layer, ©->layer)) {
185 copy->type = original->type;
190 if (original->group.value) {
191 free(copy->group.value);
193 if (original->name.value) {
194 free(copy->name.value);
196 if (original->layer.value) {
197 free(copy->layer.value);
199 copy->type = BUXTON_TYPE_MIN;
204 bool buxton_copy_key_group(_BuxtonKey *original, _BuxtonKey *group)
206 if (!original || !group) {
210 if (original->group.value) {
211 if (!buxton_string_copy(&original->group, &group->group)) {
215 group->name = (BuxtonString){ NULL, 0 };
216 if (original->layer.value) {
217 if (!buxton_string_copy(&original->layer, &group->layer)) {
221 group->type = STRING;
226 if (original->group.value) {
227 free(group->group.value);
229 if (original->layer.value) {
230 free(group->layer.value);
232 group->type = BUXTON_TYPE_MIN;
237 void data_free(BuxtonData *data)
243 if (data->type == STRING && data->store.d_string.value) {
244 free(data->store.d_string.value);
249 void string_free(BuxtonString *string)
261 void key_free(_BuxtonKey *key)
267 free(key->group.value);
268 free(key->name.value);
269 free(key->layer.value);
273 const char* buxton_type_as_string(BuxtonDataType type)
297 char *get_group(_BuxtonKey *key)
299 if (key && key->group.value) {
300 return strdup(key->group.value);
306 char *get_name(_BuxtonKey *key)
308 if (key && key->name.value) {
309 return strdup(key->name.value);
315 char *get_layer(_BuxtonKey *key)
317 if (key && key->layer.value) {
318 return strdup(key->layer.value);
324 bool _write(int fd, uint8_t *buf, size_t nbytes)
326 size_t nbytes_out = 0;
328 while (nbytes_out != nbytes) {
330 b = write(fd, buf + nbytes_out, nbytes - nbytes_out);
332 if (b == -1 && errno != EAGAIN) {
333 buxton_debug("write error\n");
336 nbytes_out += (size_t)b;
343 * Editor modelines - http://www.wireshark.org/tools/modelines.html
348 * indent-tabs-mode: t
351 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
352 * :indentSize=8:tabSize=8:noTabs=false: