[Scummvm-cvs-logs] scummvm branch-1-8 -> 9673cdc555b4b13aa3813807addb9fa6c70d272d

lordhoto lordhoto at gmail.com
Fri Feb 26 14:43:15 CET 2016


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
9673cdc555 IOS: Fixes savegame deletion on sandboxed iOS devices


Commit: 9673cdc555b4b13aa3813807addb9fa6c70d272d
    https://github.com/scummvm/scummvm/commit/9673cdc555b4b13aa3813807addb9fa6c70d272d
Author: Vincent Bénony (bsr43 at hopperapp.com)
Date: 2016-02-26T14:43:08+01:00

Commit Message:
IOS: Fixes savegame deletion on sandboxed iOS devices

(cherry picked from commit 587d5d570310118595140b475d77a4be9999963d)

Changed paths:
    backends/platform/ios7/ios7_osys_main.cpp
    backends/platform/ios7/ios7_osys_main.h



diff --git a/backends/platform/ios7/ios7_osys_main.cpp b/backends/platform/ios7/ios7_osys_main.cpp
index c1280a2..25d9cbe 100644
--- a/backends/platform/ios7/ios7_osys_main.cpp
+++ b/backends/platform/ios7/ios7_osys_main.cpp
@@ -79,6 +79,33 @@ AQCallbackStruct OSystem_iOS7::s_AudioQueue;
 SoundProc OSystem_iOS7::s_soundCallback = NULL;
 void *OSystem_iOS7::s_soundParam = NULL;
 
+#ifdef IPHONE_SANDBOXED
+class SandboxedSaveFileManager : public DefaultSaveFileManager {
+	Common::String _sandboxRootPath;
+public:
+
+	SandboxedSaveFileManager(Common::String sandboxRootPath, Common::String defaultSavepath)
+			: DefaultSaveFileManager(defaultSavepath), _sandboxRootPath(sandboxRootPath) {
+	}
+
+	virtual bool removeSavefile(const Common::String &filename) override {
+		Common::String chrootedFile = getSavePath() + "/" + filename;
+		Common::String realFilePath = _sandboxRootPath + chrootedFile;
+
+		if (remove(realFilePath.c_str()) != 0) {
+			if (errno == EACCES)
+				setError(Common::kWritePermissionDenied, "Search or write permission denied: "+chrootedFile);
+
+			if (errno == ENOENT)
+				setError(Common::kPathDoesNotExist, "removeSavefile: '"+chrootedFile+"' does not exist or path is invalid");
+			return false;
+		} else {
+			return true;
+		}
+	}
+};
+#endif
+
 OSystem_iOS7::OSystem_iOS7() :
 	_mixer(NULL), _lastMouseTap(0), _queuedEventTime(0),
 	_mouseNeedTextureUpdate(false), _secondaryTapped(false), _lastSecondaryTap(0),
@@ -89,7 +116,8 @@ OSystem_iOS7::OSystem_iOS7() :
 	_queuedInputEvent.type = Common::EVENT_INVALID;
 	_touchpadModeEnabled = !iOS7_isBigDevice();
 #ifdef IPHONE_SANDBOXED
-	_fsFactory = new ChRootFilesystemFactory(iOS7_getDocumentsDir());
+	_chrootBasePath = iOS7_getDocumentsDir();
+	_fsFactory = new ChRootFilesystemFactory(_chrootBasePath);
 #else
 	_fsFactory = new POSIXFilesystemFactory();
 #endif
@@ -124,7 +152,7 @@ int OSystem_iOS7::timerHandler(int t) {
 
 void OSystem_iOS7::initBackend() {
 #ifdef IPHONE_SANDBOXED
-	_savefileManager = new DefaultSaveFileManager("/Savegames");
+	_savefileManager = new SandboxedSaveFileManager(_chrootBasePath, "/Savegames");
 #else
 	_savefileManager = new DefaultSaveFileManager(SCUMMVM_SAVE_PATH);
 #endif
diff --git a/backends/platform/ios7/ios7_osys_main.h b/backends/platform/ios7/ios7_osys_main.h
index cc2f1cc..174c160 100644
--- a/backends/platform/ios7/ios7_osys_main.h
+++ b/backends/platform/ios7/ios7_osys_main.h
@@ -111,6 +111,10 @@ protected:
 
 	char *_lastErrorMessage;
 
+#ifdef IPHONE_SANDBOXED
+	Common::String _chrootBasePath;
+#endif
+
 public:
 
 	OSystem_iOS7();






More information about the Scummvm-git-logs mailing list