blob: 1e1b50a78e5ac29a976483d779366ea2b51c0e26 [file] [log] [blame]
//
// GTMNSString+FindFolder.m
//
// Copyright 2006-2008 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy
// of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
//
#import "GTMNSString+FindFolder.h"
#import "GTMDefines.h"
@implementation NSString (GTMStringFindFolderAdditions)
+ (NSString *)gtm_stringWithPathForFolder:(OSType)theFolderType
inDomain:(short)theDomain
doCreate:(BOOL)doCreate {
NSString* folderPath = nil;
FSRef folderRef;
OSErr err = FSFindFolder(theDomain, theFolderType, doCreate, &folderRef);
if (err == noErr) {
CFURLRef folderURL = CFURLCreateFromFSRef(kCFAllocatorSystemDefault,
&folderRef);
if (folderURL) {
folderPath = GTMCFAutorelease(CFURLCopyFileSystemPath(folderURL,
kCFURLPOSIXPathStyle));
CFRelease(folderURL);
}
}
return folderPath;
}
+ (NSString *)gtm_stringWithPathForFolder:(OSType)theFolderType
subfolderName:(NSString *)subfolderName
inDomain:(short)theDomain
doCreate:(BOOL)doCreate {
NSString *resultPath = nil;
NSString *subdirPath = nil;
NSString *parentFolderPath = [self gtm_stringWithPathForFolder:theFolderType
inDomain:theDomain
doCreate:doCreate];
if (parentFolderPath) {
// find the path to the subdirectory
subdirPath = [parentFolderPath stringByAppendingPathComponent:subfolderName];
NSFileManager* fileMgr = [NSFileManager defaultManager];
BOOL isDir = NO;
if ([fileMgr fileExistsAtPath:subdirPath isDirectory:&isDir] && isDir) {
// it already exists
resultPath = subdirPath;
} else if (doCreate) {
parentFolderPath = [parentFolderPath stringByResolvingSymlinksInPath];
NSDictionary* attrs = nil;
BOOL createdSubDir = NO;
// create the subdirectory with the parent folder's attributes
#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
NSError *error = nil;
attrs = [fileMgr attributesOfItemAtPath:parentFolderPath error:&error];
if (error) {
_GTMDevLog(@"Error %@ getting attributes of %@",
error, parentFolderPath);
}
createdSubDir = [fileMgr createDirectoryAtPath:subdirPath
withIntermediateDirectories:YES
attributes:attrs
error:&error];
if (error) {
_GTMDevLog(@"Error %@ creating directory at %@", error, subdirPath);
}
#else
attrs = [fileMgr fileAttributesAtPath:parentFolderPath traverseLink:YES];
createdSubDir = [fileMgr createDirectoryAtPath:subdirPath
attributes:attrs];
#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
if (createdSubDir) {
resultPath = subdirPath;
}
}
}
return resultPath;
}
@end