From c2edc507503850f8d5f9d205821455b8035c0eda Mon Sep 17 00:00:00 2001 From: Alex Taber Date: Tue, 4 Jun 2024 22:38:19 -0400 Subject: [PATCH] Backup badge extdata before installing badges --- include/music.h | 2 +- source/badges.c | 40 ++++++++++++++++++++++++++++++++++++++++ source/music.c | 3 ++- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/include/music.h b/include/music.h index fb9a7a2..8208840 100644 --- a/include/music.h +++ b/include/music.h @@ -34,7 +34,7 @@ #include #include -#define BUFFER_COUNT 2 +#define BUFFER_COUNT 8 #define BUF_TO_READ 48000 // How much data should be buffered at a time for ogg typedef struct { diff --git a/source/badges.c b/source/badges.c index d8c558c..70fc8bf 100644 --- a/source/badges.c +++ b/source/badges.c @@ -287,12 +287,52 @@ int install_badge_dir(FS_DirectoryEntry set_dir, int *badge_count, int set_id) return badges_in_set; } +Result backup_badges(void) +{ + char *badgeMng = NULL; + char *badgeData = NULL; + + u32 mngRead = file_to_buf(fsMakePath(PATH_ASCII, "/BadgeMngFile.dat"), ArchiveBadgeExt, &badgeMng); + u32 dataRead = file_to_buf(fsMakePath(PATH_ASCII, "/BadgeData.dat"), ArchiveBadgeExt, &badgeData); + if (mngRead != BADGE_MNG_SIZE || dataRead != BADGE_DATA_SIZE) + { + throw_error(language.badges.extdata_locked, ERROR_LEVEL_WARNING); + if (badgeMng) free(badgeMng); + if (badgeData) free(badgeData); + return -1; + } + remake_file(fsMakePath(PATH_ASCII, "/3ds/Anemone3DS/BadgeMngFile.dat"), ArchiveSD, mngRead); + remake_file(fsMakePath(PATH_ASCII, "/3ds/Anemone3DS/BadgeData.dat"), ArchiveSD, dataRead); + Result res = buf_to_file(mngRead, fsMakePath(PATH_ASCII, "/3ds/Anemone3DS/BadgeMngFile.dat"), ArchiveSD, badgeMng); + if (R_FAILED(res)) + { + free(badgeMng); + free(badgeData); + return -1; + } + res = buf_to_file(dataRead, fsMakePath(PATH_ASCII, "/3ds/Anemone3DS/BadgeData.dat"), ArchiveSD, badgeData); + if (R_FAILED(res)) + { + free(badgeMng); + free(badgeData); + return -1; + } + return 0; +} + Result install_badges(void) { Handle handle = 0; Handle folder = 0; Result res = 0; + res = backup_badges(); + if (R_FAILED(res)) + { + DEBUG("Backup badges failed\n"); + return res; + } + res = actInit(); if (R_FAILED(res)) { diff --git a/source/music.c b/source/music.c index 1c488bf..399c0d9 100644 --- a/source/music.c +++ b/source/music.c @@ -280,7 +280,8 @@ void fill_buffers(audio_s *audio) if (!audio->is_looping && audio->current_block == audio->loop_end) { - // stop playing + audio->stop = true; + return; } for (u8 channelIndex = 0; channelIndex < audio->channel_count; ++channelIndex)