Coverage Report

Created: 2025-06-13 06:36

/src/util-linux/include/pt-sun.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * No copyright is claimed.  This code is in the public domain; do with
3
 * it what you wish.
4
 */
5
#ifndef UTIL_LINUX_PT_SUN_H
6
#define UTIL_LINUX_PT_SUN_H
7
8
#include <stdint.h>
9
10
#define SUN_LABEL_MAGIC   0xDABE
11
12
/* Supported VTOC setting */
13
0
#define SUN_VTOC_SANITY   0x600DDEEE  /* magic number */
14
0
#define SUN_VTOC_VERSION  1
15
0
#define SUN_MAXPARTITIONS 8
16
17
struct sun_disklabel {
18
  unsigned char label_id[128];   /* Informative text string */
19
20
  struct sun_vtoc {
21
    uint32_t version;     /* version */
22
    char   volume_id[8];/* volume name */
23
    uint16_t nparts;      /* num of partitions */
24
25
    struct sun_info {        /* partition information */
26
      uint16_t id;     /* SUN_TAG_*  */
27
      uint16_t flags;  /* SUN_FLAG_* */
28
    } __attribute__ ((packed)) infos[8];
29
30
    uint16_t padding;      /* padding */
31
    uint32_t bootinfo[3];  /* info needed by mboot */
32
    uint32_t sanity;       /* magic number */
33
    uint32_t reserved[10]; /* padding */
34
    uint32_t timestamp[8]; /* partition timestamp */
35
  } __attribute__ ((packed)) vtoc;
36
37
  uint32_t write_reinstruct;     /* sectors to skip, writes */
38
  uint32_t read_reinstruct;      /* sectors to skip, reads */
39
  unsigned char spare[148];      /* padding */
40
  uint16_t rpm;                  /* disk rotational speed */
41
  uint16_t pcyl;                 /* physical cylinder count */
42
  uint16_t apc;                  /* extra sects per cylinder */
43
  uint16_t obs1;
44
  uint16_t obs2;
45
  uint16_t intrlv;               /* interleave factor */
46
  uint16_t ncyl;                 /* data cylinder count */
47
  uint16_t acyl;                 /* alt. cylinder count */
48
  uint16_t nhead;                /* tracks per cylinder   <---- */
49
  uint16_t nsect;                /* sectors per track     <---- */
50
  uint16_t obs3;
51
  uint16_t obs4;
52
53
  struct sun_partition {         /* partitions */
54
    uint32_t start_cylinder;
55
    uint32_t num_sectors;
56
  } __attribute__ ((packed)) partitions[8];
57
58
  uint16_t magic;                /* magic number */
59
  uint16_t csum;                 /* label xor'd checksum */
60
} __attribute__ ((packed));
61
62
63
#define SUN_TAG_UNASSIGNED  0x00  /* Unassigned partition */
64
#define SUN_TAG_BOOT    0x01  /* Boot partition */
65
#define SUN_TAG_ROOT    0x02  /* Root filesystem  */
66
#define SUN_TAG_SWAP    0x03  /* Swap partition */
67
#define SUN_TAG_USR   0x04  /* /usr filesystem  */
68
0
#define SUN_TAG_WHOLEDISK 0x05  /* Full-disk slice  */
69
#define SUN_TAG_STAND   0x06  /* Stand partition  */
70
#define SUN_TAG_VAR   0x07  /* /var filesystem  */
71
#define SUN_TAG_HOME    0x08  /* /home filesystem */
72
#define SUN_TAG_ALTSCTR   0x09  /* Alt sector partition */
73
#define SUN_TAG_CACHE   0x0a  /* Cachefs partition  */
74
#define SUN_TAG_RESERVED  0x0b  /* SMI reserved data  */
75
#define SUN_TAG_LINUX_SWAP  0x82  /* Linux SWAP   */
76
#define SUN_TAG_LINUX_NATIVE  0x83  /* Linux filesystem */
77
#define SUN_TAG_LINUX_LVM 0x8e  /* Linux LVM    */
78
#define SUN_TAG_LINUX_RAID  0xfd  /* Linux RAID   */
79
80
#define SUN_FLAG_UNMNT    0x01  /* Unmountable partition*/
81
#define SUN_FLAG_RONLY    0x10  /* Read only    */
82
83
static inline uint16_t sun_pt_checksum(const struct sun_disklabel *label)
84
346
{
85
346
  const uint16_t *ptr = ((const uint16_t *) (label + 1)) - 1;
86
346
  uint16_t sum;
87
88
88.9k
  for (sum = 0; ptr >= ((const uint16_t *) label);)
89
88.5k
    sum ^= *ptr--;
90
91
346
  return sum;
92
346
}
93
94
#endif /* UTIL_LINUX_PT_SUN_H */