File: util.c

package info (click to toggle)
op 1.32-4
  • links: PTS, VCS
  • area: main
  • in suites: lenny, squeeze
  • size: 716 kB
  • ctags: 360
  • sloc: ansic: 2,272; sh: 800; lex: 447; makefile: 68
file content (87 lines) | stat: -rw-r--r-- 2,005 bytes parent folder | download
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
#include <stdio.h>
#include <ctype.h>
#include <stdarg.h>
#include <stdlib.h>
#include "defs.h"

#if !defined(HAVE_VSNPRINTF)
#warning Your system does not support vsnprintf.
#warning This leaves op open to potential buffer overflows.
#endif

void vstrnprintf(char *out, int len, const char *format, va_list args) {
#ifdef HAVE_VSNPRINTF
	vsnprintf(out, len, format, args);
#else
	vsprintf(out, format, args);
#endif
}

void strnprintf(char *out, int len, const char *format, ...) {
va_list args;

	va_start(args, format);
#ifdef HAVE_VSNPRINTF
	vsnprintf(out, len, format, args);
#else
	vsprintf(out, format, args);
#endif
	va_end(args);
}

char *strtolower(char *in) {
char *i;

	for (i = in; *i; ++i) *i = tolower(*i);
	return in;
}

array_t *array_alloc() {
array_t *array = malloc(sizeof(array_t));

	if (!array || !(array->data = malloc(sizeof(void**) * ARRAY_CHUNK)))
		fatal(1, "failed to allocate array");
	array->capacity = ARRAY_CHUNK;
	array->size = 0;
	return array;
}

void array_free(array_t *array) {
	free(array->data);
	free(array);
}

array_t *array_free_contents(array_t *array) {
int i;

	for (i = 0; i < array->size; ++i)
		free(array->data[i]);
	array->size = 0;
	return array;
}

void *array_push(array_t *array, void *object) {
	if (array->size + 1 >= array->capacity) {
		array->capacity += ARRAY_CHUNK;
		if (!(array->data = realloc(array->data, sizeof(void**) * array->capacity)))
			fatal(1, "failed to extend array");
	}
	return (array->data[array->size++] = object);
}

void *array_pop(array_t *array) {
	if (array->size <= 0) return NULL;
	return array->data[--array->size];
}

int array_extend(array_t *array, int capacity) {
	if (capacity < array->capacity) return 0;
	array->capacity = capacity;
	array->data = realloc(array->data, sizeof(void**) * array->capacity);
	return 1;
}

#undef malloc
void * rpl_malloc (size_t n) { if (n == 0) n = 1; return malloc (n); }
#undef realloc
void * rpl_realloc (void *ptr, size_t n) { if (n == 0) n = 1; return realloc (ptr, n); }