]> Chaos Git - corbenik/ctrulib.git/commitdiff
use svcDuplicateHandle in handle override
authorsmea <smealum@gmail.com>
Sun, 17 Aug 2014 20:37:49 +0000 (13:37 -0700)
committersmea <smealum@gmail.com>
Sun, 17 Aug 2014 20:37:49 +0000 (13:37 -0700)
libctru/include/3ds/svc.h
libctru/source/srv.c
libctru/source/svc.s

index 58969ab299746a75e35de05834f639b284a57f36..9d4dcf6ba07edcc940dbc161be5271560b114899 100644 (file)
@@ -42,6 +42,7 @@ s32  svcUnmapMemoryBlock(Handle memblock, u32 addr);
 s32  svcWaitSynchronization(Handle handle, s64 nanoseconds);
 s32  svcWaitSynchronizationN(s32* out, Handle* handles, s32 handles_num, bool wait_all, s64 nanoseconds);
 s32  svcCloseHandle(Handle handle);
+s32  svcDuplicateHandle(Handle* out, Handle original);
 u64  svcGetSystemTick();
 s32  svcGetSystemInfo(s64* out, u32 type, s32 param);
 s32  svcGetProcessInfo(s64* out, Handle process, u32 type);
index 39aff8e33b3de00ab15c39107065155361d90236..5edfecb2e3d7567b174beaa2cae3b7fa15be35ee 100644 (file)
@@ -107,7 +107,7 @@ Result srvGetServiceHandle(Handle* out, char* name)
     Handle h = __get_handle_from_list(name);
 
     if(h != 0) {
-       *out = h; return 0;
+        return svcDuplicateHandle(out, h);
     }
 #endif
 
index f3601a70e02e572c9aca91812dafd2d779b87e3c..1969ddc97524050284f13bdde1cc5d7db8f88ffc 100644 (file)
@@ -134,6 +134,15 @@ svcWaitSynchronizationN:
        ldr r5, [sp], #4
        bx lr
 
+.global svcDuplicateHandle
+.type svcDuplicateHandle, %function
+svcDuplicateHandle:
+       str r0, [sp,#-0x4]!
+       svc 0x27
+       ldr r3, [sp], #4
+       str r1, [r3]
+       bx lr
+
 .global svcGetSystemTick
 .type svcGetSystemTick, %function
 svcGetSystemTick: