diff --git a/cmake/platforms/emscripten.cmake b/cmake/platforms/emscripten.cmake index d74217f..b7e9c7d 100644 --- a/cmake/platforms/emscripten.cmake +++ b/cmake/platforms/emscripten.cmake @@ -49,6 +49,9 @@ set(emcc_export_list _rescale_puzzle # Callback for loading user preferences _prefs_load_callback + # Functions for allocating and freeing C memory + _malloc + _free # Main program, run at initialisation time _main) diff --git a/emcclib.js b/emcclib.js index bd4762d..d8ef57f 100644 --- a/emcclib.js +++ b/emcclib.js @@ -827,7 +827,13 @@ mergeInto(LibraryManager.library, { var prefsdata = localStorage.getItem(location.pathname + " preferences"); if (prefsdata !== undefined && prefsdata !== null) { - prefs_load_callback(me, prefsdata); + var lenbytes = lengthBytesUTF8(prefsdata) + 1; + var dest = _malloc(lenbytes); + if (dest != 0) { + stringToUTF8(prefsdata, dest, lenbytes); + prefs_load_callback(me, dest); + _free(dest); + } } } catch (error) { // Log the error but otherwise pretend the settings were diff --git a/emccpre.js b/emccpre.js index a114ce1..842a392 100644 --- a/emccpre.js +++ b/emccpre.js @@ -693,7 +693,7 @@ function initPuzzle() { ['number','number']); timer_callback = Module.cwrap('timer_callback', 'void', ['number']); prefs_load_callback = Module.cwrap('prefs_load_callback', 'void', - ['number','string']); + ['number','number']); if (resizable_div !== null) { var resize_handle = document.getElementById("resizehandle");