diff options
author | Karel Zak | 2013-02-04 17:46:30 +0100 |
---|---|---|
committer | Karel Zak | 2013-03-11 13:00:55 +0100 |
commit | a08dc0ca895e6a46c33ace6a021fbb76a60a0e4e (patch) | |
tree | d136c50456f77e66238f70cd0329789edc65a0b4 | |
parent | fdisk: (sun) use cpu_to_be* macros, remove other_endian global variable (diff) | |
download | kernel-qcow2-util-linux-a08dc0ca895e6a46c33ace6a021fbb76a60a0e4e.tar.gz kernel-qcow2-util-linux-a08dc0ca895e6a46c33ace6a021fbb76a60a0e4e.tar.xz kernel-qcow2-util-linux-a08dc0ca895e6a46c33ace6a021fbb76a60a0e4e.zip |
libblkid: move sun PT definition to include/
Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r-- | include/Makemodule.am | 3 | ||||
-rw-r--r-- | include/pt-sun.h | 72 | ||||
-rw-r--r-- | libblkid/src/partitions/sun.c | 69 |
3 files changed, 76 insertions, 68 deletions
diff --git a/include/Makemodule.am b/include/Makemodule.am index 358a351e1..0c1656d2d 100644 --- a/include/Makemodule.am +++ b/include/Makemodule.am @@ -44,4 +44,5 @@ dist_noinst_HEADERS += \ include/wholedisk.h \ include/widechar.h \ include/xalloc.h \ - include/xgetpass.h + include/xgetpass.h \ + include/pt-sun.h diff --git a/include/pt-sun.h b/include/pt-sun.h new file mode 100644 index 000000000..5528dd3ee --- /dev/null +++ b/include/pt-sun.h @@ -0,0 +1,72 @@ +#ifndef UTIL_LINUX_PT_SUN_H +#define UTIL_LINUX_PT_SUN_H + +#include <stdint.h> + +/* Supported VTOC setting */ +#define SUN_VTOC_SANITY 0x600DDEEE /* magic number */ +#define SUN_VTOC_VERSION 1 + +#define SUN_MAXPARTITIONS 8 + +/* Partition IDs */ +#define SUN_TAG_WHOLEDISK 0x05 + +struct sun_disklabel { + unsigned char info[128]; /* Informative text string */ + + struct sun_vtoc { + uint32_t version; /* version */ + char volume[8]; /* volume name */ + uint16_t nparts; /* num of partitions */ + + struct sun_info { /* partition information */ + uint16_t id; /* tag */ + uint16_t flags; + } __attribute__ ((packed)) infos[8]; + + uint16_t padding; /* padding */ + uint32_t bootinfo[3]; /* info needed by mboot */ + uint32_t sanity; /* magic number */ + uint32_t reserved[10]; /* padding */ + uint32_t timestamp[8]; /* partition timestamp */ + } __attribute__ ((packed)) vtoc; + + uint32_t write_reinstruct; /* sectors to skip, writes */ + uint32_t read_reinstruct; /* sectors to skip, reads */ + unsigned char spare[148]; /* padding */ + uint16_t rspeed; /* disk rotational speed */ + uint16_t pcylcount; /* physical cylinder count */ + uint16_t sparecyl; /* extra sects per cylinder */ + uint16_t obs1; + uint16_t obs2; + uint16_t ilfact; /* interleave factor */ + uint16_t ncyl; /* data cylinder count */ + uint16_t nacyl; /* alt. cylinder count */ + uint16_t ntrks; /* tracks per cylinder <---- */ + uint16_t nsect; /* sectors per track <---- */ + uint16_t obs3; + uint16_t obs4; + + struct sun_partition { /* partitions */ + uint32_t start_cylinder; + uint32_t num_sectors; + } __attribute__ ((packed)) partitions[8]; + + uint16_t magic; /* magic number */ + uint16_t csum; /* label xor'd checksum */ +} __attribute__ ((packed)); + + +static inline uint16_t sun_pt_checksum(struct sun_disklabel *label) +{ + uint16_t *ptr = ((uint16_t *) (label + 1)) - 1; + uint16_t sum; + + for (sum = 0; ptr >= ((uint16_t *) label);) + sum ^= *ptr--; + + return sum; +} + +#endif /* UTIL_LINUX_PT_SUN_H */ diff --git a/libblkid/src/partitions/sun.c b/libblkid/src/partitions/sun.c index f151f46ae..f1b839258 100644 --- a/libblkid/src/partitions/sun.c +++ b/libblkid/src/partitions/sun.c @@ -12,74 +12,9 @@ #include <stdint.h> #include <stddef.h> +#include "pt-sun.h" #include "partitions.h" -/* Supported VTOC setting */ -#define SUN_VTOC_SANITY 0x600DDEEE /* magic number */ -#define SUN_VTOC_VERSION 1 - -#define SUN_MAXPARTITIONS 8 - -/* Partition IDs */ -#define SUN_TAG_WHOLEDISK 0x05 - -struct sun_disklabel { - unsigned char info[128]; /* Informative text string */ - - struct sun_vtoc { - uint32_t version; /* version */ - char volume[8]; /* volume name */ - uint16_t nparts; /* num of partitions */ - - struct sun_info { /* partition information */ - uint16_t id; /* tag */ - uint16_t flags; - } __attribute__ ((packed)) infos[8]; - - uint16_t padding; /* padding */ - uint32_t bootinfo[3]; /* info needed by mboot */ - uint32_t sanity; /* magic number */ - uint32_t reserved[10]; /* padding */ - uint32_t timestamp[8]; /* partition timestamp */ - } __attribute__ ((packed)) vtoc; - - uint32_t write_reinstruct; /* sectors to skip, writes */ - uint32_t read_reinstruct; /* sectors to skip, reads */ - unsigned char spare[148]; /* padding */ - uint16_t rspeed; /* disk rotational speed */ - uint16_t pcylcount; /* physical cylinder count */ - uint16_t sparecyl; /* extra sects per cylinder */ - uint16_t obs1; - uint16_t obs2; - uint16_t ilfact; /* interleave factor */ - uint16_t ncyl; /* data cylinder count */ - uint16_t nacyl; /* alt. cylinder count */ - uint16_t ntrks; /* tracks per cylinder <---- */ - uint16_t nsect; /* sectors per track <---- */ - uint16_t obs3; - uint16_t obs4; - - struct sun_partition { /* partitions */ - uint32_t start_cylinder; - uint32_t num_sectors; - } __attribute__ ((packed)) partitions[8]; - - uint16_t magic; /* magic number */ - uint16_t csum; /* label xor'd checksum */ -} __attribute__ ((packed)); - - -uint16_t count_checksum(struct sun_disklabel *label) -{ - uint16_t *ptr = ((uint16_t *) (label + 1)) - 1; - uint16_t sum; - - for (sum = 0; ptr >= ((uint16_t *) label);) - sum ^= *ptr--; - - return sum; -} - static int probe_sun_pt(blkid_probe pr, const struct blkid_idmag *mag __attribute__((__unused__))) { @@ -95,7 +30,7 @@ static int probe_sun_pt(blkid_probe pr, if (!l) goto nothing; - if (count_checksum(l)) { + if (sun_pt_checksum(l)) { DBG(DEBUG_LOWPROBE, printf( "detected corrupted sun disk label -- ignore\n")); goto nothing; |