feat: Add avs_fs_umount()

> only added for avs 2.17.3.0
> change `avs_fs_mount()` return type to avs_file_t (should be avs_handle_t to begin with)
> related to #1
This commit is contained in:
[ ]
2025-05-26 20:26:00 +09:00
parent 74ef5237ad
commit a34014876a
4 changed files with 16 additions and 6 deletions
+4
View File
@@ -38,6 +38,7 @@ namespace avs {
AVS_FS_CLOSE_T avs_fs_close {};
AVS_FS_DUMP_MOUNTPOINT_T avs_fs_dump_mountpoint {};
AVS_FS_MOUNT_T avs_fs_mount {};
AVS_FS_UMOUNT_T avs_fs_umount {};
AVS_FS_COPY_T avs_fs_copy {};
AVS_FS_FSTAT_T avs_fs_fstat {};
AVS_FS_LSTAT_T avs_fs_lstat {};
@@ -1015,6 +1016,7 @@ namespace avs {
.avs_fs_close = "XCgsqzn0000055",
.avs_fs_dump_mountpoint = "XCgsqzn0000068",
.avs_fs_mount = "XCgsqzn000004b",
.avs_fs_umount = "XCgsqzn000004d",
.avs_fs_fstat = "XCgsqzn0000062",
.avs_fs_lstat = "XCgsqzn0000063",
.avs_fs_lseek = "XCgsqzn000004f",
@@ -1583,6 +1585,8 @@ namespace avs {
DLL_INSTANCE, IMPORTS[ver].avs_fs_dump_mountpoint);
avs_fs_mount = libutils::try_proc<AVS_FS_MOUNT_T>(
DLL_INSTANCE, IMPORTS[ver].avs_fs_mount);
avs_fs_umount = libutils::try_proc<AVS_FS_UMOUNT_T>(
DLL_INSTANCE, IMPORTS[ver].avs_fs_umount);
avs_fs_lstat = libutils::try_proc<AVS_FS_LSTAT_T>(
DLL_INSTANCE, IMPORTS[ver].avs_fs_lstat);
+5 -1
View File
@@ -337,6 +337,7 @@ namespace avs {
const char *avs_fs_close = "?";
const char *avs_fs_dump_mountpoint = "?";
const char *avs_fs_mount = "?";
const char *avs_fs_umount = "?";
const char *avs_fs_fstat = "?";
const char *avs_fs_lstat = "?";
const char *avs_fs_lseek = "?";
@@ -512,9 +513,12 @@ namespace avs {
typedef int (*AVS_FS_DUMP_MOUNTPOINT_T)(void);
extern AVS_FS_DUMP_MOUNTPOINT_T avs_fs_dump_mountpoint;
typedef int (*AVS_FS_MOUNT_T)(const char *mountpoint, const char *fsroot, const char *fstype, void *data);
typedef avs_file_t (*AVS_FS_MOUNT_T)(const char *mountpoint, const char *fsroot, const char *fstype, void *data);
extern AVS_FS_MOUNT_T avs_fs_mount;
typedef void (*AVS_FS_UMOUNT_T)(avs_file_t mount);
extern AVS_FS_UMOUNT_T avs_fs_umount;
typedef int (*AVS_FS_COPY_T)(const char *sname, const char *dname);
extern AVS_FS_COPY_T avs_fs_copy;
+1 -1
View File
@@ -171,7 +171,7 @@ static avs::core::avs_file_t avs_fs_opendir(const char *path) {
return value;
}
static int avs_fs_mount(const char *mountpoint, const char *fsroot, const char *fstype, void *data) {
static avs::core::avs_file_t avs_fs_mount(const char *mountpoint, const char *fsroot, const char *fstype, void *data) {
// avs redirection breaks ongaku paradise
if (mountpoint == nullptr ||
fsroot == nullptr ||
+6 -4
View File
@@ -34,7 +34,7 @@ int on_avs_fs_lstat(const char *path, struct avs::core::avs_stat *stat)
}
static avs::core::AVS_FS_MOUNT_T avs_fs_mount_;
int on_avs_fs_mount(const char *mountpoint, const char *fsroot, const char *fstype, void *data)
avs::core::avs_file_t on_avs_fs_mount(const char *mountpoint, const char *fsroot, const char *fstype, void *data)
{
if (strstr(fsroot, "29095"))
{
@@ -614,7 +614,8 @@ soundbank::~soundbank()
}
if (mnt_ != E_NOT_FOUND)
{
//_TODO: "XCgsqzn000004d(uint32_t)" avs_fs_umount(mnt_)
log_info("hooks::bmsb", "{}::Bank[CACHE]::Purge mount(0x{:08x})", this->id, mnt_);
avs::core::avs_fs_umount(mnt_);
}
}
@@ -628,7 +629,7 @@ soundbank *soundbank::get_bank(int id)
soundbank *bank = new_instance(id);
snprintf(bank->avspath, AVSPATHMAX, "data/sound/%05d", id);
if (has_format(bank->avspath, ".ifs"))
map_ifs(bank->avspath);
bank->mnt_ = map_ifs(bank->avspath);
snprintf(bank->avspath + strlen(bank->avspath), 7, "/%05d", id);
if (!(has_format(bank->avspath, ".s3p") || has_format(bank->avspath, ".2dx")))
{
@@ -837,11 +838,12 @@ void run_tests()
char avspath[AVSPATHMAX] = "data/sound/29095";
soundbank::has_format(avspath, ".ifs");
soundbank::map_ifs(avspath);
avs::core::avs_file_t mnt = soundbank::map_ifs(avspath);
strcat(avspath, "/29095");
soundbank::has_format(avspath, ".s3p");
soundbank::has_format(avspath, ".2dx");
soundbank::has_format(avspath, "_pre.2dx");
avs::core::avs_fs_umount(mnt);
return;