/*
 *  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;
}

