Compare commits

..

No commits in common. "cb6f366a2a21e15945e3523909e784500e1e8191" and "4fcdb6eb34b20f1f65eb9791fe513a710a001bea" have entirely different histories.

4 changed files with 9 additions and 22 deletions

View File

@ -473,23 +473,14 @@ NX_INLINE Result serviceDispatchImpl(
return rc; return rc;
} }
#define serviceMacroDetectIsSameType(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
#define serviceMacroDetectIsPointerOrArray(p) (__builtin_classify_type(p) == 5)
#define serviceMacroDecay(p) (&*__builtin_choose_expr(serviceMacroDetectIsPointerOrArray(p), p, NULL))
#define serviceMacroDetectIsPointer(p) serviceMacroDetectIsSameType(p, serviceMacroDecay(p))
#define serviceDispatch(_s,_rid,...) \ #define serviceDispatch(_s,_rid,...) \
serviceDispatchImpl((_s),(_rid),NULL,0,NULL,0,(SfDispatchParams){ __VA_ARGS__ }) serviceDispatchImpl((_s),(_rid),NULL,0,NULL,0,(SfDispatchParams){ __VA_ARGS__ })
#define serviceDispatchIn(_s,_rid,_in,...) \ #define serviceDispatchIn(_s,_rid,_in,...) \
({ _Static_assert(!(serviceMacroDetectIsPointer(_in))); \ serviceDispatchImpl((_s),(_rid),&(_in),sizeof(_in),NULL,0,(SfDispatchParams){ __VA_ARGS__ })
serviceDispatchImpl((_s),(_rid),&(_in),sizeof(_in),NULL,0,(SfDispatchParams){ __VA_ARGS__ }); })
#define serviceDispatchOut(_s,_rid,_out,...) \ #define serviceDispatchOut(_s,_rid,_out,...) \
({ _Static_assert(!(serviceMacroDetectIsPointer(_out))); \ serviceDispatchImpl((_s),(_rid),NULL,0,&(_out),sizeof(_out),(SfDispatchParams){ __VA_ARGS__ })
serviceDispatchImpl((_s),(_rid),NULL,0,&(_out),sizeof(_out),(SfDispatchParams){ __VA_ARGS__ }); })
#define serviceDispatchInOut(_s,_rid,_in,_out,...) \ #define serviceDispatchInOut(_s,_rid,_in,_out,...) \
({ _Static_assert(!(serviceMacroDetectIsPointer(_in))); \ serviceDispatchImpl((_s),(_rid),&(_in),sizeof(_in),&(_out),sizeof(_out),(SfDispatchParams){ __VA_ARGS__ })
_Static_assert(!(serviceMacroDetectIsPointer(_out))); \
serviceDispatchImpl((_s),(_rid),&(_in),sizeof(_in),&(_out),sizeof(_out),(SfDispatchParams){ __VA_ARGS__ }); })

View File

@ -109,7 +109,7 @@ Result capscGenerateApplicationAlbumEntry(CapsApplicationAlbumEntry *appEntry, c
Result capscSaveAlbumScreenShotFile(const CapsAlbumFileId *file_id, const void* buffer, u64 buffer_size) { Result capscSaveAlbumScreenShotFile(const CapsAlbumFileId *file_id, const void* buffer, u64 buffer_size) {
if (hosversionBefore(2,0,0) || hosversionAtLeast(4,0,0)) if (hosversionBefore(2,0,0) || hosversionAtLeast(4,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return serviceDispatchIn(&g_capscSrv, 2201, *file_id, return serviceDispatchIn(&g_capscSrv, 2201, file_id,
.buffer_attrs = { SfBufferAttr_HipcMapTransferAllowsNonSecure | SfBufferAttr_HipcMapAlias | SfBufferAttr_In }, .buffer_attrs = { SfBufferAttr_HipcMapTransferAllowsNonSecure | SfBufferAttr_HipcMapAlias | SfBufferAttr_In },
.buffers = { { buffer, buffer_size }, }, .buffers = { { buffer, buffer_size }, },
); );

View File

@ -60,17 +60,13 @@ NX_INLINE Result _fsObjectDispatchImpl(
_fsObjectDispatchImpl((_s),(_rid),NULL,0,NULL,0,(SfDispatchParams){ __VA_ARGS__ }) _fsObjectDispatchImpl((_s),(_rid),NULL,0,NULL,0,(SfDispatchParams){ __VA_ARGS__ })
#define _fsObjectDispatchIn(_s,_rid,_in,...) \ #define _fsObjectDispatchIn(_s,_rid,_in,...) \
({ _Static_assert(!(serviceMacroDetectIsPointer(_in))); \ _fsObjectDispatchImpl((_s),(_rid),&(_in),sizeof(_in),NULL,0,(SfDispatchParams){ __VA_ARGS__ })
_fsObjectDispatchImpl((_s),(_rid),&(_in),sizeof(_in),NULL,0,(SfDispatchParams){ __VA_ARGS__ }); })
#define _fsObjectDispatchOut(_s,_rid,_out,...) \ #define _fsObjectDispatchOut(_s,_rid,_out,...) \
({ _Static_assert(!(serviceMacroDetectIsPointer(_out))); \ _fsObjectDispatchImpl((_s),(_rid),NULL,0,&(_out),sizeof(_out),(SfDispatchParams){ __VA_ARGS__ })
_fsObjectDispatchImpl((_s),(_rid),NULL,0,&(_out),sizeof(_out),(SfDispatchParams){ __VA_ARGS__ }); })
#define _fsObjectDispatchInOut(_s,_rid,_in,_out,...) \ #define _fsObjectDispatchInOut(_s,_rid,_in,_out,...) \
({ _Static_assert(!(serviceMacroDetectIsPointer(_in))); \ _fsObjectDispatchImpl((_s),(_rid),&(_in),sizeof(_in),&(_out),sizeof(_out),(SfDispatchParams){ __VA_ARGS__ })
_Static_assert(!(serviceMacroDetectIsPointer(_out))); \
_fsObjectDispatchImpl((_s),(_rid),&(_in),sizeof(_in),&(_out),sizeof(_out),(SfDispatchParams){ __VA_ARGS__ }); })
NX_GENERATE_SERVICE_GUARD(fs); NX_GENERATE_SERVICE_GUARD(fs);

View File

@ -1503,7 +1503,7 @@ Result nsCompareApplicationDeliveryInfo(const NsApplicationDeliveryInfo *info0,
Service srv={0}; Service srv={0};
Result rc = nsGetApplicationManagerInterface(&srv); Result rc = nsGetApplicationManagerInterface(&srv);
if (R_SUCCEEDED(rc)) rc = serviceDispatchOut(&srv, 2005, *out, if (R_SUCCEEDED(rc)) rc = serviceDispatchOut(&srv, 2005, out,
.buffer_attrs = { .buffer_attrs = {
SfBufferAttr_HipcMapAlias | SfBufferAttr_In, SfBufferAttr_HipcMapAlias | SfBufferAttr_In,
SfBufferAttr_HipcMapAlias | SfBufferAttr_In, SfBufferAttr_HipcMapAlias | SfBufferAttr_In,
@ -1710,7 +1710,7 @@ Result nsCompareSystemDeliveryInfo(const NsSystemDeliveryInfo *info0, const NsSy
Service srv={0}; Service srv={0};
Result rc = nsGetApplicationManagerInterface(&srv); Result rc = nsGetApplicationManagerInterface(&srv);
if (R_SUCCEEDED(rc)) rc = serviceDispatchOut(&srv, 2015, *out, if (R_SUCCEEDED(rc)) rc = serviceDispatchOut(&srv, 2015, out,
.buffer_attrs = { .buffer_attrs = {
SfBufferAttr_HipcMapAlias | SfBufferAttr_In, SfBufferAttr_HipcMapAlias | SfBufferAttr_In,
SfBufferAttr_HipcMapAlias | SfBufferAttr_In, SfBufferAttr_HipcMapAlias | SfBufferAttr_In,