1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
#include <kalmia.h>
#include <stdint.h>
#include <stdio.h>
void *kai_expand_array(void **array, size_t *count, size_t element_size)
{
size_t new_count = *count + 1;
size_t new_size = element_size * new_count;
/* cast to unsigned char so we can do pointer arithmetic */
unsigned char *new_array = realloc(*array, new_size);
if (new_array == NULL) {
fprintf(stderr, "[kalmia] ERROR: failed to add %ul bytes to %ul-byte array!\n",
element_size, element_size * *count);
return NULL;
}
size_t offset = (*count * element_size) / sizeof(unsigned char);
void *new_element = new_array + offset;
*array = new_array;
*count = new_count;
return new_element;
}
size_t kai_text_to_reals(ka_real_t *dest, const char *str, size_t count)
{
char *nptr = (char*) str;
char *end;
size_t result = count;
int i;
for (i=0; i<count; i++) {
dest[i] = KA_STR_TO_REAL(nptr, &end);
if (nptr == end) {
result -= 1;
}
nptr = end;
}
return result;
}
size_t kai_text_to_longs(long *dest, const char *str, size_t count)
{
char *nptr = (char*) str;
char *end;
size_t result = count;
int i;
for (i=0; i<count; i++) {
dest[i] = strtol(nptr, &end, 10);
if (nptr == end) {
result -= 1;
}
nptr = end;
}
return result;
}
size_t kai_text_to_uints(unsigned int *dest, const char *str, size_t count)
{
char *nptr = (char*) str;
char *end;
size_t result = count;
int i;
for (i=0; i<count; i++) {
dest[i] = strtol(nptr, &end, 10);
if (nptr == end) {
result -= 1;
}
nptr = end;
}
return result;
}
void *kai_alloc(size_t size, const char *purpose)
{
void *buf = malloc(size);
if (buf == NULL) {
fprintf(stderr, "[kalmia] ERROR: failed to allocated %ul-byte buffer for %s\n", size, purpose);
return NULL;
}
return buf;
}
|