moved filesystem code for Emscripten platform to separate functions
authorHolger Schemel <info@artsoft.org>
Fri, 12 Mar 2021 07:54:57 +0000 (08:54 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 1 May 2021 13:38:00 +0000 (15:38 +0200)
src/libgame/system.c
src/libgame/system.h
src/screens.c

index a782ed8df7b9e152aeb46baf8378e647a5dd7737..3d23f5fad085a43384e3f091935e9f89d89ef266 100644 (file)
@@ -104,25 +104,6 @@ void InitProgramInfo(char *argv0, char *config_filename, char *userdata_subdir,
   program.log_file[LOG_ERR_ID] = program.log_file_default[LOG_ERR_ID] = stderr;
 
   program.headless = FALSE;
-
-#if defined(PLATFORM_EMSCRIPTEN)
-  EM_ASM
-  (
-    Module.sync_done = 0;
-
-    FS.mkdir('/persistent');           // create persistent data directory
-    FS.mount(IDBFS, {}, '/persistent');        // mount with IDBFS filesystem type
-    FS.syncfs(true, function(err)      // sync persistent data into memory
-    {
-      assert(!err);
-      Module.sync_done = 1;
-    });
-  );
-
-  // wait for persistent data to be synchronized to memory
-  while (emscripten_run_script_int("Module.sync_done") == 0)
-    Delay(20);
-#endif
 }
 
 void InitNetworkInfo(boolean enabled, boolean connected, boolean serveronly,
@@ -206,6 +187,8 @@ void InitExitFunction(void (*exit_function)(int))
 
 void InitPlatformDependentStuff(void)
 {
+  InitEmscriptenFilesystem();
+
   // this is initialized in GetOptions(), but may already be used before
   options.verbose = TRUE;
 
@@ -1920,3 +1903,43 @@ void ClearJoystickState(void)
 {
   SDLClearJoystickState();
 }
+
+
+// ============================================================================
+// Emscripten functions
+// ============================================================================
+
+void InitEmscriptenFilesystem(void)
+{
+#if defined(PLATFORM_EMSCRIPTEN)
+  EM_ASM
+  (
+    Module.sync_done = 0;
+
+    FS.mkdir('/persistent');           // create persistent data directory
+    FS.mount(IDBFS, {}, '/persistent');        // mount with IDBFS filesystem type
+    FS.syncfs(true, function(err)      // sync persistent data into memory
+    {
+      assert(!err);
+      Module.sync_done = 1;
+    });
+  );
+
+  // wait for persistent data to be synchronized to memory
+  while (emscripten_run_script_int("Module.sync_done") == 0)
+    Delay(20);
+#endif
+}
+
+void SyncEmscriptenFilesystem(void)
+{
+#if defined(PLATFORM_EMSCRIPTEN)
+  EM_ASM
+  (
+    FS.syncfs(function(err)
+    {
+      assert(!err);
+    });
+  );
+#endif
+}
index 2db4961c53cbedd3c9d939c9e13339b8c7558025..26254d9cd52d8c612db80c4da23a72da2db8c66f 100644 (file)
@@ -1984,4 +1984,7 @@ boolean ReadJoystick(int, int *, int *, boolean *, boolean *);
 boolean CheckJoystickOpened(int);
 void ClearJoystickState(void);
 
+void InitEmscriptenFilesystem(void);
+void SyncEmscriptenFilesystem(void);
+
 #endif // SYSTEM_H
index d1629867c96a2668cb0f1f282e4c54ab04c64936..c02e09d355d7807fe5fa7b4545d6149c9692e8cc 100644 (file)
@@ -1739,15 +1739,7 @@ void DrawMainMenu(void)
 
   OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2);
 
-#if defined(PLATFORM_EMSCRIPTEN)
-  EM_ASM
-  (
-    FS.syncfs(function(err)
-    {
-      assert(!err);
-    });
-  );
-#endif
+  SyncEmscriptenFilesystem();
 }
 
 static void gotoTopLevelDir(void)