xptiWorkingSet* aWorkingSet = (xptiWorkingSet*) arg;
xptiWorkingSet* aSrcWorkingSet = ((TwoWorkingSets*)arg)->aSrcWorkingSet; xptiWorkingSet* aDestWorkingSet = ((TwoWorkingSets*)arg)->aDestWorkingSet;
xpti_Merger(PLHashEntry *he, PRIntn i, void *arg){    xptiInterfaceInfo* srcInfo = (xptiInterfaceInfo*) he->value;    xptiWorkingSet* aWorkingSet = (xptiWorkingSet*) arg;    xptiInterfaceInfo* destInfo = (xptiInterfaceInfo*)            PL_HashTableLookup(aWorkingSet->mIIDTable, srcInfo->GetTheIID());        if(destInfo)    {        // XXX we could do some serious validation here!    }    else    {        // Clone the xptiInterfaceInfo into our WorkingSet.        xptiTypelib typelibRecord;        uint16 fileIndex = srcInfo->GetTypelibRecord().GetFileIndex();        uint16 zipItemIndex = srcInfo->GetTypelibRecord().GetZipItemIndex();                fileIndex += aWorkingSet->mFileMergeOffsetMap[fileIndex];                // If it is not a zipItem, then the original index is fine.        if(srcInfo->GetTypelibRecord().IsZip())            zipItemIndex += aWorkingSet->mZipItemMergeOffsetMap[zipItemIndex];        typelibRecord.Init(fileIndex, zipItemIndex);                            destInfo = new xptiInterfaceInfo(*srcInfo, typelibRecord, aWorkingSet);        if(!destInfo)        {            // XXX bad! should log            return HT_ENUMERATE_NEXT;            }        NS_ADDREF(destInfo);        if(!destInfo->IsValid())        {            // XXX bad! should log            NS_RELEASE(destInfo);            return HT_ENUMERATE_NEXT;            }        // The name table now owns the reference we AddRef'd above        PL_HashTableAdd(aWorkingSet->mNameTable, destInfo->GetTheName(), destInfo);        PL_HashTableAdd(aWorkingSet->mIIDTable, destInfo->GetTheIID(), destInfo);    }    return HT_ENUMERATE_NEXT;}       