diff options
| author | Aura Linden <aura@lindenlab.com> | 2012-11-27 14:27:52 -0800 | 
|---|---|---|
| committer | Aura Linden <aura@lindenlab.com> | 2012-11-27 14:27:52 -0800 | 
| commit | acc53a1c226999878d26b0b4bd58ac8df3256c06 (patch) | |
| tree | 86b4f5d9228e4334abdad7105811fe0d0ef64278 /indra/llvfs | |
| parent | eca619985206462d39dc9ae665857e97948562da (diff) | |
New VFS objects included in every bite!
Diffstat (limited to 'indra/llvfs')
| -rw-r--r-- | indra/llvfs/llvfs_objc.h | 43 | ||||
| -rw-r--r-- | indra/llvfs/llvfs_objc.mm | 93 | 
2 files changed, 136 insertions, 0 deletions
| diff --git a/indra/llvfs/llvfs_objc.h b/indra/llvfs/llvfs_objc.h new file mode 100644 index 0000000000..90101eb2e9 --- /dev/null +++ b/indra/llvfs/llvfs_objc.h @@ -0,0 +1,43 @@ +/**  + * @file llvfs_objc.h + * @brief Definition of directory utilities class for Mac OS X + * + * $LicenseInfo:firstyear=2000&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */  + +#if !LL_DARWIN +#error This header must not be included when compiling for any target other than Mac OS. Consider including lldir.h instead. +#endif // !LL_DARWIN + +#ifndef LL_LLVFS_OBJC_H +#define LL_LLVFS_OBJC_H + +#include <iostream> + +std::string* getSystemTempFolder(); +std::string* getSystemCacheFolder(); +std::string* getSystemApplicationSupportFolder(); +std::string* getSystemResourceFolder(); +std::string* getSystemExecutableFolder(); + + +#endif LL_LLVFS_OBJC_H diff --git a/indra/llvfs/llvfs_objc.mm b/indra/llvfs/llvfs_objc.mm new file mode 100644 index 0000000000..4d7cd3a93e --- /dev/null +++ b/indra/llvfs/llvfs_objc.mm @@ -0,0 +1,93 @@ +/**  + * @file llvfs_objc.cpp + * @brief Cocoa implementation of directory utilities for Mac OS X + * + * $LicenseInfo:firstyear=2002&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */  +#if LL_DARWIN + +//WARNING:  This file CANNOT use standard linden includes due to conflicts between definitions of BOOL + +#include "llvfs_objc.h" +#import <Cocoa/Cocoa.h> + +std::string* getSystemTempFolder() +{ +    NSString * tempDir = NSTemporaryDirectory(); +    if (tempDir == nil) +        tempDir = @"/tmp"; +    return ( new std::string([tempDir UTF8String]) ); +} + +//findSystemDirectory scoped exclusively to this file.  +std::string* findSystemDirectory(NSSearchPathDirectory searchPathDirectory, +                                   NSSearchPathDomainMask domainMask) +{ +    std::string *result; +    NSString *path = nil; +     +    // Search for the path +    NSArray* paths = NSSearchPathForDirectoriesInDomains(searchPathDirectory, +                                                         domainMask, +                                                         YES); +    if ([paths count]) +    { +        NSString *bundleName = +        [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"]; +        path = [[paths objectAtIndex:0] stringByAppendingPathComponent:bundleName]; +         +        //SPATTERS HACK:  Always attempt to create directory, ignore errors. +        NSError *error = nil; + +        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error]; + +         +        result = new std::string([path UTF8String]);         +    } +    return result; +} + +std::string* getSystemExecutableFolder() +{ +    NSString *bundlePath = [[NSBundle mainBundle] executablePath]; +    return (new std::string([bundlePath UTF8String]));   +} + +std::string* getSystemResourceFolder() +{ +    NSString *bundlePath = [[NSBundle mainBundle] resourcePath]; +    return (new std::string([bundlePath UTF8String])); +} + +std::string* getSystemCacheFolder() +{ +    return findSystemDirectory (NSCachesDirectory, +                                NSUserDomainMask); +} + +std::string* getSystemApplicationSupportFolder() +{ +    return findSystemDirectory (NSApplicationSupportDirectory, +                                NSUserDomainMask); +} + +#endif // LL_DARWIN | 
