From d821185e3d5d542035945cb5e87406f5a6608bc4 Mon Sep 17 00:00:00 2001 From: yellows8 Date: Thu, 20 Dec 2018 12:59:59 -0500 Subject: [PATCH] Added buffer param to appletCreateTransferMemoryStorage and appletCreateHandleStorageTmem, tmemCreateFromMemory will now be used with this when buffer is not NULL. --- nx/include/switch/services/applet.h | 6 ++++-- nx/source/services/applet.c | 10 ++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/nx/include/switch/services/applet.h b/nx/include/switch/services/applet.h index 5f180cbe..6f1ec164 100644 --- a/nx/include/switch/services/applet.h +++ b/nx/include/switch/services/applet.h @@ -309,10 +309,11 @@ Result appletCreateStorage(AppletStorage *s, s64 size); /** * @brief Creates a TransferMemory storage. * @param s Storage object. + * @param buffer TransferMemory buffer, will be automatically allocated if NULL. * @param size Size of storage. * @param writable Controls whether writing to the storage is allowed with \ref appletStorageWrite. */ -Result appletCreateTransferMemoryStorage(AppletStorage *s, s64 size, bool writable); +Result appletCreateTransferMemoryStorage(AppletStorage *s, void* buffer, s64 size, bool writable); /** * @brief Creates a HandleStorage. Only available on 2.0.0+. @@ -325,9 +326,10 @@ Result appletCreateHandleStorage(AppletStorage *s, s64 inval, Handle handle); /** * @brief Creates a HandleStorage using TransferMemory. Wrapper for \ref appletCreateHandleStorage. * @param s Storage object. + * @param buffer TransferMemory buffer, will be automatically allocated if NULL. * @param size Size of storage. */ -Result appletCreateHandleStorageTmem(AppletStorage *s, s64 size); +Result appletCreateHandleStorageTmem(AppletStorage *s, void* buffer, s64 size); /// Closes the storage object. TransferMemory closing is seperate, see \ref appletStorageCloseTmem. /// Other applet functions which push an input storage will automatically call this. diff --git a/nx/source/services/applet.c b/nx/source/services/applet.c index 0ce11c96..6d42bee1 100644 --- a/nx/source/services/applet.c +++ b/nx/source/services/applet.c @@ -1737,12 +1737,13 @@ static Result _appletCreateTransferMemoryStorage(Service* srv_out, TransferMemor return rc; } -Result appletCreateTransferMemoryStorage(AppletStorage *s, s64 size, bool writable) { +Result appletCreateTransferMemoryStorage(AppletStorage *s, void* buffer, s64 size, bool writable) { Result rc=0; memset(s, 0, sizeof(AppletStorage)); - rc = tmemCreate(&s->tmem, size, Perm_None); + if (buffer==NULL) rc = tmemCreate(&s->tmem, size, Perm_None); + else rc = tmemCreateFromMemory(&s->tmem, buffer, size, Perm_None); if (R_FAILED(rc)) return rc; rc = _appletCreateTransferMemoryStorage(&s->s, &s->tmem, writable); @@ -1758,12 +1759,13 @@ Result appletCreateHandleStorage(AppletStorage *s, s64 inval, Handle handle) { return _appletCmdInHandle64(&g_appletILibraryAppletCreator, &s->s, 12, handle, inval); } -Result appletCreateHandleStorageTmem(AppletStorage *s, s64 size) { +Result appletCreateHandleStorageTmem(AppletStorage *s, void* buffer, s64 size) { Result rc=0; memset(s, 0, sizeof(AppletStorage)); - rc = tmemCreate(&s->tmem, size, Perm_None); + if (buffer==NULL) rc = tmemCreate(&s->tmem, size, Perm_None); + else rc = tmemCreateFromMemory(&s->tmem, buffer, size, Perm_None); if (R_FAILED(rc)) return rc; rc = appletCreateHandleStorage(s, s->tmem.size, s->tmem.handle);