/*
* FileSystem.cpp
* iphone-gl-app
*
* Created by John Ryland on 15/06/09.
* Copyright 2009 InvertedLogic. All rights reserved.
*
*/
#include "Debug.h"
#include <string.h>
#include "FileSystem.h"
struct FilePrivate
{
const char *file;
bool releaseUrl;
CFURLRef url;
void setUrl(CFURLRef newUrl)
{
if (newUrl) {
if (releaseUrl)
CFRelease(url);
releaseUrl = true;
url = newUrl;
}
}
};
File::File(const char *file)
{
FilePrivate *d = new FilePrivate;
d->file = file;
d->releaseUrl = false;
dptr = d;
}
File::~File()
{
if (((FilePrivate *)dptr)->releaseUrl)
CFRelease(((FilePrivate *)dptr)->url);
delete (FilePrivate *)dptr;
}
const char *File::extension()
{
const char *file = ((FilePrivate *)dptr)->file;
const char *ptr = file + strlen(file);
while (ptr != file && *ptr != '.')
ptr--;
return ptr;
}
CFURLRef File::toMacURL_abs()
{
CFStringRef str = CFStringCreateWithCString(NULL, ((FilePrivate *)dptr)->file, kCFStringEncodingASCII);
CFURLRef url = CFURLCreateWithFileSystemPath(NULL, str, kCFURLPOSIXPathStyle, false);
((FilePrivate *)dptr)->setUrl(url);
CFRelease(str);
return url;
}
CFURLRef File::toMacURL_rel()
{
CFStringRef str = CFStringCreateWithCString(NULL, ((FilePrivate *)dptr)->file, kCFStringEncodingASCII);
CFURLRef url = CFBundleCopyResourceURL(CFBundleGetMainBundle(), str, NULL, NULL);
((FilePrivate *)dptr)->setUrl(url);
CFRelease(str);
return url;
}