contrib/champ/strblock.c (62 lines of code) (raw):

/* A* ------------------------------------------------------------------- B* This file contains source code for the PyMOL computer program C* copyright 1998-2000 by Warren Lyford Delano of DeLano Scientific. D* ------------------------------------------------------------------- E* It is unlawful to modify or remove this copyright notice. F* ------------------------------------------------------------------- G* Please see the accompanying LICENSE file for further information. H* ------------------------------------------------------------------- I* Additional authors of this source file include: -* -* -* Z* ------------------------------------------------------------------- */ #include"os_std.h" #include"os_memory.h" #include"mac.h" #include"vla.h" #include"strblock.h" /* TEST */ #ifdef _STRLIST_UT int main(int argc, char *argv[]) { char *sb; char buffer[256]; int a,b,c; int index; buffer[0]=0; sb = StrBlockNew(10); b = rand()&0xFF; for(a=0;a<100000;a++) { index = StrBlockNewStr(&sb,NULL,b); for(c=0;c<b;c++) { sb[c+index]='a'; } } return 0; } #endif /* end unit test */ /* right now just a braindead, memory-leaky system */ int StrBlockNewStr(char **list_ptr,char *st,int len) { StrBlock *I; register int a; register char *p,*q; char *str; int result, new_extent; I=*((StrBlock**)list_ptr); new_extent = len + 1 + I->next_unused; vla_check(I,StrBlock,new_extent); (*((StrBlock**)list_ptr))=I; result = I->next_unused; str = (char*)(((char*)I)+I->next_unused); if(st) { p = st; q = str; for(a=0;a<len;a++) *(q++)=*(p++); } else str[0]=0; str[len]=0; I->next_unused = new_extent; return result; } char *StrBlockNew(int init_size) { StrBlock *I; I = (StrBlock*)VLAMalloc(init_size+sizeof(StrBlock),sizeof(char),5,0); I->next_unused = sizeof(StrBlock); return (char*)I; } void StrBlockFreeStr(char *list,int index) { /* just leak within the array */ } void StrBlockFree(char *list) { VLAFree(list); }