summaryrefslogtreecommitdiff
path: root/libgammu/misc/array.c
blob: 529a031dd5fb1b148f5531c034554f6610cd7099 (plain)
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
/**
 * \file array.h
 * \author Michal Čihař
 *
 * String arrays handling code.
 */

#include "array.h"

#include <stdlib.h>
#include <string.h>

void GSM_StringArray_New(GSM_StringArray *array)
{
	array->used = 0;
	array->allocated = 0;
	array->data = NULL;
}

void GSM_StringArray_Free(GSM_StringArray *array)
{
	size_t i;
	for (i = 0; i < array->used; i++) {
		free(array->data[i]);
	}
	free(array->data);
	GSM_StringArray_New(array);
}

gboolean GSM_StringArray_Add(GSM_StringArray *array, const char *string)
{
	char **newdata;

	/* Allocate extra space if needed */
	if (array->used + 1 > array->allocated) {
		newdata = realloc(array->data, (array->allocated + 10) * sizeof(char *));
		if (newdata == NULL) return FALSE;
		array->allocated += 10;
		array->data = newdata;
	}

	array->data[array->used] = strdup(string);
	if (array->data[array->used] == NULL) return FALSE;

	array->used++;

	return TRUE;
}

gboolean GSM_StringArray_Find(GSM_StringArray *array, const char *string)
{
	size_t i;
	for (i = 0; i < array->used; i++) {
		if (strcmp(array->data[i], string) == 0) return TRUE;
	}
	return FALSE;
}

/* Editor configuration
 * vim: noexpandtab sw=8 ts=8 sts=8 tw=72:
 */