hc
2024-08-16 a24a44ff9ca902811b99aa9663d697cf452e08ef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
// SPDX-License-Identifier: GPL-2.0
/*
 *  fs/partitions/ultrix.c
 *
 *  Code extracted from drivers/block/genhd.c
 *
 *  Re-organised Jul 1999 Russell King
 */
 
#include "check.h"
 
int ultrix_partition(struct parsed_partitions *state)
{
   int i;
   Sector sect;
   unsigned char *data;
   struct ultrix_disklabel {
       s32    pt_magic;    /* magic no. indicating part. info exits */
       s32    pt_valid;    /* set by driver if pt is current */
       struct  pt_info {
           s32        pi_nblocks; /* no. of sectors */
           u32        pi_blkoff;  /* block offset for start */
       } pt_part[8];
   } *label;
 
#define PT_MAGIC    0x032957    /* Partition magic number */
#define PT_VALID    1        /* Indicates if struct is valid */
 
   data = read_part_sector(state, (16384 - sizeof(*label))/512, &sect);
   if (!data)
       return -1;
   
   label = (struct ultrix_disklabel *)(data + 512 - sizeof(*label));
 
   if (label->pt_magic == PT_MAGIC && label->pt_valid == PT_VALID) {
       for (i=0; i<8; i++)
           if (label->pt_part[i].pi_nblocks)
               put_partition(state, i+1, 
                         label->pt_part[i].pi_blkoff,
                         label->pt_part[i].pi_nblocks);
       put_dev_sector(sect);
       strlcat(state->pp_buf, "\n", PAGE_SIZE);
       return 1;
   } else {
       put_dev_sector(sect);
       return 0;
   }
}