linux/block/partitions/ultrix.c
<<
>>
Prefs
   1/*
   2 *  fs/partitions/ultrix.c
   3 *
   4 *  Code extracted from drivers/block/genhd.c
   5 *
   6 *  Re-organised Jul 1999 Russell King
   7 */
   8
   9#include "check.h"
  10#include "ultrix.h"
  11
  12int ultrix_partition(struct parsed_partitions *state)
  13{
  14        int i;
  15        Sector sect;
  16        unsigned char *data;
  17        struct ultrix_disklabel {
  18                s32     pt_magic;       /* magic no. indicating part. info exits */
  19                s32     pt_valid;       /* set by driver if pt is current */
  20                struct  pt_info {
  21                        s32             pi_nblocks; /* no. of sectors */
  22                        u32             pi_blkoff;  /* block offset for start */
  23                } pt_part[8];
  24        } *label;
  25
  26#define PT_MAGIC        0x032957        /* Partition magic number */
  27#define PT_VALID        1               /* Indicates if struct is valid */
  28
  29        data = read_part_sector(state, (16384 - sizeof(*label))/512, &sect);
  30        if (!data)
  31                return -1;
  32        
  33        label = (struct ultrix_disklabel *)(data + 512 - sizeof(*label));
  34
  35        if (label->pt_magic == PT_MAGIC && label->pt_valid == PT_VALID) {
  36                for (i=0; i<8; i++)
  37                        if (label->pt_part[i].pi_nblocks)
  38                                put_partition(state, i+1, 
  39                                              label->pt_part[i].pi_blkoff,
  40                                              label->pt_part[i].pi_nblocks);
  41                put_dev_sector(sect);
  42                strlcat(state->pp_buf, "\n", PAGE_SIZE);
  43                return 1;
  44        } else {
  45                put_dev_sector(sect);
  46                return 0;
  47        }
  48}
  49