--- np2/common/lstarray.c 2003/10/16 17:57:10 1.1.1.1 +++ np2/common/lstarray.c 2005/02/09 20:11:34 1.5 @@ -6,6 +6,7 @@ LISTARRAY listarray_new(size_t listsize, LISTARRAY laRet = NULL; UINT dwSize; + listsize = (listsize + 3) & (~3); dwSize = sizeof(_LISTARRAY); dwSize += listsize * maxitems; @@ -60,7 +61,7 @@ UINT listarray_getitems(LISTARRAY laHand void *listarray_append(LISTARRAY laHandle, const void *vpItem) { LISTARRAY laNext; - char *p; + UINT8 *p; if (laHandle == NULL) { goto laapp_err; @@ -77,7 +78,7 @@ void *listarray_append(LISTARRAY laHandl } laHandle = laNext; } - p = (char *)(laHandle + 1); + p = (UINT8 *)(laHandle + 1); p += laHandle->items * laHandle->listsize; if (vpItem) { CopyMemory(p, vpItem, laHandle->listsize); @@ -96,7 +97,7 @@ void *listarray_getitem(LISTARRAY laHand while(laHandle) { if (num < laHandle->items) { - return((char *)(laHandle + 1) + (laHandle->listsize * num)); + return((UINT8 *)(laHandle + 1) + (laHandle->listsize * num)); } num -= laHandle->items; laHandle = laHandle->laNext; @@ -104,8 +105,28 @@ void *listarray_getitem(LISTARRAY laHand return(NULL); } +UINT listarray_getpos(LISTARRAY laHandle, void *vpItem) { + + UINT pos; + UINT i; + + pos = 0; + while(laHandle) { + UINT8 *p = (UINT8 *)(laHandle + 1); + for (i=0; iitems; i++) { + if ((long)p == (long)vpItem) { + return(pos + i); + } + p += laHandle->listsize; + } + pos += laHandle->items; + laHandle = laHandle->laNext; + } + return((UINT)-1); +} + void *listarray_enum(LISTARRAY laHandle, - BOOL (*cbProc)(void *vpItem, void *vpArg), void *vpArg) { + BOOL (*cbProc)(void *vpItem, void *vpArg), void *vpArg) { UINT i; @@ -114,7 +135,7 @@ void *listarray_enum(LISTARRAY laHandle, } while(laHandle) { - char *p = (char *)(laHandle + 1); + UINT8 *p = (UINT8 *)(laHandle + 1); for (i=0; iitems; i++) { if (cbProc((void *)p, vpArg)) { return((void *)p);