commit 230491250a1447df219efb3f069a5c3fe524fc74
parent aaf9ec62504a6c8f52ad021b3d6c19aba1859977
Author: Anselm R. Garbe <garbeam@wmii.de>
Date: Mon, 3 Apr 2006 13:05:40 +0200
changed evector somewhat to use memmove and stdio
Diffstat:
2 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/libcext/cext.h b/libcext/cext.h
@@ -25,8 +25,8 @@ typedef struct { \
EVECTOR(evector_t, void*);
-void cext_evector_attach(evector_t *vector, void *data_to_be_added);
-void cext_evector_detach(evector_t *vector, void *data_to_be_removed);
+void cext_evector_attach(evector_t *v, void *p);
+void cext_evector_detach(evector_t *v, void *p);
/* estrdup.c */
char *cext_estrdup(const char *s);
diff --git a/libcext/evector.c b/libcext/evector.c
@@ -1,19 +1,20 @@
/* extendible vectors. Icarus Sparry 2006. Public domain. */
#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
#include <unistd.h>
#include "cext.h"
-#define ERRMSG "Out of memory in cext_evector_attach\n"
void
cext_evector_attach(evector_t *v, void *p)
{
++v->size;
if (!(v->data = realloc(v->data, v->size * sizeof(void *)))) {
- write(2,ERRMSG,sizeof(ERRMSG)-1);
- exit(99);
+ fprintf(stderr, "%s\n", "Out of memory in cext_evector_attach\n");
+ exit(1);
}
- v->data[v->size-1]=p;
+ v->data[v->size - 1]=p;
}
void
@@ -21,13 +22,11 @@ cext_evector_detach(evector_t *v, void *data)
{
void **p = v->data, **end;
if (!p) return;
- for(end=p+v->size-1; p<=end; p++)
+ for(end = p + v->size - 1; p <= end; p++)
if (*p == data) {
- for(; p<end; p++)
- p[0] = p[1]; /* Could use memmove rather than this loop */
+ memmove(p, p + 1, end - (p + 1));
*end = nil;
--v->size;
return;
}
}
-