Browse Source

Pass pointer of PHYSFS_AndroidInit struct in Android when initializing PhysFS.

Miku AuahDark 2 years ago
parent
commit
e559fd5e68
3 changed files with 16 additions and 4 deletions
  1. 9 0
      src/common/android.cpp
  2. 6 0
      src/common/android.h
  3. 1 4
      src/modules/filesystem/physfs/Filesystem.cpp

+ 9 - 0
src/common/android.cpp

@@ -804,6 +804,15 @@ const char *getCRequirePath()
 	return path;
 }
 
+const char *getArg0()
+{
+	static PHYSFS_AndroidInit androidInit = {
+		SDL_AndroidGetJNIEnv(),
+		SDL_AndroidGetActivity()
+	};
+	return (const char *) &androidInit;
+}
+
 } // android
 } // love
 

+ 6 - 0
src/common/android.h

@@ -103,6 +103,12 @@ bool checkFusedGame(void **physfsIO_Out);
 
 const char *getCRequirePath();
 
+/**
+ * Retrieve PHYSFS_AndroidInit structure.
+ * @return Pointer to PHYSFS_AndroidInit structure, casted to pointer of char.
+ */
+const char *getArg0();
+
 } // android
 } // love
 

+ 1 - 4
src/modules/filesystem/physfs/Filesystem.cpp

@@ -125,10 +125,7 @@ const char *Filesystem::getName() const
 void Filesystem::init(const char *arg0)
 {
 #ifdef LOVE_ANDROID
-	// TODO: This should be a pointer to an initializeed PHYSFS_AndroidInit
-	// struct on android. But it's only used for PHYSFS_getBaseDir and
-	// PHYSFS_getPrefDir, which we don't use right now...
-	arg0 = nullptr;
+	arg0 = love::android::getArg0();
 #endif
 
 	if (!PHYSFS_init(arg0))