Don't use deprecated API for OS X alias resolving

Change-Id: Ifaaec1863f12cd73d0a77c3367935f57675157e2
This commit is contained in:
Tor Lillqvist 2013-06-16 11:02:32 +03:00
parent 027d114b83
commit aa539f6c9d

View File

@ -135,14 +135,11 @@ struct hostent *gethostbyname_r(const char *name, struct hostent *result,
#if defined(MACOSX)
/*
* Add support for resolving Mac native alias files (not the same as unix alias files)
* (what are "unix alias files"?)
* returns 0 on success.
*/
int macxp_resolveAlias(char *path, int buflen)
{
FSRef aFSRef;
OSStatus nErr;
Boolean bFolder;
Boolean bAliased;
char *unprocessedPath = path;
if ( *unprocessedPath == '/' )
@ -155,21 +152,34 @@ int macxp_resolveAlias(char *path, int buflen)
if ( unprocessedPath )
*unprocessedPath = '\0';
nErr = noErr;
bFolder = FALSE;
bAliased = FALSE;
if ( FSPathMakeRef( (const UInt8 *)path, &aFSRef, 0 ) == noErr )
CFStringRef cfpath = CFStringCreateWithCString( NULL, path, kCFStringEncodingUTF8 );
CFURLRef cfurl = CFURLCreateWithFileSystemPath( NULL, cfpath, kCFURLPOSIXPathStyle, false );
CFRelease( cfpath );
CFErrorRef cferror;
CFDataRef cfbookmark = CFURLCreateBookmarkDataFromFile( NULL, cfurl, &cferror );
CFRelease( cfurl );
if ( cfbookmark == NULL )
{
nErr = FSResolveAliasFileWithMountFlags( &aFSRef, TRUE, &bFolder, &bAliased, kResolveAliasFileNoUI );
if ( nErr == nsvErr )
{
errno = ENOENT;
nRet = -1;
CFRelease( cferror );
}
else if ( nErr == noErr && bAliased )
else
{
Boolean isStale;
cfurl = CFURLCreateByResolvingBookmarkData( NULL, cfbookmark, kCFBookmarkResolutionWithoutUIMask,
NULL, NULL, &isStale, &cferror );
CFRelease( cfbookmark );
if ( cfurl == NULL )
{
CFRelease( cferror );
}
else
{
cfpath = CFURLCopyFileSystemPath( cfurl, kCFURLPOSIXPathStyle );
CFRelease( cfurl );
if ( cfpath != NULL )
{
char tmpPath[ PATH_MAX ];
if ( FSRefMakePath( &aFSRef, (UInt8 *)tmpPath, PATH_MAX ) == noErr )
if ( CFStringGetCString( cfpath, tmpPath, PATH_MAX, kCFStringEncodingUTF8 ) )
{
int nLen = strlen( tmpPath ) + ( unprocessedPath ? strlen( unprocessedPath + 1 ) + 1 : 0 );
if ( nLen < buflen && nLen < PATH_MAX )
@ -193,6 +203,8 @@ int macxp_resolveAlias(char *path, int buflen)
nRet = -1;
}
}
CFRelease( cfpath );
}
}
}