]> Chaos Git - corbenik/ctrulib.git/commitdiff
Add AM_FinishCiaInstallWithoutCommit and AM_CommitImportPrograms (#321)
authormotezazer <motezazer@users.noreply.github.com>
Mon, 16 Jan 2017 12:41:35 +0000 (13:41 +0100)
committerDave Murphy <WinterMute@users.noreply.github.com>
Mon, 16 Jan 2017 12:41:35 +0000 (12:41 +0000)
* Add AM_FinishCiaInstallWithoutCommit and AM_CommitImportPrograms

* Make the tids const

* In the headers also

libctru/include/3ds/services/am.h
libctru/source/services/am.c

index 19e065acd0a05864c9992672924ddc5c5fd935ca..167a29ffa739b5dc1dbc3a3bd51449caee405270 100644 (file)
@@ -203,6 +203,21 @@ Result AM_CancelCIAInstall(Handle ciaHandle);
  */
 Result AM_FinishCiaInstall(Handle ciaHandle);
 
+/**
+ * @brief Finalizes the CIA install process without committing the title to title.db or tmp*.db.
+ * @param ciaHandle CIA handle to finalize.
+ */
+Result AM_FinishCiaInstallWithoutCommit(Handle ciaHandle);
+
+/**
+ * @brief Commits installed CIAs.
+ * @param mediaType Location of the titles to finalize.
+ * @param titleCount Number of titles to finalize.
+ * @param temp Whether the titles being finalized are in the temporary database.
+ * @param titleIds Title IDs to finalize.
+ */
+Result AM_CommitImportPrograms(FS_MediaType mediaType, u32 titleCount, bool temp, const u64* titleIds);
+
 /**
  * @brief Deletes a title.
  * @param mediatype Media type to delete from.
@@ -381,7 +396,7 @@ Result AM_InstallTitleFinish();
  * @param temp Whether the titles being finalized are in the temporary database.
  * @param titleIds Title IDs to finalize.
  */
-Result AM_CommitImportTitles(FS_MediaType mediaType, u32 titleCount, bool temp, u64* titleIds);
+Result AM_CommitImportTitles(FS_MediaType mediaType, u32 titleCount, bool temp, const u64* titleIds);
 
 /**
  * @brief Begins installing a TMD.
index f310ab4707f3a7d592dcc75f12243185737e9788..ad6c50f0c1704def7865d3ce31413b31062f48c3 100644 (file)
@@ -343,6 +343,37 @@ Result AM_FinishCiaInstall(Handle ciaHandle)
        return (Result)cmdbuf[1];
 }
 
+Result AM_FinishCiaInstallWithoutCommit(Handle ciaHandle)
+{
+       Result ret = 0;
+       u32 *cmdbuf = getThreadCommandBuffer();
+
+       cmdbuf[0] = IPC_MakeHeader(0x406,0,2); // 0x04060002
+       cmdbuf[1] = IPC_Desc_MoveHandles(1);
+       cmdbuf[2] = ciaHandle;
+
+       if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
+
+       return (Result)cmdbuf[1];
+}
+
+Result AM_CommitImportPrograms(FS_MediaType mediaType, u32 titleCount, bool temp, const u64* titleIds)
+{
+       Result ret = 0;
+       u32 *cmdbuf = getThreadCommandBuffer();
+
+       cmdbuf[0] = IPC_MakeHeader(0x407,3,2); // 0x040700C2
+       cmdbuf[1] = mediaType;
+       cmdbuf[2] = titleCount;
+       cmdbuf[3] = temp ? 1 : 0;
+       cmdbuf[4] = IPC_Desc_Buffer(titleCount * 8, IPC_BUFFER_R);
+       cmdbuf[5] = (u32)titleIds;
+
+       if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
+
+       return (Result)cmdbuf[1];
+}
+
 Result AM_DeleteTitle(FS_MediaType mediatype, u64 titleID)
 {
        Result ret = 0;
@@ -748,7 +779,7 @@ Result AM_InstallTitleFinish()
        return (Result)cmdbuf[1];
 }
 
-Result AM_CommitImportTitles(FS_MediaType mediaType, u32 titleCount, bool temp, u64* titleIds)
+Result AM_CommitImportTitles(FS_MediaType mediaType, u32 titleCount, bool temp, const u64* titleIds)
 {
        Result ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();