fdisk: (sgi) cleanu sgi_info stuff
Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
5105f75f67
commit
1a9889ad7f
|
@ -932,7 +932,7 @@ static void command_prompt(struct fdisk_context *cxt)
|
||||||
break;
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
if (fdisk_is_disklabel(cxt, SGI))
|
if (fdisk_is_disklabel(cxt, SGI))
|
||||||
create_sgiinfo(cxt);
|
sgi_create_info(cxt);
|
||||||
else
|
else
|
||||||
unknown_command(c);
|
unknown_command(c);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
#include <sys/stat.h> /* stat */
|
#include <sys/stat.h> /* stat */
|
||||||
#include <assert.h> /* assert */
|
#include <assert.h> /* assert */
|
||||||
|
|
||||||
#include <endian.h>
|
|
||||||
#include "nls.h"
|
#include "nls.h"
|
||||||
|
#include "all-io.h"
|
||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
|
|
||||||
#include "blkdev.h"
|
#include "blkdev.h"
|
||||||
|
@ -43,7 +43,62 @@ struct fdisk_sgi_label {
|
||||||
struct fdisk_label head; /* generic part */
|
struct fdisk_label head; /* generic part */
|
||||||
};
|
};
|
||||||
|
|
||||||
static sgiinfo *fill_sgiinfo(void);
|
/*
|
||||||
|
* Information within second on-disk block
|
||||||
|
*/
|
||||||
|
#define SGI_INFO_MAGIC 0x00072959
|
||||||
|
|
||||||
|
struct sgi_info {
|
||||||
|
unsigned int magic; /* looks like a magic number */
|
||||||
|
unsigned int a2;
|
||||||
|
unsigned int a3;
|
||||||
|
unsigned int a4;
|
||||||
|
unsigned int b1;
|
||||||
|
unsigned short b2;
|
||||||
|
unsigned short b3;
|
||||||
|
unsigned int c[16];
|
||||||
|
unsigned short d[3];
|
||||||
|
unsigned char scsi_string[50];
|
||||||
|
unsigned char serial[137];
|
||||||
|
unsigned short check1816;
|
||||||
|
unsigned char installer[225];
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct sgi_info *sgi_new_info(void)
|
||||||
|
{
|
||||||
|
struct sgi_info *info = calloc(1, sizeof(struct sgi_info));
|
||||||
|
|
||||||
|
if (!info)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
info->magic = cpu_to_be32(SGI_INFO_MAGIC);
|
||||||
|
info->b1 = cpu_to_be32(-1);
|
||||||
|
info->b2 = cpu_to_be16(-1);
|
||||||
|
info->b3 = cpu_to_be16(1);
|
||||||
|
|
||||||
|
/* You may want to replace this string !!!!!!! */
|
||||||
|
strcpy((char *) info->scsi_string, "IBM OEM 0662S12 3 30");
|
||||||
|
strcpy((char *) info->serial, "0000");
|
||||||
|
info->check1816 = cpu_to_be16(18 * 256 + 16);
|
||||||
|
strcpy((char *) info->installer, "Sfx version 5.3, Oct 18, 1994");
|
||||||
|
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sgi_free_info(struct sgi_info *info)
|
||||||
|
{
|
||||||
|
free(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
int sgi_create_info(struct fdisk_context *cxt)
|
||||||
|
{
|
||||||
|
/* I keep SGI's habit to write the sgilabel to the second block */
|
||||||
|
sgilabel->volume[0].block_num = cpu_to_be32(2);
|
||||||
|
sgilabel->volume[0].num_bytes = cpu_to_be32(sizeof(struct sgi_info));
|
||||||
|
strncpy((char *) sgilabel->volume[0].name, "sgilabel", 8);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* only dealing with free blocks here
|
* only dealing with free blocks here
|
||||||
|
@ -311,19 +366,9 @@ sgi_set_bootfile(struct fdisk_context *cxt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void create_sgiinfo(struct fdisk_context *cxt)
|
|
||||||
{
|
|
||||||
/* I keep SGI's habit to write the sgilabel to the second block */
|
|
||||||
sgilabel->volume[0].block_num = cpu_to_be32(2);
|
|
||||||
sgilabel->volume[0].num_bytes = cpu_to_be32(sizeof(sgiinfo));
|
|
||||||
strncpy((char *) sgilabel->volume[0].name, "sgilabel", 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int sgi_write_disklabel(struct fdisk_context *cxt)
|
static int sgi_write_disklabel(struct fdisk_context *cxt)
|
||||||
{
|
{
|
||||||
|
struct sgi_info *info = NULL;
|
||||||
sgiinfo *info = NULL;
|
|
||||||
|
|
||||||
assert(cxt);
|
assert(cxt);
|
||||||
assert(cxt->label);
|
assert(cxt->label);
|
||||||
|
@ -349,19 +394,17 @@ static int sgi_write_disklabel(struct fdisk_context *cxt)
|
||||||
if (lseek(cxt->dev_fd, (off_t) infostartblock *
|
if (lseek(cxt->dev_fd, (off_t) infostartblock *
|
||||||
SECTOR_SIZE, SEEK_SET) < 0)
|
SECTOR_SIZE, SEEK_SET) < 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
info = sgi_new_info();
|
||||||
info = fill_sgiinfo();
|
|
||||||
if (!info)
|
if (!info)
|
||||||
goto err;
|
goto err;
|
||||||
|
if (write_all(cxt->dev_fd, info, sizeof(*info)))
|
||||||
if (write(cxt->dev_fd, info, SECTOR_SIZE) != SECTOR_SIZE)
|
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(info);
|
sgi_free_info(info);
|
||||||
return 0;
|
return 0;
|
||||||
err:
|
err:
|
||||||
free(info);
|
sgi_free_info(info);
|
||||||
return -errno;
|
return -errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -908,25 +951,6 @@ sgi_set_ncyl(void)
|
||||||
/* _____________________________________________________________
|
/* _____________________________________________________________
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static sgiinfo *fill_sgiinfo(void)
|
|
||||||
{
|
|
||||||
sgiinfo *info = xcalloc(1, sizeof(sgiinfo));
|
|
||||||
|
|
||||||
if (!info)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
info->magic = cpu_to_be32(SGI_INFO_MAGIC);
|
|
||||||
info->b1 = cpu_to_be32(-1);
|
|
||||||
info->b2 = cpu_to_be16(-1);
|
|
||||||
info->b3 = cpu_to_be16(1);
|
|
||||||
/* You may want to replace this string !!!!!!! */
|
|
||||||
strcpy((char *) info->scsi_string, "IBM OEM 0662S12 3 30");
|
|
||||||
strcpy((char *) info->serial, "0000");
|
|
||||||
info->check1816 = cpu_to_be16(18 * 256 + 16);
|
|
||||||
strcpy((char *) info->installer, "Sfx version 5.3, Oct 18, 1994");
|
|
||||||
return info;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct fdisk_parttype *sgi_get_parttype(struct fdisk_context *cxt, size_t n)
|
static struct fdisk_parttype *sgi_get_parttype(struct fdisk_context *cxt, size_t n)
|
||||||
{
|
{
|
||||||
struct fdisk_parttype *t;
|
struct fdisk_parttype *t;
|
||||||
|
|
|
@ -15,27 +15,7 @@
|
||||||
#define RESEEK 0x20
|
#define RESEEK 0x20
|
||||||
#define CMDTAGQ_ENABLE 0x40
|
#define CMDTAGQ_ENABLE 0x40
|
||||||
|
|
||||||
typedef struct {
|
#
|
||||||
unsigned int magic; /* looks like a magic number */
|
|
||||||
unsigned int a2;
|
|
||||||
unsigned int a3;
|
|
||||||
unsigned int a4;
|
|
||||||
unsigned int b1;
|
|
||||||
unsigned short b2;
|
|
||||||
unsigned short b3;
|
|
||||||
unsigned int c[16];
|
|
||||||
unsigned short d[3];
|
|
||||||
unsigned char scsi_string[50];
|
|
||||||
unsigned char serial[137];
|
|
||||||
unsigned short check1816;
|
|
||||||
unsigned char installer[225];
|
|
||||||
} sgiinfo;
|
|
||||||
|
|
||||||
#define SGI_LABEL_MAGIC 0x0be5a941
|
|
||||||
#define SGI_LABEL_MAGIC_SWAPPED 0x41a9e50b
|
|
||||||
#define SGI_INFO_MAGIC 0x00072959
|
|
||||||
#define SGI_INFO_MAGIC_SWAPPED 0x59290700
|
|
||||||
|
|
||||||
/* toggle flags */
|
/* toggle flags */
|
||||||
#define SGI_FLAG_BOOT 1
|
#define SGI_FLAG_BOOT 1
|
||||||
#define SGI_FLAG_SWAP 2
|
#define SGI_FLAG_SWAP 2
|
||||||
|
@ -49,7 +29,6 @@ extern void sgi_list_table( struct fdisk_context *cxt, int xtra );
|
||||||
extern int sgi_change_sysid(struct fdisk_context *cxt, int i, int sys);
|
extern int sgi_change_sysid(struct fdisk_context *cxt, int i, int sys);
|
||||||
extern unsigned int sgi_get_start_sector(struct fdisk_context *cxt, int i );
|
extern unsigned int sgi_get_start_sector(struct fdisk_context *cxt, int i );
|
||||||
extern unsigned int sgi_get_num_sectors(struct fdisk_context *cxt, int i );
|
extern unsigned int sgi_get_num_sectors(struct fdisk_context *cxt, int i );
|
||||||
extern void create_sgiinfo(struct fdisk_context *cxt);
|
|
||||||
extern void sgi_set_ilfact( void );
|
extern void sgi_set_ilfact( void );
|
||||||
extern void sgi_set_rspeed( void );
|
extern void sgi_set_rspeed( void );
|
||||||
extern void sgi_set_pcylcount( void );
|
extern void sgi_set_pcylcount( void );
|
||||||
|
@ -61,4 +40,6 @@ extern int sgi_get_bootpartition(struct fdisk_context *cxt);
|
||||||
extern int sgi_get_swappartition(struct fdisk_context *cxt);
|
extern int sgi_get_swappartition(struct fdisk_context *cxt);
|
||||||
extern void sgi_set_bootfile(struct fdisk_context *cxt);
|
extern void sgi_set_bootfile(struct fdisk_context *cxt);
|
||||||
|
|
||||||
|
extern int sgi_create_info(struct fdisk_context *cxt);
|
||||||
|
|
||||||
#endif /* FDISK_SGI_LABEL_H */
|
#endif /* FDISK_SGI_LABEL_H */
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define SGI_LABEL_MAGIC 0x0be5a941
|
||||||
|
|
||||||
#define SGI_MAXPARTITIONS 16
|
#define SGI_MAXPARTITIONS 16
|
||||||
#define SGI_MAXVOLUMES 15
|
#define SGI_MAXVOLUMES 15
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue