[makerom/ctrool] Implemented ROMFS unicode support. (oschar.c)

This commit is contained in:
jakcron
2015-11-23 00:32:24 +08:00
parent c2b89979c9
commit 40dabc5a46
22 changed files with 725 additions and 1051 deletions
+9 -42
View File
@@ -1,39 +1,18 @@
#pragma once
#ifdef _WIN32
#define romfs_char u16
#define fs_char wchar_t
#define fs_dirent _wdirent
#define fs_DIR _WDIR
#define fs_readdir _wreaddir
#define fs_chdir _wchdir
#define fs_opendir _wopendir
#define fs_closedir _wclosedir
#define FS_PATH_SEPARATOR '\\'
#else
#define romfs_char u16
#define fs_char char
#define fs_dirent dirent
#define fs_DIR DIR
#define fs_readdir readdir
#define fs_chdir chdir
#define fs_opendir opendir
#define fs_closedir closedir
#define FS_PATH_SEPARATOR '/'
#endif
#include "oschar.h"
struct romfs_file
{
fs_char *path;
romfs_char *name;
oschar_t *path;
utf16char_t *name;
u32 namesize;
u64 size;
};
struct romfs_dir
{
fs_char *path;
romfs_char *name;
oschar_t *path;
utf16char_t *name;
u32 namesize;
struct romfs_dir *child;
@@ -48,22 +27,10 @@ struct romfs_dir
typedef struct romfs_file romfs_file;
typedef struct romfs_dir romfs_dir;
static const romfs_char ROMFS_EMPTY_PATH[2] = { 0 };
static const fs_char FS_EMPTY_PATH[2] = { 0 };
static const fs_char FS_CURRENT_DIR_PATH[2] = { '.' };
static const fs_char FS_PARENT_DIR_PATH[3] = { '.', '.' };
u32 romfs_strlen(const romfs_char *str);
u32 fs_strlen(const fs_char *str);
int fs_strcmp(const fs_char *str1, const fs_char *str2);
FILE* fs_fopen(fs_char *path);
u64 fs_fsize(fs_char *path);
fs_char* fs_AppendToPath(const fs_char *src, const fs_char *add);
fs_char* fs_CopyStr(const fs_char *src);
romfs_char* romfs_CopyStr(const romfs_char *src);
void fs_fputs(const fs_char *str, FILE *out);
void romfs_fputs(const romfs_char *str, FILE *out);
static const utf16char_t ROMFS_EMPTY_PATH[2] = { 0 };
static const oschar_t OS_EMPTY_PATH[2] = { 0 };
static const oschar_t OS_CURRENT_DIR_PATH[2] = { '.' };
static const oschar_t OS_PARENT_DIR_PATH[3] = { '.', '.' };
int OpenRootDir(const char *path, romfs_dir *dir);
void PrintDir(romfs_dir *dir, u32 depth);