From 12f0f638ff16ae79b8102da3362d5cdf01f58047 Mon Sep 17 00:00:00 2001 From: yellows8 Date: Thu, 2 Jun 2016 20:49:01 -0400 Subject: [PATCH] Moved amapp init into a seperate function. --- libctru/include/3ds/services/am.h | 5 ++++- libctru/source/services/am.c | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/libctru/include/3ds/services/am.h b/libctru/include/3ds/services/am.h index dc301b1..d02650b 100644 --- a/libctru/include/3ds/services/am.h +++ b/libctru/include/3ds/services/am.h @@ -56,9 +56,12 @@ typedef struct { u64 titlesFreeSpace; ///< Free space for titles. } AM_TWLPartitionInfo; -/// Initializes AM. +/// Initializes AM. This doesn't initialize with "am:app", see amAppInit(). Result amInit(void); +/// Initializes AM with a service which has access to the amapp-commands. This should only be used when using the amapp commands, not non-amapp AM commands. +Result amAppInit(void); + /// Exits AM. void amExit(void); diff --git a/libctru/source/services/am.c b/libctru/source/services/am.c index 6e3f452..cc51e25 100644 --- a/libctru/source/services/am.c +++ b/libctru/source/services/am.c @@ -20,6 +20,18 @@ Result amInit(void) ret = srvGetServiceHandle(&amHandle, "am:net"); if (R_FAILED(ret)) ret = srvGetServiceHandle(&amHandle, "am:u"); if (R_FAILED(ret)) ret = srvGetServiceHandle(&amHandle, "am:sys"); + if (R_FAILED(ret)) AtomicDecrement(&amRefCount); + + return ret; +} + +Result amAppInit(void) +{ + Result ret; + + if (AtomicPostIncrement(&amRefCount)) return 0; + + ret = srvGetServiceHandle(&amHandle, "am:sys"); if (R_FAILED(ret)) ret = srvGetServiceHandle(&amHandle, "am:app"); if (R_FAILED(ret)) AtomicDecrement(&amRefCount);