#include <ogcsys.h>
#include <locale.h>
#include <ogc/isfs.h>
#include <string.h>

#include "fs.h"
#include "utils.h"
#include "gecko/gecko.hpp"
#include "memory/mem2.hpp"

static fstats stats ATTRIBUTE_ALIGN(32);

u8 *ISFS_GetFile(const char *path, u32 *size, s32 length)
{
	*size = 0;
	//gprintf("ISFS_GetFile %s", path);
	s32 fd = ISFS_Open(path, ISFS_OPEN_READ);
	u8 *buf = NULL;

	if(fd >= 0)
	{
		memset(&stats, 0, sizeof(fstats));
		if(ISFS_GetFileStats(fd, &stats) >= 0)
		{
			if(length <= 0)
				length = stats.file_length;
			if(length > 0)
				buf = (u8 *)MEM2_memalign(32, ALIGN32(length));
			if(buf)
			{
				*size = stats.file_length;
				if(ISFS_Read(fd, (char*)buf, length) != length)
				{
					*size = 0;
					MEM2_free(buf);
				}
			}
		}
		ISFS_Close(fd);
	}
	if(*size > 0)
	{
		//gprintf(" succeed!\n");
		DCFlushRange(buf, *size);
	}
	//else
	//	gprintf(" failed!\n");
	return buf;
}