From deb6baf0dbeb5e08dba6bf66d70cee07d7c22d4f Mon Sep 17 00:00:00 2001 From: Oystein Eftevaag Date: Sun, 3 Feb 2008 12:36:51 +0000 Subject: Migration code for users updating to the 1.1.3 iPhone firmware, which has a different directory structure and permission setup svn-id: r30761 --- backends/platform/iphone/osys_iphone.cpp | 45 +++++++++++++++++++++++++++++--- backends/platform/iphone/osys_iphone.h | 15 +++++++++++ 2 files changed, 57 insertions(+), 3 deletions(-) (limited to 'backends') diff --git a/backends/platform/iphone/osys_iphone.cpp b/backends/platform/iphone/osys_iphone.cpp index 5bbb1b4ca9..3365c2da9d 100644 --- a/backends/platform/iphone/osys_iphone.cpp +++ b/backends/platform/iphone/osys_iphone.cpp @@ -27,15 +27,14 @@ #include #include -#include #include #include -#include "common/system.h" #include "common/scummsys.h" #include "common/util.h" #include "common/rect.h" -#include "common/events.h" +#include "common/file.h" +#include "common/fs.h" #include "base/main.h" @@ -54,6 +53,7 @@ const OSystem::GraphicsMode OSystem_IPHONE::s_supportedGraphicsModes[] = { AQCallbackStruct OSystem_IPHONE::s_AudioQueue; SoundProc OSystem_IPHONE::s_soundCallback = NULL; void *OSystem_IPHONE::s_soundParam = NULL; +bool OSystem_IPHONE::s_is113OrHigher = false; OSystem_IPHONE::OSystem_IPHONE() : _savefile(NULL), _mixer(NULL), _timer(NULL), _offscreen(NULL), @@ -1172,8 +1172,47 @@ OSystem *OSystem_IPHONE_create() { return new OSystem_IPHONE(); } +const char* OSystem_IPHONE::getConfigPath() { + if (s_is113OrHigher) + return SCUMMVM_PREFS_PATH; + else + return SCUMMVM_OLD_PREFS_PATH; +} + +const char* OSystem_IPHONE::getSavePath() { + if (s_is113OrHigher) + return SCUMMVM_SAVE_PATH; + else + return SCUMMVM_OLD_SAVE_PATH; +} + +void OSystem_IPHONE::migrateApp() { + // Migrate to the new 1.1.3 directory structure, if needed. + + FilesystemNode file("/var/mobile"); + if (file.exists() && file.isDirectory()) { + // We have 1.1.3 or above. + s_is113OrHigher = true; + file = FilesystemNode(SCUMMVM_ROOT_PATH); + if (!file.exists()) { + system("mkdir " SCUMMVM_ROOT_PATH); + system("mkdir " SCUMMVM_SAVE_PATH); + + // Copy over the prefs file + system("cp " SCUMMVM_OLD_PREFS_PATH " " SCUMMVM_PREFS_PATH); + + file = FilesystemNode(SCUMMVM_OLD_SAVE_PATH); + // Copy over old savegames to the new directory. + if (file.exists() && file.isDirectory()) + system("cp " SCUMMVM_OLD_SAVE_PATH "/* " SCUMMVM_SAVE_PATH "/"); + } + } +} + void iphone_main(int argc, char *argv[]) { + OSystem_IPHONE::migrateApp(); + // Redirect stdout and stderr if we're launching from the Springboard. if (argc == 2 && strcmp(argv[1], "--launchedFromSB") == 0) { FILE *newfp = fopen("/tmp/scummvm.log", "a"); diff --git a/backends/platform/iphone/osys_iphone.h b/backends/platform/iphone/osys_iphone.h index eeb8504680..71272b73fe 100644 --- a/backends/platform/iphone/osys_iphone.h +++ b/backends/platform/iphone/osys_iphone.h @@ -27,11 +27,21 @@ #include "graphics/surface.h" #include "iphone_common.h" +#include "common/system.h" +#include "common/events.h" + +#include #define AUDIO_BUFFERS 3 #define WAVE_BUFFER_SIZE 8192 #define AUDIO_SAMPLE_RATE 44100 +#define SCUMMVM_ROOT_PATH "/var/mobile/Library/ScummVM" +#define SCUMMVM_SAVE_PATH SCUMMVM_ROOT_PATH "/Savegames" +#define SCUMMVM_OLD_SAVE_PATH "/var/root/.scummvm" +#define SCUMMVM_PREFS_PATH SCUMMVM_ROOT_PATH "/Preferences" +#define SCUMMVM_OLD_PREFS_PATH "/var/root/.scummvmrc" + typedef void (*SoundProc)(void *param, byte *buf, int len); typedef int (*TimerProc)(int interval); @@ -49,6 +59,7 @@ protected: static AQCallbackStruct s_AudioQueue; static SoundProc s_soundCallback; static void *s_soundParam; + static bool s_is113OrHigher; Common::SaveFileManager *_savefile; Audio::Mixer *_mixer; @@ -154,6 +165,10 @@ public: virtual Audio::Mixer *getMixer(); virtual Common::TimerManager *getTimerManager(); + static void migrateApp(); + static const char* getConfigPath(); + static const char* getSavePath(); + protected: inline void addDirtyRect(int16 x1, int16 y1, int16 w, int16 h); void internUpdateScreen(); -- cgit v1.2.3