From 7e6ff7e4865b9a982404efe4f5e820de20d9dbca Mon Sep 17 00:00:00 2001 From: fincs Date: Thu, 16 Jan 2020 19:16:44 +0100 Subject: [PATCH] Simplify appletGetAppletResourceUserId and related logic --- nx/include/switch/services/applet.h | 2 +- nx/source/services/applet.c | 14 +-- nx/source/services/auddev.c | 8 +- nx/source/services/audren.c | 13 +-- nx/source/services/capssu.c | 15 +-- nx/source/services/capsu.c | 50 ++------- nx/source/services/hid.c | 163 ++++------------------------ nx/source/services/hidsys.c | 7 +- nx/source/services/irs.c | 73 +++---------- nx/source/services/nfc.c | 18 +-- nx/source/services/nv.c | 9 +- nx/source/services/vi.c | 17 +-- 12 files changed, 80 insertions(+), 309 deletions(-) diff --git a/nx/include/switch/services/applet.h b/nx/include/switch/services/applet.h index 38cec328..ee02c6f0 100644 --- a/nx/include/switch/services/applet.h +++ b/nx/include/switch/services/applet.h @@ -368,7 +368,7 @@ Service* appletGetServiceSession_DisplayController(void); Service* appletGetServiceSession_DebugFunctions(void); /// Get the cached AppletResourceUserId. -Result appletGetAppletResourceUserId(u64 *out); +u64 appletGetAppletResourceUserId(void); /// Get the \ref AppletType. AppletType appletGetAppletType(void); diff --git a/nx/source/services/applet.c b/nx/source/services/applet.c index 2a275b33..e66ac5ba 100644 --- a/nx/source/services/applet.c +++ b/nx/source/services/applet.c @@ -1169,12 +1169,8 @@ Result appletSetApplicationAlbumUserData(const void* buffer, size_t size) { IPC_MAKE_CMD_IMPL(static Result _appletGetAppletResourceUserId(u64 *out), &g_appletIWindowController, 1, _appletCmdNoInOutU64, out) -Result appletGetAppletResourceUserId(u64 *out) { - if (!serviceIsActive(&g_appletSrv)) - return MAKERESULT(Module_Libnx, LibnxError_NotInitialized); - - *out = g_appletResourceUserId; - return 0; +u64 appletGetAppletResourceUserId(void) { + return g_appletResourceUserId; } IPC_MAKE_CMD_IMPL_HOSVER(Result appletGetAppletResourceUserIdOfCallerApplet(u64 *out), &g_appletIWindowController, 2, _appletCmdNoInOutU64, (6,0,0), out) @@ -1432,11 +1428,7 @@ static Result _appletCreateLibraryApplet(Service* srv_out, AppletId id, LibApple } static Result _appletGetIndirectLayerConsumerHandle(Service* srv, u64 *out) { - Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) return rc; + u64 AppletResourceUserId = appletGetAppletResourceUserId(); serviceAssumeDomain(srv); return serviceDispatchInOut(srv, 160, AppletResourceUserId, *out, diff --git a/nx/source/services/auddev.c b/nx/source/services/auddev.c index b309f0e7..a900b6a1 100644 --- a/nx/source/services/auddev.c +++ b/nx/source/services/auddev.c @@ -13,14 +13,10 @@ static Result _auddevGetAudioDeviceService(Service* srv, Service* srv_out, u64 a NX_GENERATE_SERVICE_GUARD(auddev); Result _auddevInitialize(void) { - Result rc=0; - u64 aruid = 0; - rc = appletGetAppletResourceUserId(&aruid); - Service audrenMgrSrv; - rc = smGetService(&audrenMgrSrv, "audren:u"); + Result rc = smGetService(&audrenMgrSrv, "audren:u"); if (R_SUCCEEDED(rc)) { - rc = _auddevGetAudioDeviceService(&audrenMgrSrv, &g_auddevIAudioDevice, aruid); + rc = _auddevGetAudioDeviceService(&audrenMgrSrv, &g_auddevIAudioDevice, appletGetAppletResourceUserId()); serviceClose(&audrenMgrSrv); } diff --git a/nx/source/services/audren.c b/nx/source/services/audren.c index b9b5a29d..663b03e0 100644 --- a/nx/source/services/audren.c +++ b/nx/source/services/audren.c @@ -29,7 +29,7 @@ typedef struct { u32 revision; } AudioRendererParameter; -static Result _audrenOpenAudioRenderer(Service* srv, Service* srv_out, const AudioRendererParameter* param, u64 aruid); +static Result _audrenOpenAudioRenderer(Service* srv, Service* srv_out, const AudioRendererParameter* param); static Result _audrenGetWorkBufferSize(Service* srv, const AudioRendererParameter* param, u64* out_size); static Result _audrenQuerySystemEvent(Event* out_event); @@ -76,11 +76,6 @@ Result _audrenInitialize(const AudioRendererConfig* config) { param.effect_count = config->num_effects; param.revision = g_audrenRevision; - // Get aruid - u64 aruid = 0; - rc = appletGetAppletResourceUserId(&aruid); - //if (R_FAILED(rc)) return rc; // apparently audren still inits fine with aruid = 0 so this isn't a fatal error condition - // Open IAudioRendererManager Service audrenMgrSrv; rc = smGetService(&audrenMgrSrv, "audren:u"); @@ -94,7 +89,7 @@ Result _audrenInitialize(const AudioRendererConfig* config) { rc = tmemCreate(&g_audrenWorkBuf, workBufSize, Perm_None); if (R_SUCCEEDED(rc)) { // Create the IAudioRenderer service - rc = _audrenOpenAudioRenderer(&audrenMgrSrv, &g_audrenIAudioRenderer, ¶m, aruid); + rc = _audrenOpenAudioRenderer(&audrenMgrSrv, &g_audrenIAudioRenderer, ¶m); if (R_SUCCEEDED(rc)) { // Finally, get the handle to the system event rc = _audrenQuerySystemEvent(&g_audrenEvent); @@ -144,13 +139,13 @@ void audrenWaitFrame(void) { eventWait(&g_audrenEvent, U64_MAX); } -Result _audrenOpenAudioRenderer(Service* srv, Service* srv_out, const AudioRendererParameter* param, u64 aruid) { +Result _audrenOpenAudioRenderer(Service* srv, Service* srv_out, const AudioRendererParameter* param) { const struct { AudioRendererParameter param; u32 pad; u64 work_buffer_size; u64 aruid; - } in = { *param, 0, g_audrenWorkBuf.size, aruid }; + } in = { *param, 0, g_audrenWorkBuf.size, appletGetAppletResourceUserId() }; return serviceDispatchIn(srv, 0, in, .in_send_pid = true, diff --git a/nx/source/services/capssu.c b/nx/source/services/capssu.c index 81304829..26f90a77 100644 --- a/nx/source/services/capssu.c +++ b/nx/source/services/capssu.c @@ -36,13 +36,10 @@ static Result _capssuSetShimLibraryVersion(u64 version) { if (hosversionBefore(7,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - u64 AppletResourceUserId = 0; - appletGetAppletResourceUserId(&AppletResourceUserId); - const struct { u64 version; u64 AppletResourceUserId; - } in = { version, AppletResourceUserId }; + } in = { version, appletGetAppletResourceUserId() }; return serviceDispatchIn(&g_capssuSrv, 32, in, .in_send_pid = true, @@ -50,15 +47,12 @@ static Result _capssuSetShimLibraryVersion(u64 version) { } static Result _capssuSaveScreenShotEx0(const void* buffer, size_t size, const CapsScreenShotAttribute *attr, AlbumReportOption reportoption, CapsApplicationAlbumEntry *out) { - u64 AppletResourceUserId = 0; - appletGetAppletResourceUserId(&AppletResourceUserId); - const struct { CapsScreenShotAttribute attr; u32 reportoption; u32 pad; u64 AppletResourceUserId; - } in = { *attr, reportoption, 0, AppletResourceUserId }; + } in = { *attr, reportoption, 0, appletGetAppletResourceUserId() }; return serviceDispatchInOut(&g_capssuSrv, 203, in, *out, .buffer_attrs = { SfBufferAttr_HipcMapTransferAllowsNonSecure | SfBufferAttr_HipcMapAlias | SfBufferAttr_In }, @@ -68,15 +62,12 @@ static Result _capssuSaveScreenShotEx0(const void* buffer, size_t size, const Ca } static Result _capssuSaveScreenShotEx(u32 cmd_id, bool pid, const void* argbuf, size_t argbuf_size, const void* buffer, size_t size, const CapsScreenShotAttribute *attr, AlbumReportOption reportoption, CapsApplicationAlbumEntry *out) { - u64 AppletResourceUserId = 0; - appletGetAppletResourceUserId(&AppletResourceUserId); - const struct { CapsScreenShotAttribute attr; u32 reportoption; u32 pad; u64 AppletResourceUserId; - } in = { *attr, reportoption, 0, AppletResourceUserId }; + } in = { *attr, reportoption, 0, appletGetAppletResourceUserId() }; return serviceDispatchInOut(&g_capssuSrv, cmd_id, in, *out, .buffer_attrs = { diff --git a/nx/source/services/capsu.c b/nx/source/services/capsu.c index 0c5e37f4..9fdeff33 100644 --- a/nx/source/services/capsu.c +++ b/nx/source/services/capsu.c @@ -47,13 +47,10 @@ static Result _capsuSetShimLibraryVersion(u64 version) { if (hosversionBefore(7,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - u64 AppletResourceUserId = 0; - appletGetAppletResourceUserId(&AppletResourceUserId); - const struct { u64 version; u64 AppletResourceUserId; - } in = { version, AppletResourceUserId }; + } in = { version, appletGetAppletResourceUserId() }; return serviceDispatchIn(&g_capsuSrv, 32, in, .in_send_pid = true, @@ -61,16 +58,13 @@ static Result _capsuSetShimLibraryVersion(u64 version) { } static Result _capsuGetAlbumFileList0AafeAruidDeprecated(void* entries, size_t entrysize, s32 count, u8 type, u64 start_timestamp, u64 end_timestamp, s32 *total_entries) { - u64 AppletResourceUserId = 0; - appletGetAppletResourceUserId(&AppletResourceUserId); - const struct { u8 type; u8 pad[7]; u64 start_timestamp; u64 end_timestamp; u64 AppletResourceUserId; - } in = { type, {0}, start_timestamp, end_timestamp, AppletResourceUserId }; + } in = { type, {0}, start_timestamp, end_timestamp, appletGetAppletResourceUserId() }; u64 total_out=0; Result rc = serviceDispatchInOut(&g_capsuSrv, 102, in, total_out, @@ -83,15 +77,12 @@ static Result _capsuGetAlbumFileList0AafeAruidDeprecated(void* entries, size_t e } static Result _capsuDeleteAlbumFileByAruid(u32 cmd_id, u8 type, const CapsApplicationAlbumFileEntry *entry) { - u64 AppletResourceUserId = 0; - appletGetAppletResourceUserId(&AppletResourceUserId); - const struct { u8 type; u8 pad[7]; CapsApplicationAlbumFileEntry entry; u64 AppletResourceUserId; - } in = { type, {0}, *entry, AppletResourceUserId }; + } in = { type, {0}, *entry, appletGetAppletResourceUserId() }; return serviceDispatchIn(&g_capsuSrv, 103, in, .in_send_pid = true, @@ -99,13 +90,10 @@ static Result _capsuDeleteAlbumFileByAruid(u32 cmd_id, u8 type, const CapsApplic } static Result _capsuGetAlbumFileSizeByAruid(const CapsApplicationAlbumFileEntry *entry, u64 *size) { - u64 AppletResourceUserId = 0; - appletGetAppletResourceUserId(&AppletResourceUserId); - const struct { CapsApplicationAlbumFileEntry entry; u64 AppletResourceUserId; - } in = { *entry, AppletResourceUserId }; + } in = { *entry, appletGetAppletResourceUserId() }; return serviceDispatchInOut(&g_capsuSrv, 104, in, *size, .in_send_pid = true, @@ -113,15 +101,12 @@ static Result _capsuGetAlbumFileSizeByAruid(const CapsApplicationAlbumFileEntry } static Result _capsuPrecheckToCreateContentsByAruid(u8 type, u64 unk) { - u64 AppletResourceUserId = 0; - appletGetAppletResourceUserId(&AppletResourceUserId); - const struct { u8 type; u8 pad[7]; u64 unk; u64 AppletResourceUserId; - } in = { type, {0}, unk, AppletResourceUserId }; + } in = { type, {0}, unk, appletGetAppletResourceUserId() }; return serviceDispatchIn(&g_capsuSrv, 130, in, .in_send_pid = true, @@ -129,14 +114,11 @@ static Result _capsuPrecheckToCreateContentsByAruid(u8 type, u64 unk) { } static Result _capsuLoadAlbumScreenShotImageByAruid(u32 cmd_id, CapsLoadAlbumScreenShotImageOutputForApplication *out, void* image, size_t image_size, void* workbuf, size_t workbuf_size, const CapsApplicationAlbumFileEntry *entry, const CapsScreenShotDecodeOption *option) { - u64 AppletResourceUserId = 0; - appletGetAppletResourceUserId(&AppletResourceUserId); - const struct { CapsApplicationAlbumFileEntry entry; CapsScreenShotDecodeOption option; u64 AppletResourceUserId; - } in = { *entry, *option, AppletResourceUserId }; + } in = { *entry, *option, appletGetAppletResourceUserId() }; return serviceDispatchIn(&g_capsuSrv, cmd_id, in, .buffer_attrs = { @@ -154,9 +136,6 @@ static Result _capsuLoadAlbumScreenShotImageByAruid(u32 cmd_id, CapsLoadAlbumScr } static Result _capsuGetAlbumFileListAaeAruid(u32 cmd_id, void* entries, size_t entrysize, s32 count, u8 type, const CapsAlbumFileDateTime *start_datetime, const CapsAlbumFileDateTime *end_datetime, s32 *total_entries) { - u64 AppletResourceUserId = 0; - appletGetAppletResourceUserId(&AppletResourceUserId); - const struct { u8 type; u8 pad; @@ -164,7 +143,7 @@ static Result _capsuGetAlbumFileListAaeAruid(u32 cmd_id, void* entries, size_t e CapsAlbumFileDateTime end_datetime; u8 pad2[6]; u64 AppletResourceUserId; - } in = { type, 0, *start_datetime, *end_datetime, {0}, AppletResourceUserId }; + } in = { type, 0, *start_datetime, *end_datetime, {0}, appletGetAppletResourceUserId() }; u64 total_out=0; Result rc = serviceDispatchInOut(&g_capsuSrv, cmd_id, in, total_out, @@ -177,9 +156,6 @@ static Result _capsuGetAlbumFileListAaeAruid(u32 cmd_id, void* entries, size_t e } static Result _capsuGetAlbumFileListAaeUidAruid(u32 cmd_id, void* entries, size_t entrysize, s32 count, u8 type, const CapsAlbumFileDateTime *start_datetime, const CapsAlbumFileDateTime *end_datetime, AccountUid uid, s32 *total_entries) { - u64 AppletResourceUserId = 0; - appletGetAppletResourceUserId(&AppletResourceUserId); - const struct { u8 type; u8 pad; @@ -188,7 +164,7 @@ static Result _capsuGetAlbumFileListAaeUidAruid(u32 cmd_id, void* entries, size_ u8 pad2[6]; AccountUid uid; u64 AppletResourceUserId; - } in = { type, 0, *start_datetime, *end_datetime, {0}, uid, AppletResourceUserId }; + } in = { type, 0, *start_datetime, *end_datetime, {0}, uid, appletGetAppletResourceUserId() }; u64 total_out=0; Result rc = serviceDispatchInOut(&g_capsuSrv, cmd_id, in, total_out, @@ -201,13 +177,10 @@ static Result _capsuGetAlbumFileListAaeUidAruid(u32 cmd_id, void* entries, size_ } static Result _capsuOpenAccessorSessionForApplication(Service* srv_out, const CapsApplicationAlbumFileEntry *entry) { - u64 AppletResourceUserId = 0; - appletGetAppletResourceUserId(&AppletResourceUserId); - const struct { CapsApplicationAlbumFileEntry entry; u64 AppletResourceUserId; - } in = { *entry, AppletResourceUserId }; + } in = { *entry, appletGetAppletResourceUserId() }; return serviceDispatchIn(&g_capsuSrv, 60002, in, .in_send_pid = true, @@ -217,13 +190,10 @@ static Result _capsuOpenAccessorSessionForApplication(Service* srv_out, const Ca } static Result _capsuOpenAlbumMovieReadStream(u64 *stream, const CapsApplicationAlbumFileEntry *entry) { - u64 AppletResourceUserId = 0; - appletGetAppletResourceUserId(&AppletResourceUserId); - const struct { CapsApplicationAlbumFileEntry entry; u64 AppletResourceUserId; - } in = { *entry, AppletResourceUserId }; + } in = { *entry, appletGetAppletResourceUserId() }; return serviceDispatchInOut(&g_capsuAccessor, 2001, in, *stream, .in_send_pid = true, diff --git a/nx/source/services/hid.c b/nx/source/services/hid.c index cdee6264..9cba884a 100644 --- a/nx/source/services/hid.c +++ b/nx/source/services/hid.c @@ -40,7 +40,7 @@ static TransferMemory g_sevenSixAxisSensorTmem1; static RwLock g_hidLock; -static Result _hidCreateAppletResource(Service* srv, Service* srv_out, u64 AppletResourceUserId); +static Result _hidCreateAppletResource(Service* srv, Service* srv_out); static Result _hidGetSharedMemoryHandle(Service* srv, Handle* handle_out); static Result _hidActivateNpad(void); @@ -65,15 +65,11 @@ Result _hidInitialize(void) { Result rc=0; Handle sharedmem_handle; - // If this failed (for example because we're a sysmodule) AppletResourceUserId stays zero - u64 AppletResourceUserId = 0; - appletGetAppletResourceUserId(&AppletResourceUserId); - rc = smGetService(&g_hidSrv, "hid"); if (R_FAILED(rc)) return rc; - rc = _hidCreateAppletResource(&g_hidSrv, &g_hidIAppletResource, AppletResourceUserId); + rc = _hidCreateAppletResource(&g_hidSrv, &g_hidIAppletResource); if (R_SUCCEEDED(rc)) rc = _hidGetSharedMemoryHandle(&g_hidIAppletResource, &sharedmem_handle); @@ -649,12 +645,7 @@ static Result _hidCmdGetSession(Service* srv_out, u32 cmd_id) { } static Result _hidCmdWithNoInput(u32 cmd_id) { - Result rc=0; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; + u64 AppletResourceUserId = appletGetAppletResourceUserId(); return serviceDispatchIn(&g_hidSrv, cmd_id, AppletResourceUserId, .in_send_pid = true, @@ -674,17 +665,10 @@ static Result _hidCmdInU32NoOut(Service* srv, u32 inval, u32 cmd_id) { } static Result _hidCmdWithInputU32(u32 inval, u32 cmd_id) { - Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; - const struct { u32 inval; u64 AppletResourceUserId; - } in = { inval, AppletResourceUserId }; + } in = { inval, appletGetAppletResourceUserId() }; return serviceDispatchIn(&g_hidSrv, cmd_id, in, .in_send_pid = true, @@ -692,17 +676,10 @@ static Result _hidCmdWithInputU32(u32 inval, u32 cmd_id) { } static Result _hidCmdWithInputU64(u64 inval, u32 cmd_id) { - Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; - const struct { u64 AppletResourceUserId; u64 inval; - } in = { AppletResourceUserId, inval }; + } in = { appletGetAppletResourceUserId(), inval }; return serviceDispatchIn(&g_hidSrv, cmd_id, in, .in_send_pid = true, @@ -710,12 +687,7 @@ static Result _hidCmdWithInputU64(u64 inval, u32 cmd_id) { } static Result _hidCmdOutU32(u32 *out, u32 cmd_id) { - Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; + u64 AppletResourceUserId = appletGetAppletResourceUserId(); return serviceDispatchInOut(&g_hidSrv, cmd_id, AppletResourceUserId, *out, .in_send_pid = true, @@ -723,12 +695,7 @@ static Result _hidCmdOutU32(u32 *out, u32 cmd_id) { } static Result _hidCmdOutU64(u64 *out, u32 cmd_id) { - Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; + u64 AppletResourceUserId = appletGetAppletResourceUserId(); return serviceDispatchInOut(&g_hidSrv, cmd_id, AppletResourceUserId, *out, .in_send_pid = true, @@ -746,7 +713,9 @@ static Result _hidCmdNoInOutBool(bool *out, u32 cmd_id) { return rc; } -static Result _hidCreateAppletResource(Service* srv, Service* srv_out, u64 AppletResourceUserId) { +static Result _hidCreateAppletResource(Service* srv, Service* srv_out) { + u64 AppletResourceUserId = appletGetAppletResourceUserId(); + return serviceDispatchIn(srv, 0, AppletResourceUserId, .in_send_pid = true, .out_num_objects = 1, @@ -762,20 +731,13 @@ Result hidSetSixAxisSensorFusionParameters(u32 SixAxisSensorHandle, float unk0, if (unk0 < 0.0f || unk0 > 1.0f) return MAKERESULT(Module_Libnx, LibnxError_BadInput); - Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; - const struct { u32 SixAxisSensorHandle; float unk0; float unk1; u32 pad; u64 AppletResourceUserId; - } in = { SixAxisSensorHandle, unk0, unk1, 0, AppletResourceUserId }; + } in = { SixAxisSensorHandle, unk0, unk1, 0, appletGetAppletResourceUserId() }; return serviceDispatchIn(&g_hidSrv, 70, in, .in_send_pid = true, @@ -784,17 +746,12 @@ Result hidSetSixAxisSensorFusionParameters(u32 SixAxisSensorHandle, float unk0, Result hidGetSixAxisSensorFusionParameters(u32 SixAxisSensorHandle, float *unk0, float *unk1) { Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; const struct { u32 SixAxisSensorHandle; u32 pad; u64 AppletResourceUserId; - } in = { SixAxisSensorHandle, 0, AppletResourceUserId }; + } in = { SixAxisSensorHandle, 0, appletGetAppletResourceUserId() }; struct { float unk0; @@ -814,18 +771,11 @@ Result hidResetSixAxisSensorFusionParameters(u32 SixAxisSensorHandle) { } Result hidSetGyroscopeZeroDriftMode(u32 SixAxisSensorHandle, HidGyroscopeZeroDriftMode mode) { - Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; - const struct { u32 SixAxisSensorHandle; u32 mode; u64 AppletResourceUserId; - } in = { SixAxisSensorHandle, mode, AppletResourceUserId }; + } in = { SixAxisSensorHandle, mode, appletGetAppletResourceUserId() }; return serviceDispatchIn(&g_hidSrv, 79, in, .in_send_pid = true, @@ -834,17 +784,12 @@ Result hidSetGyroscopeZeroDriftMode(u32 SixAxisSensorHandle, HidGyroscopeZeroDri Result hidGetGyroscopeZeroDriftMode(u32 SixAxisSensorHandle, HidGyroscopeZeroDriftMode *mode) { Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; const struct { u32 SixAxisSensorHandle; u32 pad; u64 AppletResourceUserId; - } in = { SixAxisSensorHandle, 0, AppletResourceUserId }; + } in = { SixAxisSensorHandle, 0, appletGetAppletResourceUserId() }; u32 tmp=0; rc = serviceDispatchInOut(&g_hidSrv, 80, in, tmp, @@ -870,16 +815,11 @@ Result hidGetSupportedNpadStyleSet(HidControllerType *type) { } Result hidSetSupportedNpadIdType(HidControllerID *buf, size_t count) { - Result rc; - u64 AppletResourceUserId; + u64 AppletResourceUserId = appletGetAppletResourceUserId(); size_t i; u32 tmpval=0; u32 tmpbuf[10]; - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; - if (count > 10) return MAKERESULT(Module_Libnx, LibnxError_OutOfMemory); @@ -925,18 +865,13 @@ static Result _hidDeactivateNpad(void) { Result hidAcquireNpadStyleSetUpdateEventHandle(HidControllerID id, Event* out_event, bool autoclear) { Result rc; Handle tmp_handle = INVALID_HANDLE; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; const struct { u32 id; u32 pad; u64 AppletResourceUserId; u64 event_ptr; // Official sw sets this to a ptr, which the sysmodule doesn't seem to use. - } in = { hidControllerIDToOfficial(id), 0, AppletResourceUserId, 0 }; + } in = { hidControllerIDToOfficial(id), 0, appletGetAppletResourceUserId(), 0 }; rc = serviceDispatchIn(&g_hidSrv, 106, in, .in_send_pid = true, @@ -967,17 +902,10 @@ Result hidSetNpadJoyAssignmentModeDual(HidControllerID id) { } Result hidMergeSingleJoyAsDualJoy(HidControllerID id0, HidControllerID id1) { - Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; - const struct { u32 id0, id1; u64 AppletResourceUserId; - } in = { hidControllerIDToOfficial(id0), hidControllerIDToOfficial(id1), AppletResourceUserId }; + } in = { hidControllerIDToOfficial(id0), hidControllerIDToOfficial(id1), appletGetAppletResourceUserId() }; return serviceDispatchIn(&g_hidSrv, 125, in, .in_send_pid = true, @@ -997,19 +925,12 @@ Result hidGetVibrationDeviceInfo(const u32 *VibrationDeviceHandle, HidVibrationD } Result hidSendVibrationValue(const u32 *VibrationDeviceHandle, HidVibrationValue *VibrationValue) { - Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; - const struct { u32 VibrationDeviceHandle; HidVibrationValue VibrationValue; u32 pad; u64 AppletResourceUserId; - } in = { *VibrationDeviceHandle, *VibrationValue, 0, AppletResourceUserId }; + } in = { *VibrationDeviceHandle, *VibrationValue, 0, appletGetAppletResourceUserId() }; return serviceDispatchIn(&g_hidSrv, 201, in, .in_send_pid = true, @@ -1017,17 +938,10 @@ Result hidSendVibrationValue(const u32 *VibrationDeviceHandle, HidVibrationValue } Result hidGetActualVibrationValue(const u32 *VibrationDeviceHandle, HidVibrationValue *VibrationValue) { - Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; - const struct { u32 VibrationDeviceHandle; u64 AppletResourceUserId; - } in = { *VibrationDeviceHandle, AppletResourceUserId }; + } in = { *VibrationDeviceHandle, appletGetAppletResourceUserId() }; return serviceDispatchInOut(&g_hidSrv, 202, in, *VibrationValue, .in_send_pid = true, @@ -1043,12 +957,7 @@ Result hidIsVibrationPermitted(bool *flag) { } Result hidSendVibrationValues(const u32 *VibrationDeviceHandles, HidVibrationValue *VibrationValues, s32 count) { - Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; + u64 AppletResourceUserId = appletGetAppletResourceUserId(); return serviceDispatchIn(&g_hidSrv, 206, AppletResourceUserId, .buffer_attrs = { @@ -1067,16 +976,11 @@ Result hidIsVibrationDeviceMounted(const u32 *VibrationDeviceHandle, bool *flag) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; const struct { u32 VibrationDeviceHandle; u64 AppletResourceUserId; - } in = { *VibrationDeviceHandle, AppletResourceUserId }; + } in = { *VibrationDeviceHandle, appletGetAppletResourceUserId() }; u8 tmp=0; rc = serviceDispatchInOut(&g_hidSrv, 211, in, tmp, @@ -1224,18 +1128,11 @@ Result hidStopSevenSixAxisSensor(void) { } static Result _hidInitializeSevenSixAxisSensor(TransferMemory *tmem0, TransferMemory *tmem1) { - Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; - const struct { u64 AppletResourceUserId; u64 size0; u64 size1; - } in = { AppletResourceUserId, tmem0->size, tmem1->size }; + } in = { appletGetAppletResourceUserId(), tmem0->size, tmem1->size }; return serviceDispatchIn(&g_hidSrv, 306, in, .in_send_pid = true, @@ -1300,17 +1197,10 @@ Result hidSetSevenSixAxisSensorFusionStrength(float strength) { if (hosversionBefore(5,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; - const struct { float strength; u64 AppletResourceUserId; - } in = { strength, AppletResourceUserId }; + } in = { strength, appletGetAppletResourceUserId() }; return serviceDispatchIn(&g_hidSrv, 308, in, .in_send_pid = true, @@ -1321,12 +1211,7 @@ Result hidGetSevenSixAxisSensorFusionStrength(float *strength) { if (hosversionBefore(5,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - Result rc; - u64 AppletResourceUserId; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - AppletResourceUserId = 0; + u64 AppletResourceUserId = appletGetAppletResourceUserId(); return serviceDispatchInOut(&g_hidSrv, 309, AppletResourceUserId, *strength, .in_send_pid = true, diff --git a/nx/source/services/hidsys.c b/nx/source/services/hidsys.c index b5e92f09..4a871bb3 100644 --- a/nx/source/services/hidsys.c +++ b/nx/source/services/hidsys.c @@ -15,12 +15,9 @@ Result _hidsysInitialize(void) { Result rc = smGetService(&g_hidsysSrv, "hid:sys"); if (R_FAILED(rc)) return rc; - - rc = appletGetAppletResourceUserId(&g_hidsysAppletResourceUserId); - if (R_FAILED(rc)) - g_hidsysAppletResourceUserId = 0; - return 0; + g_hidsysAppletResourceUserId = appletGetAppletResourceUserId(); + return 0; } void _hidsysCleanup(void) { diff --git a/nx/source/services/irs.c b/nx/source/services/irs.c index 571a9607..1211ed92 100644 --- a/nx/source/services/irs.c +++ b/nx/source/services/irs.c @@ -18,7 +18,7 @@ static bool g_irsSensorActivated; static IrsCameraEntry g_irsCameras[8]; -static Result _irsGetIrsensorSharedMemoryHandle(Handle* handle_out, u64 AppletResourceUserId); +static Result _irsGetIrsensorSharedMemoryHandle(Handle* handle_out); NX_GENERATE_SERVICE_GUARD(irs); @@ -29,15 +29,11 @@ Result _irsInitialize(void) { g_irsSensorActivated = 0; memset(g_irsCameras, 0, sizeof(g_irsCameras)); - // If this failed (for example because we're a sysmodule) AppletResourceUserId stays zero - u64 AppletResourceUserId=0; - appletGetAppletResourceUserId(&AppletResourceUserId); - rc = smGetService(&g_irsSrv, "irs"); if (R_FAILED(rc)) return rc; - rc = _irsGetIrsensorSharedMemoryHandle(&sharedmem_handle, AppletResourceUserId); + rc = _irsGetIrsensorSharedMemoryHandle(&sharedmem_handle); if (R_SUCCEEDED(rc)) { shmemLoadRemote(&g_irsSharedmem, sharedmem_handle, 0x8000, Perm_R); @@ -131,11 +127,7 @@ Result irsActivateIrsensor(bool activate) { if (g_irsSensorActivated==activate) return 0; Result rc=0; - u64 AppletResourceUserId=0; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - return rc; + u64 AppletResourceUserId = appletGetAppletResourceUserId(); rc = serviceDispatchIn(&g_irsSrv, activate ? 302 : 303, AppletResourceUserId, .in_send_pid = true, @@ -144,7 +136,9 @@ Result irsActivateIrsensor(bool activate) { return rc; } -static Result _irsGetIrsensorSharedMemoryHandle(Handle* handle_out, u64 AppletResourceUserId) { +static Result _irsGetIrsensorSharedMemoryHandle(Handle* handle_out) { + u64 AppletResourceUserId = appletGetAppletResourceUserId(); + return serviceDispatchIn(&g_irsSrv, 304, AppletResourceUserId, .in_send_pid = true, .out_handle_attrs = { SfOutHandleAttr_HipcCopy }, @@ -152,11 +146,11 @@ static Result _irsGetIrsensorSharedMemoryHandle(Handle* handle_out, u64 AppletRe ); } -static Result _irsStopImageProcessor(u32 IrCameraHandle, u64 AppletResourceUserId) { +static Result _irsStopImageProcessor(u32 IrCameraHandle) { const struct { u32 IrCameraHandle; u64 AppletResourceUserId; - } in = { IrCameraHandle, AppletResourceUserId }; + } in = { IrCameraHandle, appletGetAppletResourceUserId() }; return serviceDispatchIn(&g_irsSrv, 305, in, .in_send_pid = true, @@ -165,16 +159,11 @@ static Result _irsStopImageProcessor(u32 IrCameraHandle, u64 AppletResourceUserI Result irsStopImageProcessor(u32 IrCameraHandle) { Result rc=0; - u64 AppletResourceUserId=0; IrsCameraEntry *entry = NULL; if (!serviceIsActive(&g_irsSrv)) return MAKERESULT(Module_Libnx, LibnxError_NotInitialized); - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - return rc; - rc = _IrsCameraEntryGet(IrCameraHandle, &entry); if (R_FAILED(rc)) return rc; @@ -182,19 +171,19 @@ Result irsStopImageProcessor(u32 IrCameraHandle) { if (entry->transfermem.handle == INVALID_HANDLE) return MAKERESULT(Module_Libnx, LibnxError_NotInitialized); - rc = _irsStopImageProcessor(IrCameraHandle, AppletResourceUserId); + rc = _irsStopImageProcessor(IrCameraHandle); _IrsCameraEntryFree(entry); return rc; } -static Result _irsRunImageTransferProcessor(u32 IrCameraHandle, u64 AppletResourceUserId, IrsPackedImageTransferProcessorConfig *config, TransferMemory *tmem) { +static Result _irsRunImageTransferProcessor(u32 IrCameraHandle, IrsPackedImageTransferProcessorConfig *config, TransferMemory *tmem) { const struct { u32 IrCameraHandle; u32 pad; u64 AppletResourceUserId; IrsPackedImageTransferProcessorConfig config; u64 TransferMemory_size; - } in = { IrCameraHandle, 0, AppletResourceUserId, *config, tmem->size }; + } in = { IrCameraHandle, 0, appletGetAppletResourceUserId(), *config, tmem->size }; return serviceDispatchIn(&g_irsSrv, 308, in, .in_send_pid = true, @@ -205,7 +194,6 @@ static Result _irsRunImageTransferProcessor(u32 IrCameraHandle, u64 AppletResour Result irsRunImageTransferProcessor(u32 IrCameraHandle, IrsImageTransferProcessorConfig *config, size_t size) { Result rc=0; - u64 AppletResourceUserId=0; IrsCameraEntry *entry = NULL; IrsPackedImageTransferProcessorConfig packed_config; @@ -218,10 +206,6 @@ Result irsRunImageTransferProcessor(u32 IrCameraHandle, IrsImageTransferProcesso packed_config.unk_constant = 0xa0003; packed_config.sensor_res = config->sensor_res; - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - return rc; - rc = _IrsCameraEntryAlloc(IrCameraHandle, &entry); if (R_FAILED(rc)) return rc; @@ -229,18 +213,18 @@ Result irsRunImageTransferProcessor(u32 IrCameraHandle, IrsImageTransferProcesso rc = tmemCreate(&entry->transfermem, size, Perm_None); if (R_FAILED(rc)) return rc; - rc = _irsRunImageTransferProcessor(IrCameraHandle, AppletResourceUserId, &packed_config, &entry->transfermem); + rc = _irsRunImageTransferProcessor(IrCameraHandle, &packed_config, &entry->transfermem); if (R_FAILED(rc)) _IrsCameraEntryFree(entry); return rc; } -static Result _irsGetImageTransferProcessorState(u32 IrCameraHandle, u64 AppletResourceUserId, void* buffer, size_t size, IrsImageTransferProcessorState *state) { +Result irsGetImageTransferProcessorState(u32 IrCameraHandle, void* buffer, size_t size, IrsImageTransferProcessorState *state) { const struct { u32 IrCameraHandle; u64 AppletResourceUserId; - } in = { IrCameraHandle, AppletResourceUserId }; + } in = { IrCameraHandle, appletGetAppletResourceUserId() }; return serviceDispatchInOut(&g_irsSrv, 309, in, *state, .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, @@ -249,18 +233,6 @@ static Result _irsGetImageTransferProcessorState(u32 IrCameraHandle, u64 AppletR ); } -Result irsGetImageTransferProcessorState(u32 IrCameraHandle, void* buffer, size_t size, IrsImageTransferProcessorState *state) { - Result rc=0; - u64 AppletResourceUserId=0; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - return rc; - - rc = _irsGetImageTransferProcessorState(IrCameraHandle, AppletResourceUserId, buffer, size, state); - return rc; -} - void irsGetDefaultImageTransferProcessorConfig(IrsImageTransferProcessorConfig *config) { memset(config, 0, sizeof(IrsImageTransferProcessorConfig)); @@ -276,26 +248,13 @@ Result irsGetIrCameraHandle(u32 *IrCameraHandle, HidControllerID id) { return serviceDispatchInOut(&g_irsSrv, 311, tmp, *IrCameraHandle); } -static Result _irsSuspendImageProcessor(u32 IrCameraHandle, u64 AppletResourceUserId) { +Result irsSuspendImageProcessor(u32 IrCameraHandle) { const struct { u32 IrCameraHandle; u64 AppletResourceUserId; - } in = { IrCameraHandle, AppletResourceUserId }; + } in = { IrCameraHandle, appletGetAppletResourceUserId() }; return serviceDispatchIn(&g_irsSrv, 313, in, .in_send_pid = true, ); } - -Result irsSuspendImageProcessor(u32 IrCameraHandle) { - Result rc=0; - u64 AppletResourceUserId=0; - - rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_FAILED(rc)) - return rc; - - rc = _irsSuspendImageProcessor(IrCameraHandle, AppletResourceUserId); - return rc; -} - diff --git a/nx/source/services/nfc.c b/nx/source/services/nfc.c index 062a505a..e3a28bb1 100644 --- a/nx/source/services/nfc.c +++ b/nx/source/services/nfc.c @@ -23,7 +23,7 @@ static const NfcRequiredMcuVersionData g_nfcVersionData[2] = { }; static Result _nfcCreateInterface(Service* srv, Service* srv_out); -static Result _nfcInterfaceInitialize(Service* srv, u64 aruid, const NfcRequiredMcuVersionData *version, s32 count, u32 cmd_id); +static Result _nfcInterfaceInitialize(Service* srv, const NfcRequiredMcuVersionData *version, s32 count, u32 cmd_id); static Result _nfcCmdNoIO(Service* srv, u32 cmd_id); static Result _nfcCmdInDevhandleNoOut(Service* srv, const NfcDeviceHandle *handle, u32 cmd_id); @@ -34,10 +34,6 @@ NX_GENERATE_SERVICE_GUARD_PARAMS(nfp, (NfpServiceType service_type), (service_ty Result _nfpInitialize(NfpServiceType service_type) { Result rc = MAKERESULT(Module_Libnx, LibnxError_BadInput); - u64 aruid = 0; - - // If this fails (for example because we're a sysmodule) aruid stays zero - appletGetAppletResourceUserId(&aruid); g_nfpServiceType = service_type; switch (g_nfpServiceType) { @@ -59,7 +55,7 @@ Result _nfpInitialize(NfpServiceType service_type) { rc = _nfcCreateInterface(&g_nfpSrv, &g_nfpInterface); if (R_SUCCEEDED(rc)) - rc = _nfcInterfaceInitialize(&g_nfpInterface, aruid, g_nfcVersionData, 2, 0); + rc = _nfcInterfaceInitialize(&g_nfpInterface, g_nfcVersionData, 2, 0); return rc; } @@ -74,10 +70,6 @@ NX_GENERATE_SERVICE_GUARD_PARAMS(nfc, (NfcServiceType service_type), (service_ty Result _nfcInitialize(NfcServiceType service_type) { Result rc=0; - u64 aruid = 0; - - // If this fails (for example because we're a sysmodule) aruid stays zero - appletGetAppletResourceUserId(&aruid); g_nfcServiceType = service_type; switch (g_nfcServiceType) { @@ -96,7 +88,7 @@ Result _nfcInitialize(NfcServiceType service_type) { rc = _nfcCreateInterface(&g_nfcSrv, &g_nfcInterface); if (R_SUCCEEDED(rc)) - rc = _nfcInterfaceInitialize(&g_nfcInterface, aruid, g_nfcVersionData, 2, hosversionBefore(4,0,0) ? 0 : 400); + rc = _nfcInterfaceInitialize(&g_nfcInterface, g_nfcVersionData, 2, hosversionBefore(4,0,0) ? 0 : 400); return rc; } @@ -199,11 +191,11 @@ static Result _nfcCmdInDevhandleOutBuffer(Service* srv, const NfcDeviceHandle *h ); } -static Result _nfcInterfaceInitialize(Service* srv, u64 aruid, const NfcRequiredMcuVersionData *version, s32 count, u32 cmd_id) { +static Result _nfcInterfaceInitialize(Service* srv, const NfcRequiredMcuVersionData *version, s32 count, u32 cmd_id) { const struct { u64 aruid; u64 zero; - } in = { aruid, 0 }; + } in = { appletGetAppletResourceUserId(), 0 }; serviceAssumeDomain(srv); return serviceDispatchIn(srv, cmd_id, in, diff --git a/nx/source/services/nv.c b/nx/source/services/nv.c index 2c0b1373..80a2a7cb 100644 --- a/nx/source/services/nv.c +++ b/nx/source/services/nv.c @@ -21,7 +21,6 @@ NX_GENERATE_SERVICE_GUARD(nv); Result _nvInitialize(void) { Result rc = MAKERESULT(Module_Libnx, LibnxError_BadInput); - u64 AppletResourceUserId = 0; switch (appletGetAppletType()) { case AppletType_None: @@ -56,10 +55,10 @@ Result _nvInitialize(void) { rc = serviceCloneEx(&g_nvSrv, 1, &g_nvSrvClone); if (R_SUCCEEDED(rc)) { - // Send aruid if available (non-fatal condition if get-aruid fails) - Result aruid_rc = appletGetAppletResourceUserId(&AppletResourceUserId); - if (R_SUCCEEDED(aruid_rc)) - rc = _nvSetClientPID(AppletResourceUserId); + // Send aruid if available + u64 aruid = appletGetAppletResourceUserId(); + if (aruid) + rc = _nvSetClientPID(aruid); } } diff --git a/nx/source/services/vi.c b/nx/source/services/vi.c index 367dad51..db661701 100644 --- a/nx/source/services/vi.c +++ b/nx/source/services/vi.c @@ -285,7 +285,7 @@ Result viSetContentVisibility(bool v) { return serviceDispatchIn(&g_viIManagerDisplayService, 7000, tmp); } -static Result _viOpenLayer(const ViDisplay *display, u64 layer_id, u64 aruid, u8 native_window[0x100], u64 *native_window_size) { +static Result _viOpenLayer(const ViDisplay *display, u64 layer_id, u8 native_window[0x100], u64 *native_window_size) { if (!display->initialized) { return MAKERESULT(Module_Libnx, LibnxError_NotInitialized); } @@ -294,7 +294,7 @@ static Result _viOpenLayer(const ViDisplay *display, u64 layer_id, u64 aruid, u8 ViDisplayName display_name; u64 layer_id; u64 aruid; - } in = { display->display_name, layer_id, aruid }; + } in = { display->display_name, layer_id, appletGetAppletResourceUserId() }; return serviceDispatchInOut(&g_viIApplicationDisplayService, 2020, in, *native_window_size, .in_send_pid = true, .buffer_attrs = { SfBufferAttr_Out | SfBufferAttr_HipcMapAlias }, @@ -359,20 +359,17 @@ Result viCreateLayer(const ViDisplay *display, ViLayer *layer) { alignas(8) u8 native_window_raw[0x100]; u64 native_window_size = 0; - u64 aruid = 0; - appletGetAppletResourceUserId(&aruid); // failure is not fatal - memset(layer, 0, sizeof(ViLayer)); layer->layer_id = __nx_vi_layer_id; Result rc = 0; - if (!layer->layer_id && aruid) { + if (!layer->layer_id && appletGetAppletResourceUserId()) { rc = appletCreateManagedDisplayLayer(&layer->layer_id); if (R_FAILED(rc)) return rc; } if (layer->layer_id) { - rc = _viOpenLayer(display, layer->layer_id, aruid, native_window_raw, &native_window_size); + rc = _viOpenLayer(display, layer->layer_id, native_window_raw, &native_window_size); } else { layer->stray_layer = true; rc = _viCreateStrayLayer(display, __nx_vi_stray_layer_flags, &layer->layer_id, native_window_raw, &native_window_size); @@ -468,16 +465,14 @@ Result viSetLayerScalingMode(ViLayer *layer, ViScalingMode scaling_mode) { } Result viGetIndirectLayerImageMap(void* buffer, size_t size, s32 width, s32 height, u64 IndirectLayerConsumerHandle, u64 *out_size, u64 *out_stride) { - u64 aruid = 0; - Result rc = appletGetAppletResourceUserId(&aruid); - if (R_FAILED(rc)) return rc; + Result rc = 0; const struct { s64 width; s64 height; u64 IndirectLayerConsumerHandle; u64 aruid; - } in = { width, height, IndirectLayerConsumerHandle, aruid }; + } in = { width, height, IndirectLayerConsumerHandle, appletGetAppletResourceUserId() }; struct { s64 size;