diff options
-rw-r--r-- | saga/game.cpp | 33 | ||||
-rw-r--r-- | saga/rscfile.cpp | 55 | ||||
-rw-r--r-- | saga/rscfile.h | 6 |
3 files changed, 33 insertions, 61 deletions
diff --git a/saga/game.cpp b/saga/game.cpp index 2f07cee1cd..bac6da92bc 100644 --- a/saga/game.cpp +++ b/saga/game.cpp @@ -31,6 +31,7 @@ #include "reinherit.h" #include "yslib.h" +#include "common/file.h" /* * Uses the following modules: @@ -446,7 +447,7 @@ int LoadLanguage(void) char lang_path[R_MAXPATH]; uint game_n; - FILE *test_fp; + File test_file; game_n = GameModule.game_number; @@ -457,12 +458,7 @@ int LoadLanguage(void) R_GAME_ITE_LANG_PREFIX, GameModule.game_language, R_GAME_LANG_EXT); - SYSFS_GetFQFN(GameModule.data_dir, - lang_file, lang_path, R_MAXPATH); - - test_fp = fopen(lang_path, "r"); - if (test_fp == NULL) { - + if (!test_file.open(lang_file)) { R_printf(R_STDOUT, "Couldn't open language file %s. " "Using default (US English)\n", lang_path); @@ -470,7 +466,7 @@ int LoadLanguage(void) return R_SUCCESS; } - fclose(test_fp); + test_file.close(); if (INTERFACE_RegisterLang() != R_SUCCESS) { R_printf(R_STDERR, @@ -554,7 +550,7 @@ int DetectGame(const char *game_dir, uint * game_n_p) uint file_count; uint file_n; - FILE *test_fp; + File test_file; int file_missing = 0; int found_game = 0; @@ -574,18 +570,12 @@ int DetectGame(const char *game_dir, uint * game_n_p) /* Try to open all files for this game */ for (file_n = 0; file_n < file_count; file_n++) { - SYSFS_GetFQFN(game_dir, - GameDescs[game_n].gd_filedescs[file_n].gf_fname, - game_fpath, R_GAME_PATH_LIMIT); - test_fp = fopen(game_fpath, "rb"); - if (test_fp == NULL) { - + if (!test_file.open(GameDescs[game_n].gd_filedescs[file_n].gf_fname)) { file_missing = 1; - break; } - fclose(test_fp); + test_file.close(); } /* Try the next game, couldn't find all files for the current @@ -654,10 +644,7 @@ int LoadGame(const char *game_dir, uint game_n) game_fname = GameDescs[game_n].gd_filedescs[i].gf_fname; - SYSFS_GetFQFN(game_dir, - game_fname, game_fpath, R_GAME_PATH_LIMIT); - - if (RSC_OpenContext(load_ctxt, game_fpath) != R_SUCCESS) { + if (RSC_OpenContext(load_ctxt, game_fname) != R_SUCCESS) { return R_FAILURE; } @@ -781,9 +768,7 @@ int Verify_ITEDISK(const char *game_dir) test_ctx = RSC_CreateContext(); - SYSFS_GetFQFN(game_dir, "ITE.RSC", fpath, R_GAME_PATH_LIMIT); - - if (RSC_OpenContext(test_ctx, fpath) != R_SUCCESS) { + if (RSC_OpenContext(test_ctx, "ITE.RSC") != R_SUCCESS) { return R_FAILURE; } diff --git a/saga/rscfile.cpp b/saga/rscfile.cpp index b96a694b32..5a9ec29afa 100644 --- a/saga/rscfile.cpp +++ b/saga/rscfile.cpp @@ -47,7 +47,11 @@ namespace Saga { R_RSCFILE_CONTEXT *RSC_CreateContext(void) { - R_RSCFILE_CONTEXT empty_context = { 0 }; + R_RSCFILE_CONTEXT empty_context; + empty_context.rc_file_fspec = NULL; + empty_context.rc_file_loaded = 0; + empty_context.rc_res_table = NULL; + empty_context.rc_res_ct = 0; R_RSCFILE_CONTEXT *new_context; new_context = (R_RSCFILE_CONTEXT *)malloc(sizeof *new_context); @@ -60,34 +64,23 @@ R_RSCFILE_CONTEXT *RSC_CreateContext(void) return new_context; } -int RSC_OpenContext(R_RSCFILE_CONTEXT * rsc_context, const char *fspec) +int RSC_OpenContext(R_RSCFILE_CONTEXT *rsc_context, const char *fspec) { - FILE *rsc_fp; - int result; - - rsc_fp = fopen(fspec, "rb"); - if (rsc_fp == NULL) { + if (rsc_context->rc_file.isOpen()) { return R_FAILURE; } - if (rsc_context->rc_file_open) { + if (!rsc_context->rc_file.open(fspec)) { + return R_FAILURE; } rsc_context->rc_file_fspec = fspec; - rsc_context->rc_file_p = rsc_fp; - - result = ys_get_filesize(rsc_fp, &rsc_context->rc_file_size, NULL); - if (result != YS_E_SUCCESS) { - fclose(rsc_fp); - return R_FAILURE; - } if (RSC_LoadRSC(rsc_context) != R_SUCCESS) { return R_FAILURE; } - rsc_context->rc_file_open = 1; rsc_context->rc_file_loaded = 1; return R_SUCCESS; @@ -95,12 +88,10 @@ int RSC_OpenContext(R_RSCFILE_CONTEXT * rsc_context, const char *fspec) int RSC_CloseContext(R_RSCFILE_CONTEXT * rsc_context) { - if (rsc_context->rc_file_open) { - fclose(rsc_context->rc_file_p); + if (rsc_context->rc_file.isOpen()) { + rsc_context->rc_file.close(); } - rsc_context->rc_file_open = 0; - RSC_FreeRSC(rsc_context); rsc_context->rc_file_loaded = 0; @@ -137,17 +128,15 @@ int RSC_LoadRSC(R_RSCFILE_CONTEXT * rsc) read_p = tblinfo_buf; - if (rsc->rc_file_size < RSC_MIN_FILESIZE) { + if (rsc->rc_file.size() < RSC_MIN_FILESIZE) { return R_FAILURE; } /* Read resource table info from the rear end of file * \*------------------------------------------------------------- */ - fseek(rsc->rc_file_p, (long)(rsc->rc_file_size - 8), SEEK_SET); - - if (fread(tblinfo_buf, - 1, RSC_TABLEINFO_SIZE, rsc->rc_file_p) != RSC_TABLEINFO_SIZE) { + rsc->rc_file.seek((long)(rsc->rc_file.size() - 8), SEEK_SET); + if (rsc->rc_file.read(tblinfo_buf, RSC_TABLEINFO_SIZE) != RSC_TABLEINFO_SIZE) { return R_FAILURE; } @@ -156,7 +145,7 @@ int RSC_LoadRSC(R_RSCFILE_CONTEXT * rsc) /* Check for sane table offset * \*------------------------------------------------------------- */ - if (res_tbl_offset != rsc->rc_file_size - RSC_TABLEINFO_SIZE - + if (res_tbl_offset != rsc->rc_file.size() - RSC_TABLEINFO_SIZE - RSC_TABLEENTRY_SIZE * res_tbl_ct) { return R_FAILURE; @@ -171,9 +160,9 @@ int RSC_LoadRSC(R_RSCFILE_CONTEXT * rsc) return R_FAILURE; } - fseek(rsc->rc_file_p, (long)res_tbl_offset, SEEK_SET); + rsc->rc_file.seek((long)res_tbl_offset, SEEK_SET); - if (fread(tbl_buf, 1, tbl_len, rsc->rc_file_p) != tbl_len) { + if (rsc->rc_file.read(tbl_buf, tbl_len) != tbl_len) { free(tbl_buf); return R_FAILURE; } @@ -191,8 +180,8 @@ int RSC_LoadRSC(R_RSCFILE_CONTEXT * rsc) rsc_restbl[i].res_offset = ys_read_u32_le(read_p, &read_p); rsc_restbl[i].res_size = ys_read_u32_le(read_p, &read_p); - if ((rsc_restbl[i].res_offset > rsc->rc_file_size) || - (rsc_restbl[i].res_size > rsc->rc_file_size)) { + if ((rsc_restbl[i].res_offset > rsc->rc_file.size()) || + (rsc_restbl[i].res_size > rsc->rc_file.size())) { free(tbl_buf); free(rsc_restbl); @@ -276,16 +265,14 @@ RSC_LoadResource(R_RSCFILE_CONTEXT * rsc, res_offset = rsc->rc_res_table[res_num].res_offset; res_size = rsc->rc_res_table[res_num].res_size; - if (fseek(rsc->rc_file_p, (long)res_offset, SEEK_SET) != 0) { - return R_FAILURE; - } + rsc->rc_file.seek((long)res_offset, SEEK_SET); res_buf = (uchar *)malloc(res_size); if (res_buf == NULL) { return R_MEM; } - if (fread(res_buf, 1, res_size, rsc->rc_file_p) != res_size) { + if (rsc->rc_file.read(res_buf, res_size) != res_size) { free(res_buf); return R_FAILURE; } diff --git a/saga/rscfile.h b/saga/rscfile.h index 6a9e7e423f..ef1bda2e10 100644 --- a/saga/rscfile.h +++ b/saga/rscfile.h @@ -32,6 +32,8 @@ #ifndef SAGA_RSCFILE_H__ #define SAGA_RSCFILE_H__ +#include "common/file.h" + namespace Saga { #define RSC_TABLEINFO_SIZE 8 @@ -51,9 +53,7 @@ typedef struct R_RSCFILE_RESOURCE_tag { struct R_RSCFILE_CONTEXT_tag { const char *rc_file_fspec; - FILE *rc_file_p; - int rc_file_open; - unsigned long rc_file_size; + File rc_file; int rc_file_loaded; R_RSCFILE_RESOURCE *rc_res_table; |