Skip to content

Commit a60507f

Browse files
authored
Use stack allocation in SDL's IMG_Load. NFC (#19611)
1 parent 325ae7c commit a60507f

File tree

1 file changed

+8
-16
lines changed

1 file changed

+8
-16
lines changed

src/library_sdl.js

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2185,7 +2185,7 @@ var LibrarySDL = {
21852185
return flags; // We support JPG, PNG, TIF because browsers do
21862186
},
21872187

2188-
IMG_Load_RW__deps: ['SDL_LockSurface', 'SDL_FreeRW', '$PATH_FS', 'malloc', '$stringToNewUTF8'],
2188+
IMG_Load_RW__deps: ['SDL_LockSurface', 'SDL_FreeRW', '$PATH_FS', '$withStackSave', '$stringToUTF8OnStack'],
21892189
IMG_Load_RW__proxy: 'sync',
21902190
IMG_Load_RW: function(rwopsID, freeSrc) {
21912191
try {
@@ -2200,18 +2200,13 @@ var LibrarySDL = {
22002200
func();
22012201
}
22022202
}
2203-
var callStbImage = (func, params) => {
2204-
var x = _malloc({{{ getNativeTypeSize('i32') }}});
2205-
var y = _malloc({{{ getNativeTypeSize('i32') }}});
2206-
var comp = _malloc({{{ getNativeTypeSize('i32') }}});
2207-
addCleanup(() => {
2208-
_free(x);
2209-
_free(y);
2210-
_free(comp);
2211-
if (data) Module['_stbi_image_free'](data);
2212-
});
2203+
var callStbImage = (func, params) => withStackSave(() => {
2204+
var x = stackAlloc({{{ getNativeTypeSize('i32') }}});
2205+
var y = stackAlloc({{{ getNativeTypeSize('i32') }}});
2206+
var comp = stackAlloc({{{ getNativeTypeSize('i32') }}});
22132207
var data = Module['_' + func].apply(null, params.concat([x, y, comp, 0]));
22142208
if (!data) return null;
2209+
addCleanup(() => Module['_stbi_image_free'](data));
22152210
return {
22162211
rawData: true,
22172212
data,
@@ -2220,7 +2215,7 @@ var LibrarySDL = {
22202215
size: {{{ makeGetValue('x', 0, 'i32') }}} * {{{ makeGetValue('y', 0, 'i32') }}} * {{{ makeGetValue('comp', 0, 'i32') }}},
22212216
bpp: {{{ makeGetValue('comp', 0, 'i32') }}}
22222217
};
2223-
}
2218+
});
22242219

22252220
var rwops = SDL.rwops[rwopsID];
22262221
if (rwops === undefined) {
@@ -2245,10 +2240,7 @@ var LibrarySDL = {
22452240
if (!raw) {
22462241
if (raw === null) err('Trying to reuse preloaded image, but freePreloadedMediaOnUse is set!');
22472242
#if STB_IMAGE
2248-
var name = stringToNewUTF8(filename);
2249-
addCleanup(() => {
2250-
_free(name);
2251-
});
2243+
var name = stringToUTF8OnStack(filename);
22522244
raw = callStbImage('stbi_load', [name]);
22532245
if (!raw) return 0;
22542246
#else

0 commit comments

Comments
 (0)