From 2ac0f1f361d1149316e3e0740dbe7ddc895b50c4 Mon Sep 17 00:00:00 2001 From: misson20000 Date: Thu, 14 Jun 2018 18:16:42 -0700 Subject: [PATCH] add fsp_srv_open_bis_filesystem --- include/libtransistor/ipc/fs.h | 2 +- lib/ipc/fs.c | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/include/libtransistor/ipc/fs.h b/include/libtransistor/ipc/fs.h index c190846d..f7961be9 100644 --- a/include/libtransistor/ipc/fs.h +++ b/include/libtransistor/ipc/fs.h @@ -24,7 +24,7 @@ result_t fsp_srv_open_data_file_system_by_current_process(ifilesystem_t *out_unk // result_t fsp_srv_mount_content7(ifilesystem_t *out_unk2, applicationid in_tid, uint32_t in_ncaType); // result_t fsp_srv_mount_content(ifilesystem_t *out_contentFs, applicationid in_tid, uint32_t in_flag, const uint8_t in_path[0x301]); // result_t fsp_srv_open_data_file_system_by_application_id(ifilesystem_t *out_dataFiles, applicationid in_tid); -// result_t fsp_srv_mount_bis(ifilesystem_t *out_Bis, partition in_partitionID, const uint8_t in_path[0x301]); +result_t fsp_srv_open_bis_filesystem(ifilesystem_t *fs, uint32_t partition_id, const char *path); // result_t fsp_srv_open_bis_partition(ipc_object_t *out_BisPartition, partition in_partitionID); result_t fsp_srv_invalidate_bis_cache(); result_t fsp_srv_open_host_file_system_impl(ifilesystem_t *out_unk1, const uint8_t in_path[0x301]); diff --git a/lib/ipc/fs.c b/lib/ipc/fs.c index 0afb9fba..70116ce8 100644 --- a/lib/ipc/fs.c +++ b/lib/ipc/fs.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -88,7 +89,27 @@ result_t fsp_srv_open_data_file_system_by_current_process(ifilesystem_t *out_unk // result_t fsp_srv_open_data_file_system_by_application_id(ifilesystem_t *out_dataFiles, applicationid in_tid); -// result_t fsp_srv_mount_bis(ifilesystem_t *out_Bis, partition in_partitionID, const uint8_t in_path[0x301]); +result_t fsp_srv_open_bis_filesystem(ifilesystem_t *fs, uint32_t partition_id, const char *in_path) { + result_t res; + + char path[0x301]; + memset(path, 0, sizeof(path)); + strncpy(path, in_path, sizeof(path)-1); + + ipc_buffer_t buffers[] = { + ipc_make_buffer(path, 0x301, 0x19) + }; + + ipc_request_t rq = ipc_make_request(11); + ipc_msg_set_buffers(rq, buffers, buffer_ptrs); + ipc_msg_raw_data_from_value(rq, partition_id); + + ipc_response_fmt_t rs = ipc_default_response_fmt; + rs.objects = fs; + rs.num_objects = 1; + + return ipc_send(fsp_srv_object, &rq, &rs); +} // result_t fsp_srv_open_bis_partition(ipc_object_t *out_BisPartition, partition in_partitionID);