示例#1
0
static void
test_11()
{
	slist sl;
	slist *l = &sl;

	slist_init(l);
	slist_add(l, (void *)1);
	slist_add(l, (void *)2);
	ASSERT((int)slist_remove_last(l) == 2);
	ASSERT((int)slist_length(l) == 1);
	ASSERT((int)slist_remove_last(l) == 1);
	ASSERT((int)slist_length(l) == 0);
}
示例#2
0
文件: list.c 项目: ryanfzy/c-codes
bool slist_remove(SList *plist, unsigned int ipos, char *pdata, size_t isize)
{
    if (ipos >= plist->icount)
        return false;
    else if (ipos == 0)
        return slist_remove_first(plist, pdata, isize);
    else if (ipos == plist->icount - 1)
        return slist_remove_last(plist, pdata, isize);
    else
    {
        ListNode *pbefore = plist->pfirst;
        for (int i = 1; i < ipos; i++)
            pbefore = pbefore->pnext;
        ListNode *pcur = pbefore->pnext;
        ListNode *pafter = pcur->pnext;
        if (pdata != NULL && isize > 0)
        {
            int iminsize = isize > pcur->isize ? pcur->isize : isize;
            memcpy(pdata, pcur->pdata, iminsize);
        }
        slistnode_free(pcur);
        plist->icount--;
        pbefore->pnext = pafter;
    }
    return true;
}