Example #1
0
int Partition_FindFS(u32 device, int part_fstype, int seq_i, sec_t *sector)
{
	int ret;
	PartList plist;

	//dbg_printf("Part_Find(%d, %d, %d)\n", device, part_fstype, seq_i);
	if (seq_i <= 0) return -2; // index has to start with 1

	ret = Partition_GetList(device, &plist);
	if (ret < 0) return ret;

	ret = PartList_FindFS(&plist, part_fstype, seq_i, sector);
	if (ret < 0) return ret;
	return 0;
}
Example #2
0
s32 WBFS_OpenNamed(char *partition)
{
	u32 i;
	u32 part_fs  = PART_FS_WBFS;
	u32 part_idx = 0;
	u32 part_lba = 0;
	s32 ret = 0;
	PartList plist;

	// close
	WBFS_Close();

	// parse partition option
	if (strncasecmp(partition, "WBFS", 4) == 0) {
		i = atoi(partition+4);
		if (i < 1 || i > 4) goto err;
		part_fs  = PART_FS_WBFS;
		part_idx = i;
	} else if (strncasecmp(partition, "FAT", 3) == 0) {
		if (wbfsDev != WBFS_DEVICE_USB) goto err;
		i = atoi(partition+3);
		if (i < 1 || i > 9) goto err;
		part_fs  = PART_FS_FAT;
		part_idx = i;
	} else if (strncasecmp(partition, "NTFS", 4) == 0) {
		i = atoi(partition+4);
		if (i < 1 || i > 9) goto err;
		part_fs  = PART_FS_NTFS;
		part_idx = i;
	} else {
		goto err;
	}

	// Get partition entries
	ret = Partition_GetList(wbfsDev, &plist);
	if (ret || plist.num == 0) return -1;

	if (part_fs == PART_FS_WBFS) {
		if (part_idx > plist.wbfs_n) goto err;
		for (i=0; i<plist.num; i++) {
			if (plist.pinfo[i].wbfs_i == part_idx) break;
		}
	} else if (part_fs == PART_FS_FAT) {
		if (part_idx > plist.fat_n) goto err;
		for (i=0; i<plist.num; i++) {
			if (plist.pinfo[i].fat_i == part_idx) break;
		}
	} else if (part_fs == PART_FS_NTFS) {
		if (part_idx > plist.ntfs_n) goto err;
		for (i=0; i<plist.num; i++) {
			if (plist.pinfo[i].ntfs_i == part_idx) break;
		}
	}
	if (i >= plist.num) goto err;
	// set partition lba sector
	part_lba = plist.pentry[i].sector;

	if (WBFS_OpenPart(part_fs, part_idx, part_lba, plist.pentry[i].size, partition)) {
		goto err;
	}
	// success
	return 0;
err:
	return -1;
}
Example #3
0
s32 WBFS_OpenNamed(char *partition)
{
	int i = 0;
	u32 part_fs  = PART_FS_WBFS;
	u32 part_idx = 0;
	u32 part_lba = 0;
	s32 ret = 0;
	PartList plist;
	int x, fs;

	// close
	WBFS_Close();

	dbg_printf("open_part(%s)\n", partition);

	// Get partition entries
	ret = Partition_GetList(wbfsDev, &plist);
	if (ret || plist.num == 0) return -1;

	// parse partition option
	if (strcasecmp(partition, "auto") == 0) {
		int fs_list[] = { PART_FS_WBFS, PART_FS_FAT, PART_FS_NTFS }; // PART_FS_EXT
		int n = sizeof(fs_list) / sizeof(int);
		for (x=0; x<n; x++) {
			fs = fs_list[x];
			i = PartList_FindFS(&plist, fs, 1, NULL);
			if (i < 0) continue;
			if ((fs == PART_FS_WBFS) || is_game_fs(wbfsDev, plist.pentry[i].sector)) {
				part_fs = fs;
				part_idx = 1;
				goto found;
			}
		}
	} else {
		for (x=0; x<PART_FS_NUM; x++) {
			fs = PART_FS_FIRST + x;
			char *fsname = get_fs_name(fs);
			int len = strlen(fsname);
			if (strncasecmp(partition, fsname, len) == 0) {
				int idx = atoi(partition + len);
				if (idx < 1 || idx > 9) goto err;
				i = PartList_FindFS(&plist, fs, idx, NULL);
				if (i >= 0) {
					part_fs = fs;
					part_idx = idx;
					goto found;
				}
			}
		}
	}
	// nothing found
	goto err;

found:
	if (i >= plist.num) goto err;
	// set partition lba sector
	part_lba = plist.pentry[i].sector;

	if (WBFS_OpenPart(part_fs, part_idx, part_lba, plist.pentry[i].size, partition)) {
		goto err;
	}
	// success
	dbg_printf("OK! partition=%s\n", partition);
	return 0;

err:
	Gui_Console_Enable();
	printf(gt("Invalid partition: '%s'"), partition);
	printf("\n");
	__console_flush(0);
	sleep(2);
	return -1;
}