Skip to content

Commit d009275

Browse files
committed
Add sbCreatePath to create a path to a game
1 parent bea1c08 commit d009275

File tree

6 files changed

+39
-82
lines changed

6 files changed

+39
-82
lines changed

include/supportbase.h

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ int sbReadList(base_game_info_t **list, const char *prefix, int *fsize, int *gam
4242
int sbPrepare(base_game_info_t *game, config_set_t *configSet, int size_cdvdman, void **cdvdman_irx, int *patchindex);
4343
void sbUnprepare(void *pCommon);
4444
void sbRebuildULCfg(base_game_info_t **list, const char *prefix, int gamecount, int excludeID);
45+
void sbCreatePath(const base_game_info_t *game, char *path, const char *prefix, const char *sep, int part);
4546
void sbDelete(base_game_info_t **list, const char *prefix, const char *sep, int gamecount, int id);
4647
void sbRename(base_game_info_t **list, const char *prefix, const char *sep, int gamecount, int id, char *newname);
4748
config_set_t *sbPopulateConfig(base_game_info_t *game, const char *prefix, const char *sep);

include/system.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#define SYS_LOAD_USB_MODULES 0x02
88
#define SYS_LOAD_ISOFS_MODULE 0x04
99

10-
unsigned int USBA_crc32(char *string);
10+
unsigned int USBA_crc32(const char *string);
1111
int sysGetDiscID(char *discID);
1212
void sysInitDev9(void);
1313
void sysShutdownDev9(void);

src/ethsupport.c

+2-8
Original file line numberDiff line numberDiff line change
@@ -665,13 +665,7 @@ static void ethLaunchGame(int id, config_set_t *configSet)
665665
strcpy(settings->smb_password, gPCPassword);
666666

667667
//Initialize layer 1 information.
668-
switch (game->format) {
669-
case GAME_FORMAT_USBLD:
670-
sprintf(partname, "%s%s.00", ethPrefix, settings->filename);
671-
break;
672-
default: //Raw ISO9660 disc image; one part.
673-
sprintf(partname, "%s%s\\%s", ethPrefix, game->media == SCECdPS2CD ? "CD" : "DVD", settings->filename);
674-
}
668+
sbCreatePath(game, partname, ethPrefix, "\\", 0);
675669

676670
if (gPS2Logo) {
677671
int fd = open(partname, O_RDONLY, 0666);
@@ -687,7 +681,7 @@ static void ethLaunchGame(int id, config_set_t *configSet)
687681
case GAME_FORMAT_USBLD:
688682
layer1_part = layer1_start / 0x80000;
689683
layer1_offset = layer1_start % 0x80000;
690-
sprintf(partname, "%s%s.%02x", ethPrefix, settings->filename, layer1_part);
684+
sbCreatePath(game, partname, ethPrefix, "\\", layer1_part);
691685
break;
692686
default: //Raw ISO9660 disc image; one part.
693687
layer1_part = 0;

src/supportbase.c

+31-49
Original file line numberDiff line numberDiff line change
@@ -643,73 +643,55 @@ void sbRebuildULCfg(base_game_info_t **list, const char *prefix, int gamecount,
643643
}
644644
}
645645

646+
static void sbCreatePath_name(const base_game_info_t *game, char *path, const char *prefix, const char *sep, int part, const char *game_name)
647+
{
648+
switch (game->format) {
649+
case GAME_FORMAT_USBLD:
650+
snprintf(path, 256, "%sul.%08X.%s.%02x", prefix, USBA_crc32(game_name), game->startup, part);
651+
break;
652+
case GAME_FORMAT_ISO:
653+
snprintf(path, 256, "%s%s%s%s%s", prefix, (game->media == SCECdPS2CD) ? "CD" : "DVD", sep, game_name, game->extension);
654+
break;
655+
case GAME_FORMAT_OLD_ISO:
656+
snprintf(path, 256, "%s%s%s%s.%s%s", prefix, (game->media == SCECdPS2CD) ? "CD" : "DVD", sep, game->startup, game_name, game->extension);
657+
break;
658+
}
659+
}
660+
661+
void sbCreatePath(const base_game_info_t *game, char *path, const char *prefix, const char *sep, int part)
662+
{
663+
sbCreatePath_name(game, path, prefix, sep, part, game->name);
664+
}
665+
646666
void sbDelete(base_game_info_t **list, const char *prefix, const char *sep, int gamecount, int id)
647667
{
668+
int part;
648669
char path[256];
649670
base_game_info_t *game = &(*list)[id];
650671

651-
if (game->format != GAME_FORMAT_USBLD) {
652-
if (game->format != GAME_FORMAT_OLD_ISO) {
653-
if (game->media == SCECdPS2CD)
654-
snprintf(path, sizeof(path), "%sCD%s%s.%s%s", prefix, sep, game->startup, game->name, game->extension);
655-
else
656-
snprintf(path, sizeof(path), "%sDVD%s%s.%s%s", prefix, sep, game->startup, game->name, game->extension);
657-
} else {
658-
if (game->media == SCECdPS2CD)
659-
snprintf(path, sizeof(path), "%sCD%s%s%s", prefix, sep, game->name, game->extension);
660-
else
661-
snprintf(path, sizeof(path), "%sDVD%s%s%s", prefix, sep, game->name, game->extension);
662-
}
672+
for (part = 0; part < game->parts; part++) {
673+
sbCreatePath(game, path, prefix, sep, part);
663674
unlink(path);
664-
} else {
665-
char *pathStr = "%sul.%08X.%s.%02x";
666-
unsigned int crc = USBA_crc32(game->name);
667-
int i = 0;
668-
do {
669-
snprintf(path, sizeof(path), pathStr, prefix, crc, game->startup, i++);
670-
unlink(path);
671-
} while (i < game->parts);
675+
}
672676

677+
if (game->format == GAME_FORMAT_USBLD) {
673678
sbRebuildULCfg(list, prefix, gamecount, id);
674679
}
675680
}
676681

677682
void sbRename(base_game_info_t **list, const char *prefix, const char *sep, int gamecount, int id, char *newname)
678683
{
684+
int part;
679685
char oldpath[256], newpath[256];
680686
base_game_info_t *game = &(*list)[id];
681687

682-
if (game->format != GAME_FORMAT_USBLD) {
683-
if (game->format == GAME_FORMAT_OLD_ISO) {
684-
if (game->media == SCECdPS2CD) {
685-
snprintf(oldpath, sizeof(oldpath), "%sCD%s%s.%s%s", prefix, sep, game->startup, game->name, game->extension);
686-
snprintf(newpath, sizeof(newpath), "%sCD%s%s.%s%s", prefix, sep, game->startup, newname, game->extension);
687-
} else {
688-
snprintf(oldpath, sizeof(oldpath), "%sDVD%s%s.%s%s", prefix, sep, game->startup, game->name, game->extension);
689-
snprintf(newpath, sizeof(newpath), "%sDVD%s%s.%s%s", prefix, sep, game->startup, newname, game->extension);
690-
}
691-
} else {
692-
if (game->media == SCECdPS2CD) {
693-
snprintf(oldpath, sizeof(oldpath), "%sCD%s%s%s", prefix, sep, game->name, game->extension);
694-
snprintf(newpath, sizeof(newpath), "%sCD%s%s%s", prefix, sep, newname, game->extension);
695-
} else {
696-
snprintf(oldpath, sizeof(oldpath), "%sDVD%s%s%s", prefix, sep, game->name, game->extension);
697-
snprintf(newpath, sizeof(newpath), "%sDVD%s%s%s", prefix, sep, newname, game->extension);
698-
}
699-
}
688+
for (part = 0; part < game->parts; part++) {
689+
sbCreatePath_name(game, oldpath, prefix, sep, part, game->name);
690+
sbCreatePath_name(game, newpath, prefix, sep, part, newname);
700691
rename(oldpath, newpath);
701-
} else {
702-
const char *pathStr = "%sul.%08X.%s.%02x";
703-
unsigned int oldcrc = USBA_crc32(game->name);
704-
unsigned int newcrc = USBA_crc32(newname);
705-
int i;
706-
707-
for (i = 0; i < game->parts; i++) {
708-
snprintf(oldpath, sizeof(oldpath), pathStr, prefix, oldcrc, game->startup, i);
709-
snprintf(newpath, sizeof(newpath), pathStr, prefix, newcrc, game->startup, i);
710-
rename(oldpath, newpath);
711-
}
692+
}
712693

694+
if (game->format == GAME_FORMAT_USBLD) {
713695
memset(game->name, 0, UL_GAME_NAME_MAX + 1);
714696
memcpy(game->name, newname, UL_GAME_NAME_MAX);
715697
sbRebuildULCfg(list, prefix, gamecount, -1);

src/system.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ void sysPowerOff(void)
268268

269269
static unsigned int crctab[0x400];
270270

271-
unsigned int USBA_crc32(char *string)
271+
unsigned int USBA_crc32(const char *string)
272272
{
273273
int crc, table, count, byte;
274274

src/usbsupport.c

+3-23
Original file line numberDiff line numberDiff line change
@@ -291,17 +291,7 @@ static void usbLaunchGame(int id, config_set_t *configSet)
291291
compatmask = sbPrepare(game, configSet, irx_size, irx, &index);
292292
settings = (struct cdvdman_settings_usb *)((u8 *)irx + index);
293293
for (i = 0; i < game->parts; i++) {
294-
switch (game->format) {
295-
case GAME_FORMAT_ISO:
296-
sprintf(partname, "%s%s/%s%s", usbPrefix, (game->media == SCECdPS2CD) ? "CD" : "DVD", game->name, game->extension);
297-
break;
298-
case GAME_FORMAT_OLD_ISO:
299-
sprintf(partname, "%s%s/%s.%s%s", usbPrefix, (game->media == SCECdPS2CD) ? "CD" : "DVD", game->startup, game->name, game->extension);
300-
break;
301-
default: //USBExtreme format.
302-
sprintf(partname, "%sul.%08X.%s.%02x", usbPrefix, USBA_crc32(game->name), game->startup, i);
303-
}
304-
294+
sbCreatePath(game, partname, usbPrefix, "/", i);
305295
fd = open(partname, O_RDONLY);
306296
if (fd >= 0) {
307297
settings->LBAs[i] = fileXioIoctl(fd, USBMASS_IOCTL_GET_LBA, partname);
@@ -332,24 +322,14 @@ static void usbLaunchGame(int id, config_set_t *configSet)
332322
}
333323

334324
//Initialize layer 1 information.
335-
switch (game->format) {
336-
case GAME_FORMAT_ISO:
337-
sprintf(partname, "%s%s/%s%s", usbPrefix, (game->media == SCECdPS2CD) ? "CD" : "DVD", game->name, game->extension);
338-
break;
339-
case GAME_FORMAT_OLD_ISO:
340-
sprintf(partname, "%s%s/%s.%s%s", usbPrefix, (game->media == SCECdPS2CD) ? "CD" : "DVD", game->startup, game->name, game->extension);
341-
break;
342-
default: //USBExtreme format.
343-
sprintf(partname, "%sul.%08X.%s.00", usbPrefix, USBA_crc32(game->name), game->startup);
344-
}
345-
325+
sbCreatePath(game, partname, usbPrefix, "/", 0);
346326
layer1_start = sbGetISO9660MaxLBA(partname);
347327

348328
switch (game->format) {
349329
case GAME_FORMAT_USBLD:
350330
layer1_part = layer1_start / 0x80000;
351331
layer1_offset = layer1_start % 0x80000;
352-
sprintf(partname, "%sul.%08X.%s.%02x", usbPrefix, USBA_crc32(game->name), game->startup, layer1_part);
332+
sbCreatePath(game, partname, usbPrefix, "/", layer1_part);
353333
break;
354334
default: //Raw ISO9660 disc image; one part.
355335
layer1_part = 0;

0 commit comments

Comments
 (0)