Skip to content
This repository was archived by the owner on Mar 18, 2023. It is now read-only.

Commit c0ddeff

Browse files
committed
Fix creating list of saves.
1 parent 53c538c commit c0ddeff

1 file changed

Lines changed: 25 additions & 38 deletions

File tree

src/saves.c

Lines changed: 25 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -172,27 +172,20 @@ static saveHandler_t *promptSaveHandler()
172172
gameSave_t *savesGetSaves(device_t dev)
173173
{
174174
sceMcTblGetDir mcDir[64] __attribute__((aligned(64)));
175-
gameSave_t *saves;
176-
gameSave_t *save;
175+
gameSave_t *saves = NULL;
176+
gameSave_t *save = NULL;
177177
saveHandler_t *handler;
178178
mcIcon iconSys;
179179
int ret, fd;
180180
char iconSysPath[64];
181-
int first = 1;
182-
183-
saves = calloc(1, sizeof(gameSave_t));
184-
save = saves;
185181

186182
if(dev == FLASH_DRIVE)
187183
{
188184
fio_dirent_t record;
189185
int fs = fioDopen(flashDriveDevice);
190186

191187
if(!fs)
192-
{
193-
free(saves);
194188
return NULL;
195-
}
196189

197190
while(fioDread(fs, &record) > 0)
198191
{
@@ -205,8 +198,13 @@ gameSave_t *savesGetSaves(device_t dev)
205198
printf("Ignoring file \"%s\"\n", record.name);
206199
continue;
207200
}
208-
209-
if(!first)
201+
202+
if(!saves)
203+
{
204+
saves = calloc(1, sizeof(gameSave_t));
205+
save = saves;
206+
}
207+
else
210208
{
211209
gameSave_t *next = calloc(1, sizeof(gameSave_t));
212210
save->next = next;
@@ -218,15 +216,6 @@ gameSave_t *savesGetSaves(device_t dev)
218216
strncpy(save->name, record.name, 100);
219217
rtrim(save->name);
220218
snprintf(save->path, 64, "%s%s", flashDriveDevice, record.name);
221-
222-
first = 0;
223-
}
224-
225-
if(first) // Didn't find any saves
226-
{
227-
free(saves);
228-
fioDclose(fs);
229-
return NULL;
230219
}
231220

232221
fioDclose(fs);
@@ -237,12 +226,6 @@ gameSave_t *savesGetSaves(device_t dev)
237226
mcGetDir((dev == MC_SLOT_1) ? 0 : 1, 0, "/*", 0, 54, mcDir);
238227
mcSync(0, NULL, &ret);
239228

240-
if(ret == 0)
241-
{
242-
free(saves);
243-
return NULL;
244-
}
245-
246229
int i;
247230
for(i = 0; i < ret; i++)
248231
{
@@ -256,15 +239,28 @@ gameSave_t *savesGetSaves(device_t dev)
256239
continue; // Ignore "Your System Configuration" save
257240

258241
char *path = savesGetDevicePath(mcDir[i].EntryName, dev);
259-
strncpy(save->path, path, 64);
242+
snprintf(iconSysPath, 64, "%s/icon.sys", path);
260243
free(path);
261-
262-
snprintf(iconSysPath, 64, "%s/icon.sys", save->path);
263244

264245
fd = fioOpen(iconSysPath, O_RDONLY);
265246
if(!fd)
266247
continue; // invalid save
267248

249+
if(!saves)
250+
{
251+
saves = calloc(1, sizeof(gameSave_t));
252+
save = saves;
253+
}
254+
else
255+
{
256+
gameSave_t *next = calloc(1, sizeof(gameSave_t));
257+
save->next = next;
258+
save = next;
259+
next->next = NULL;
260+
}
261+
262+
strncpy(save->path, path, 64);
263+
268264
fioRead(fd, &iconSys, sizeof(mcIcon));
269265
fioClose(fd);
270266

@@ -323,15 +319,6 @@ gameSave_t *savesGetSaves(device_t dev)
323319

324320
strncpy(save->name, ascii, 100);
325321
rtrim(save->name);
326-
327-
if(i != ret - 1)
328-
{
329-
gameSave_t *next = calloc(1, sizeof(gameSave_t));
330-
save->next = next;
331-
save = next;
332-
}
333-
else
334-
save->next = NULL;
335322
}
336323
}
337324

0 commit comments

Comments
 (0)