void nsEudoraAddress::ResolveEntries( nsCString& name, nsVoidArray& list, nsVoidArray& result, PRBool addResolvedEntries, PRBool wasResolved, PRInt32& numResolved) { /* a safe-guard against recursive entries */ if (result.Count() > m_alias.Count()) return; PRInt32 max = list.Count(); PRInt32 i; CAliasData * pData; CAliasEntry * pEntry; for (i = 0; i < max; i++) { pData = (CAliasData *)list.ElementAt( i); // resolve the email to an existing alias! if ( !name.Equals(pData->m_email, nsCaseInsensitiveCStringComparator()) && ((pEntry = ResolveAlias( pData->m_fullEntry)) != nsnull) ) { // This new entry has all of the entries for this puppie. // Resolve all of it's entries! numResolved++; // Track the number of entries resolved // We pass in PR_TRUE for the 5th parameter so that we know that we're // calling ourselves recursively. ResolveEntries( pEntry->m_name, pEntry->m_list, result, addResolvedEntries, PR_TRUE, numResolved); } else if (addResolvedEntries || !wasResolved) { // This is either an ordinary entry (i.e. just contains the info) or we were told // to add resolved alias entries. result.AppendElement( pData); } } }
void nsEudoraAddress::ResolveEntries( nsCString& name, nsVoidArray& list, nsVoidArray& result) { /* a safe-guard against recursive entries */ if (result.Count() > m_alias.Count()) return; PRInt32 max = list.Count(); PRInt32 i; CAliasData * pData; CAliasEntry * pEntry; for (i = 0; i < max; i++) { pData = (CAliasData *)list.ElementAt( i); // resolve the email to an existing alias! if (!name.Equals( pData->m_email, nsCaseInsensitiveCStringComparator()) && ((pEntry = ResolveAlias( pData->m_email)) != nsnull)) { // This new entry has all of the entries for this puppie. // Resolve all of it's entries! ResolveEntries( pEntry->m_name, pEntry->m_list, result); } else { result.AppendElement( pData); } } }
pascal OSErr FSpLocationFromFullPath(short fullPathLength, const void *fullPath, FSSpec *spec) { AliasHandle alias; OSErr result; Boolean wasChanged; Str32 nullString; /* Create a minimal alias from the full pathname */ nullString[0] = 0; /* null string to indicate no zone or server name */ result = NewAliasMinimalFromFullPath(fullPathLength, fullPath, nullString, nullString, &alias); if ( result == noErr ) { /* Let the Alias Manager resolve the alias. */ result = ResolveAlias(NULL, alias, spec, &wasChanged); /* work around Alias Mgr sloppy volume matching bug */ if ( spec->vRefNum == 0 ) { /* invalidate wrong FSSpec */ spec->parID = 0; spec->name[0] = 0; result = nsvErr; } DisposeHandle((Handle)alias); /* Free up memory used */ } return ( result ); }
OSErr find_exec_spec(FSSpec *result, FSSpec *myself) { OSErr err; CInfoPBRec pbrec; short find_position = 0; AliasHandle execAlias; Boolean aliasChanged; // first we try the stored alias. execAlias = (AliasHandle)GetResource('alis',128); if (execAlias != NULL) { err = ResolveAlias(NULL,execAlias,result,&aliasChanged); if (err == noErr) { if (aliasChanged) { // need to write it back to disk WriteResource((Handle)execAlias); } return noErr; } } // if that doesn't work, drop back and look for the file in the current directory. result->vRefNum = myself->vRefNum; result->parID = myself->parID; while (1) { pbrec.hFileInfo.ioVRefNum = result->vRefNum; pbrec.hFileInfo.ioDirID = result->parID; pbrec.hFileInfo.ioFDirIndex = find_position + 1; pbrec.hFileInfo.ioNamePtr = result->name; if (PBGetCatInfo(&pbrec, 0) || !*result->name) break; find_position++; if (pbrec.hFileInfo.ioFlFndrInfo.fdType == 'APPL') { if (pbrec.hFileInfo.ioFlFndrInfo.fdCreator == DEST_CREATOR) { // found it! Str255 newName = "\pExecutable Location"; if (NewAlias(NULL,result,&execAlias) == noErr) { AddResource((Handle)execAlias,'alis',128,newName); WriteResource((Handle)execAlias); } return noErr; } } }
pascal OSErr FSpLocationFromFullPath(short fullPathLength, const void *fullPath, FSSpec *spec) { AliasHandle alias; OSErr result; Boolean wasChanged; Str32 nullString; /* Create a minimal alias from the full pathname */ nullString[0] = 0; /* null string to indicate no zone or server name */ result = NewAliasMinimalFromFullPath(fullPathLength, fullPath, nullString, nullString, &alias); if ( result == noErr ) { /* Let the Alias Manager resolve the alias. */ result = ResolveAlias(NULL, alias, spec, &wasChanged); DisposeHandle((Handle)alias); /* Free up memory used */ } return ( result ); }
int read_setting_filename(void *handle, const char *key, Filename *result) { int fd; AliasHandle h; Boolean changed; OSErr err; Str255 pkey; if (handle == NULL) goto out; fd = *(int *)handle; UseResFile(fd); if (ResError() != noErr) goto out; c2pstrcpy(pkey, key); h = (AliasHandle)Get1NamedResource(rAliasType, pkey); if (h == NULL) goto out; if ((*h)->userType == 'pTTY' && (*h)->aliasSize == sizeof(**h)) memset(result, 0, sizeof(*result)); else { err = ResolveAlias(NULL, h, &result->fss, &changed); if (err != noErr && err != fnfErr) goto out; if ((*h)->userType == 'pTTY') { long dirid; StrFileName fname; /* Tail of record is pascal string contaning leafname */ if (FSpGetDirID(&result->fss, &dirid, FALSE) != noErr) goto out; memcpy(fname, (char *)*h + (*h)->aliasSize, GetHandleSize((Handle)h) - (*h)->aliasSize); err = FSMakeFSSpec(result->fss.vRefNum, dirid, fname, &result->fss); if (err != noErr && err != fnfErr) goto out; } } ReleaseResource((Handle)h); if (ResError() != noErr) goto out; return 1; out: return 0; }