Skip to content

Commit b0109b5

Browse files
committed
Reduce stack usage in task_database_cue.c
Move disc_data from stack to heap.
1 parent d5ba790 commit b0109b5

1 file changed

Lines changed: 22 additions & 8 deletions

File tree

tasks/task_database_cue.c

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -187,14 +187,18 @@ int detect_ps1_game(intfstream_t *fd, char *s, size_t len, const char *filename)
187187
{
188188
int pos;
189189
char raw_game_id[50];
190-
char disc_data[DISC_DATA_SIZE_PS1];
190+
char *disc_data = malloc(DISC_DATA_SIZE_PS1);
191191

192-
/* Load data into buffer and use pointers */
193-
if (intfstream_seek(fd, 0, SEEK_SET) < 0)
192+
if (!disc_data)
194193
return false;
195194

196-
if (intfstream_read(fd, disc_data, DISC_DATA_SIZE_PS1) <= 0)
195+
/* Load data into buffer and use pointers */
196+
if (intfstream_seek(fd, 0, SEEK_SET) < 0
197+
|| intfstream_read(fd, disc_data, DISC_DATA_SIZE_PS1) <= 0)
198+
{
199+
free(disc_data);
197200
return false;
201+
}
198202

199203
disc_data[DISC_DATA_SIZE_PS1 - 1] = '\0';
200204

@@ -238,6 +242,7 @@ int detect_ps1_game(intfstream_t *fd, char *s, size_t len, const char *filename)
238242

239243
string_remove_all_whitespace(s, raw_game_id);
240244
cue_append_multi_disc_suffix(s, filename);
245+
free(disc_data);
241246
return true;
242247
}
243248
}
@@ -247,6 +252,7 @@ int detect_ps1_game(intfstream_t *fd, char *s, size_t len, const char *filename)
247252

248253
string_remove_all_whitespace(s, raw_game_id);
249254
cue_append_multi_disc_suffix(s, filename);
255+
free(disc_data);
250256
return true;
251257
}
252258
else if (string_is_equal_fast(raw_game_id, "PSX.EXE", STRLEN_CONST("PSX.EXE")))
@@ -255,6 +261,7 @@ int detect_ps1_game(intfstream_t *fd, char *s, size_t len, const char *filename)
255261

256262
string_remove_all_whitespace(s, raw_game_id);
257263
cue_append_multi_disc_suffix(s, filename);
264+
free(disc_data);
258265
return false;
259266
}
260267
}
@@ -271,6 +278,7 @@ int detect_ps1_game(intfstream_t *fd, char *s, size_t len, const char *filename)
271278
s[9 ] = 'X';
272279
s[10] = '\0';
273280
cue_append_multi_disc_suffix(s, filename);
281+
free(disc_data);
274282
return false;
275283
}
276284

@@ -404,14 +412,18 @@ int detect_psp_game(intfstream_t *fd, char *s, size_t len, const char *filename)
404412
{
405413
#define DISC_DATA_SIZE_PSP 40000
406414
int pos;
407-
char disc_data[DISC_DATA_SIZE_PSP];
415+
char *disc_data = malloc(DISC_DATA_SIZE_PSP);
408416

409-
/* Load data into buffer and use pointers */
410-
if (intfstream_seek(fd, 0, SEEK_SET) < 0)
417+
if (!disc_data)
411418
return false;
412419

413-
if (intfstream_read(fd, disc_data, DISC_DATA_SIZE_PSP) <= 0)
420+
/* Load data into buffer and use pointers */
421+
if (intfstream_seek(fd, 0, SEEK_SET) < 0
422+
|| intfstream_read(fd, disc_data, DISC_DATA_SIZE_PSP) <= 0)
423+
{
424+
free(disc_data);
414425
return false;
426+
}
415427

416428
disc_data[DISC_DATA_SIZE_PSP - 1] = '\0';
417429

@@ -455,11 +467,13 @@ int detect_psp_game(intfstream_t *fd, char *s, size_t len, const char *filename)
455467
)
456468
{
457469
cue_append_multi_disc_suffix(s, filename);
470+
free(disc_data);
458471
return true;
459472
}
460473
}
461474
}
462475

476+
free(disc_data);
463477
return false;
464478
}
465479

0 commit comments

Comments
 (0)