Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*****************************************************************************
* This is a poor list. Insert only of a (node *).data with no ordering. * To create the list (and insert 1 item), call insertList(NULL, blah, blah...) */
#include "pch.h"
#include "lib3.h"
#include "list.h"
AssertData; AssertError;
void killList(node *thisList) { node *currRoot=thisList,*last;
while(currRoot) { last = currRoot; currRoot = currRoot->next; FreeCopyParams(last->lpCP); GlobalFree(last); } }
/*
insert a node. Small bug: if mem alloc fails for CopyParams, the list will have 1 extra fluff node at the end. */ node * insertList( node **thisList, LPCOPYPARAMS aNode, LPSHADOWINFO lpSI, LPWIN32_FIND_DATA lpFind32Local, LPWIN32_FIND_DATA lpFind32Remote, int iShadowStatus, int iFileStatus, unsigned int uAction) { node *startItem = *thisList; node *currItem = startItem;
if(startItem) { while(currItem->next) currItem = currItem->next; if(!(currItem->next = (node *) GlobalAlloc(GPTR,sizeof(node)))) return NULL; currItem = currItem->next; } else { if(!(startItem = (node *) GlobalAlloc(GPTR,sizeof(node)))) return NULL; currItem = startItem; *thisList = currItem; }
if(!(currItem->lpCP = LpAllocCopyParams())) { GlobalFree(currItem); return 0; } currItem->lpCP->hShare = aNode->hShare; currItem->lpCP->hDir = aNode->hDir; currItem->lpCP->hShadow = aNode->hShadow; lstrcpy(currItem->lpCP->lpLocalPath, aNode->lpLocalPath); lstrcpy(currItem->lpCP->lpSharePath, aNode->lpSharePath); lstrcpy(currItem->lpCP->lpRemotePath, aNode->lpRemotePath); currItem->iShadowStatus = iShadowStatus; currItem->iFileStatus = iFileStatus; currItem->uAction = uAction; memcpy(&(currItem->sSI), lpSI, sizeof(SHADOWINFO)); currItem->sSI.lpFind32 = NULL;
memcpy(&(currItem->sFind32Local), lpFind32Local, sizeof(WIN32_FIND_DATA));
if (lpFind32Remote) { Assert(sizeof(currItem->sFind32Remote) == sizeof(*lpFind32Remote));
currItem->sFind32Remote = *lpFind32Remote;
} else { memset(&(currItem->sFind32Remote), 0, sizeof(currItem->sFind32Remote)); }
currItem->next = (node *) NULL; return startItem; }
|