From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <008601c34591$54e87200$d2944251@insultant.net> From: "boyd, rounin" To: <9fans@cse.psu.edu> References: <3F0B273E.30201@proweb.co.uk> Subject: Re: [9fans] Rstat needs three size fields? MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Date: Tue, 8 Jul 2003 22:41:39 +0200 Topicbox-Message-UUID: ef3b0aec-eacb-11e9-9e20-41e7f4b1d025 > yes, tis true, but only temporarily tis true it's a god-awful algorithm. mangle the pointer from char * to void * in this: typedef long msg_idx; typedef struct { msg_idx v_count; msg_idx v_size; msg_idx v_incr; char **v_list; } vec; echo vec.c sed 's/.//' >vec.c <<'//GO.SYSIN DD vec.c' -/* - * Dynamic vector of strings. - */ - -#ifndef lint -static char sccsid[] = "@(#)vec.c 1.31"; -#endif lint - -#include "mace.h" - -void -vec_init(v, n) -register vec *v; -register int n; -{ - v->v_count = 0; - v->v_size = v->v_incr = n; - v->v_list = (char **)salloc(n * sizeof(char *)); -} - -char * -vec_str(v, s) -register vec *v; -register char *s; -{ - if (v->v_count == v->v_size) - v->v_list = (char **)srealloc((char *)v->v_list, (int)(v->v_size += v->v_incr) * sizeof(char *)); - - v->v_list[v->v_count++] = s; - - return s; -} - -char * -vec_cat(v, s) -register vec *v; -register char *s; -{ - if (v->v_count != 0) - { - register char *p; - - if (v->v_list[v->v_count - 1] != NULLSTR) - { - p = concat(v->v_list[v->v_count - 1], s); - - (void)free(v->v_list[v->v_count - 1]); - (void)free(s); - } - else - p = s; - - return v->v_list[v->v_count - 1] = p; - } - else - return vec_str(v, s); -} - -void -vec_free(v) -register vec *v; -{ - register int i; - - for (i = 0; i < v->v_count; i++) - { - if (v->v_list[i] != NULLSTR) - (void)free(v->v_list[i]); - } - - v->v_count = 0; - v->v_size = 0; - v->v_incr = 0; - (void)free((char *)v->v_list); -} //GO.SYSIN DD vec.c i think that demonstrates the concept.