Blame view
fs/partitions/osf.c
1.88 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 10 11 |
/* * fs/partitions/osf.c * * Code extracted from drivers/block/genhd.c * * Copyright (C) 1991-1998 Linus Torvalds * Re-organised Feb 1998 Russell King */ #include "check.h" #include "osf.h" |
34d211a2d Increase OSF part... |
12 |
#define MAX_OSF_PARTITIONS 18 |
1eafbfeb7 Fix corrupted OSF... |
13 |
|
1493bf217 block: use struct... |
14 |
int osf_partition(struct parsed_partitions *state) |
1da177e4c Linux-2.6.12-rc2 |
15 16 17 |
{ int i; int slot = 1; |
1eafbfeb7 Fix corrupted OSF... |
18 |
unsigned int npartitions; |
1da177e4c Linux-2.6.12-rc2 |
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
Sector sect; unsigned char *data; struct disklabel { __le32 d_magic; __le16 d_type,d_subtype; u8 d_typename[16]; u8 d_packname[16]; __le32 d_secsize; __le32 d_nsectors; __le32 d_ntracks; __le32 d_ncylinders; __le32 d_secpercyl; __le32 d_secprtunit; __le16 d_sparespertrack; __le16 d_sparespercyl; __le32 d_acylinders; __le16 d_rpm, d_interleave, d_trackskew, d_cylskew; __le32 d_headswitch, d_trkseek, d_flags; __le32 d_drivedata[5]; __le32 d_spare[5]; __le32 d_magic2; __le16 d_checksum; __le16 d_npartitions; __le32 d_bbsize, d_sbsize; struct d_partition { __le32 p_size; __le32 p_offset; __le32 p_fsize; u8 p_fstype; u8 p_frag; __le16 p_cpg; |
1eafbfeb7 Fix corrupted OSF... |
50 |
} d_partitions[MAX_OSF_PARTITIONS]; |
1da177e4c Linux-2.6.12-rc2 |
51 52 |
} * label; struct d_partition * partition; |
1493bf217 block: use struct... |
53 |
data = read_part_sector(state, 0, §); |
1da177e4c Linux-2.6.12-rc2 |
54 55 56 57 58 59 60 61 62 63 64 65 66 |
if (!data) return -1; label = (struct disklabel *) (data+64); partition = label->d_partitions; if (le32_to_cpu(label->d_magic) != DISKLABELMAGIC) { put_dev_sector(sect); return 0; } if (le32_to_cpu(label->d_magic2) != DISKLABELMAGIC) { put_dev_sector(sect); return 0; } |
1eafbfeb7 Fix corrupted OSF... |
67 68 69 70 71 72 |
npartitions = le16_to_cpu(label->d_npartitions); if (npartitions > MAX_OSF_PARTITIONS) { put_dev_sector(sect); return 0; } for (i = 0 ; i < npartitions; i++, partition++) { |
1da177e4c Linux-2.6.12-rc2 |
73 74 75 76 77 78 79 80 |
if (slot == state->limit) break; if (le32_to_cpu(partition->p_size)) put_partition(state, slot, le32_to_cpu(partition->p_offset), le32_to_cpu(partition->p_size)); slot++; } |
9c867fbe0 partitions: fix s... |
81 82 |
strlcat(state->pp_buf, " ", PAGE_SIZE); |
1da177e4c Linux-2.6.12-rc2 |
83 84 85 |
put_dev_sector(sect); return 1; } |