EssentialFiles2Components(fullPathStr);
InflateFiles(void *hZip, void *hFind, short tgtVRefNum, long tgtDirID){	OSErr		err = noErr;	Boolean		bFoundAll = false;	PRInt32		rv = 0;	char		filename[255] = "\0", *lastslash, *leaf;	Handle		fullPathH = 0;	short 		fullPathLen = 0;	Ptr			fullPathStr = 0;	StringPtr	extractedFile = 0;	FSSpec		extractedFSp, outFSp;			while (!bFoundAll)	{		/* find next item if one exists */		rv = ZIP_FindNext( hFind, filename, 255 );		if (rv==ZIP_ERR_FNF)		{			bFoundAll = true;			break;		}		else if (rv!=ZIP_OK)			return rv;					/* ignore if item is a dir entry */			lastslash = strrchr(filename, '/');		if (lastslash == (&filename[0] + strlen(filename) - 1)) /* dir entry encountered */			continue;					/* grab leaf filename only */		if (lastslash == 0)			leaf = filename;		else			leaf = lastslash + 1;				/* obtain and NULL terminate the full path string */		err = GetFullPath(tgtVRefNum, tgtDirID, "\p", &fullPathLen, &fullPathH); /* get dirpath */		if (err!=noErr)			return err;		HLock(fullPathH);		fullPathStr = NewPtrClear(fullPathLen + strlen(filename) + 1);		strncat(fullPathStr, *fullPathH, fullPathLen);		strcat(fullPathStr, leaf);	/* tack on filename to dirpath */		*(fullPathStr+fullPathLen+strlen(leaf)) = '\0';				/* create directories if file is nested in new subdirs */		SLASHES_2_COLONS(fullPathStr);		err = DirCreateRecursive(fullPathStr);							if (err!=noErr)		{			if (fullPathStr) 				DisposePtr((Ptr)fullPathStr);			if (fullPathH)			{				HUnlock(fullPathH);								DisposeHandle(fullPathH);			}			continue; /* XXX do we want to do this? */		}				/* extract the file to its full path destination */		rv = ZIP_ExtractFile( hZip, filename, fullPathStr );				HUnlock(fullPathH);		if (fullPathH)			DisposeHandle(fullPathH);		if (rv!=ZIP_OK)		{			if (fullPathStr)				DisposePtr((Ptr)fullPathStr);						return rv;		}				/* AppleSingle decode if need be */		extractedFile = CToPascal(fullPathStr); 		if (extractedFile)		{			err = FSMakeFSSpec(0, 0, extractedFile, &extractedFSp);			err = FSMakeFSSpec(0, 0, extractedFile, &outFSp);			err = AppleSingleDecode(&extractedFSp, &outFSp);						/* delete original file if named different than final file */			if (!pstrcmp(extractedFSp.name, outFSp.name))			{				err = FSpDelete(&extractedFSp);			}		}					/* record for cleanup later */		FSMakeFSSpec(outFSp.vRefNum, outFSp.parID, outFSp.name, &coreFileList[currCoreFile]);		currCoreFile++;				/* progress bar update (roll the barber poll) */		if (gWPtr)			IdleControls(gWPtr);						if (extractedFile)			DisposePtr((Ptr)extractedFile);		if (fullPathStr)			DisposePtr(fullPathStr);	}	return err;}