summaryrefslogtreecommitdiffstats
path: root/lib/libdisk
diff options
context:
space:
mode:
authornyan <nyan@FreeBSD.org>2002-11-08 15:25:15 +0000
committernyan <nyan@FreeBSD.org>2002-11-08 15:25:15 +0000
commitfd118b4af55c31c2fb05c85bcbe04c6d3164ae7d (patch)
tree72317b2b68f5bfcff65cf82ab37d68662bd0bcf4 /lib/libdisk
parent1027780c5017a5546b51286f7aaa235a51957478 (diff)
downloadFreeBSD-src-fd118b4af55c31c2fb05c85bcbe04c6d3164ae7d.zip
FreeBSD-src-fd118b4af55c31c2fb05c85bcbe04c6d3164ae7d.tar.gz
- Recognize FAT partition on MBR and PC98 disks.
- Fix to convert to the name of partition.
Diffstat (limited to 'lib/libdisk')
-rw-r--r--lib/libdisk/disk.c67
1 files changed, 47 insertions, 20 deletions
diff --git a/lib/libdisk/disk.c b/lib/libdisk/disk.c
index e9466e8..f0c4998 100644
--- a/lib/libdisk/disk.c
+++ b/lib/libdisk/disk.c
@@ -265,17 +265,42 @@ Int_Open_Disk(const char *name)
printf("%s [%s] %jd %jd\n", t, n, (intmax_t)(off / s), (intmax_t) (len / s));
if (!strcmp(t, "SUN"))
i = Add_Chunk(d, off, len, n, part, 0, 0, 0);
- else if (!strncmp(t, "MBR", 3) && ty == 165)
- i = Add_Chunk(d, off, len, n, freebsd, ty, 0, 0);
- else if (!strncmp(t, "MBR", 3))
- i = Add_Chunk(d, off, len, n, mbr, ty, 0, 0);
- else if (!strcmp(t, "BSD"))
+ else if (!strncmp(t, "MBR", 3)) {
+ switch (ty) {
+ case 0xa5:
+ i = Add_Chunk(d, off, len, n, freebsd, ty, 0, 0);
+ break;
+ case 0x01:
+ case 0x04:
+ case 0x06:
+ case 0x0b:
+ case 0x0c:
+ case 0x0e:
+ i = Add_Chunk(d, off, len, n, fat, ty, 0, 0);
+ break;
+ default:
+ i = Add_Chunk(d, off, len, n, mbr, ty, 0, 0);
+ break;
+ }
+ } else if (!strcmp(t, "BSD"))
i = Add_Chunk(d, off, len, n, part, 0, 0, 0);
- else if (!strcmp(t, "PC98") && ty == 0xc494)
- i = Add_Chunk(d, off, len, n, freebsd, ty, 0, 0);
- else if (!strcmp(t, "PC98"))
- i = Add_Chunk(d, off, len, n, pc98, ty, 0, 0);
- else if (!strcmp(t, "GPT"))
+ else if (!strcmp(t, "PC98")) {
+ switch (ty & 0x7f) {
+ case 0x14:
+ i = Add_Chunk(d, off, len, n, freebsd, ty, 0, 0);
+ break;
+ case 0x20:
+ case 0x21:
+ case 0x22:
+ case 0x23:
+ case 0x24:
+ i = Add_Chunk(d, off, len, n, fat, ty, 0, 0);
+ break;
+ default:
+ i = Add_Chunk(d, off, len, n, pc98, ty, 0, 0);
+ break;
+ }
+ } else if (!strcmp(t, "GPT"))
i = Add_Chunk(d, off, len, n, ty, 0, 0, 0);
else
{ printf("BARF %d\n", __LINE__); exit(0); }
@@ -502,15 +527,17 @@ slice_type_name( int type, int subtype )
{
switch (type) {
- case 0:
+ case whole:
return "whole";
- case 2:
+ case fat:
return "fat";
- case 3:
+ case freebsd:
switch (subtype) {
case 0xc494: return "freebsd";
default: return "unknown";
}
+ case unused:
+ return "unused";
default:
return "unknown";
}
@@ -521,9 +548,9 @@ slice_type_name( int type, int subtype )
{
switch (type) {
- case 0:
+ case whole:
return "whole";
- case 1:
+ case mbr:
switch (subtype) {
case 1: return "fat (12-bit)";
case 2: return "XENIX /";
@@ -557,18 +584,18 @@ slice_type_name( int type, int subtype )
case 239: return "EFI Sys. Part.";
default: return "unknown";
}
- case 2:
+ case fat:
return "fat";
- case 3:
+ case freebsd:
switch (subtype) {
case 165: return "freebsd";
default: return "unknown";
}
- case 4:
+ case extended:
return "extended";
- case 5:
+ case part:
return "part";
- case 6:
+ case unused:
return "unused";
default:
return "unknown";
OpenPOWER on IntegriCloud