From 756df353e8ffd010fcca8cef8972cf27006edb6a Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Thu, 7 Mar 2002 20:52:12 -0500 Subject: [PATCH] mke2fs.c (zap_sector): Don't erase BSD disklabels on Alpha. (From Thorsten Kukuk ) --- misc/ChangeLog | 5 +++++ misc/mke2fs.c | 27 +++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/misc/ChangeLog b/misc/ChangeLog index d84bf1f..523f12b 100644 --- a/misc/ChangeLog +++ b/misc/ChangeLog @@ -1,3 +1,8 @@ +2002-03-07 Theodore Tso + + * mke2fs.c (zap_sector): Don't erase BSD disklabels on Alpha. + (From Thorsten Kukuk ) + 2002-03-04 Philipp Thomas * chattr.c (main), fsck.c (main), mke2fs.c (main), findsuper.c diff --git a/misc/mke2fs.c b/misc/mke2fs.c index f2fa3bd..671bd9e 100644 --- a/misc/mke2fs.c +++ b/misc/mke2fs.c @@ -20,7 +20,7 @@ #include #include #include -#ifdef linux +#ifdef __linux__ #include #endif #ifdef HAVE_GETOPT_H @@ -550,10 +550,16 @@ static void reserve_inodes(ext2_filsys fs) ext2fs_mark_ib_dirty(fs); } +#ifdef __alpha__ +#define BSD_DISKMAGIC (0x82564557UL) /* The disk magic number */ +#define BSD_LABEL_OFFSET 64 +#endif + static void zap_sector(ext2_filsys fs, int sect, int nsect) { char *buf; int retval; + unsigned int *magic; buf = malloc(512*nsect); if (!buf) { @@ -562,7 +568,20 @@ static void zap_sector(ext2_filsys fs, int sect, int nsect) exit(1); } memset(buf, 0, 512*nsect); - + +#ifdef __alpha__ + /* Check for a BSD disklabel, and don't erase it if so */ + retval = io_channel_read_blk(fs->io, 0, -512, buf); + if (retval) + fprintf(stderr, _("Warning: could not read block 0: %s\n"), + error_message(retval)); + else { + magic = (unsigned int *) (buf + BSD_LABEL_OFFSET); + if (*magic == BSD_DISKMAGIC) + return; + } +#endif + io_channel_set_blksize(fs->io, 512); retval = io_channel_write_blk(fs->io, sect, -512*nsect, buf); io_channel_set_blksize(fs->io, fs->blocksize); @@ -776,7 +795,7 @@ static void PRS(int argc, char *argv[]) const char * fs_type = 0; int default_features = 1; blk_t dev_size; -#ifdef linux +#ifdef __linux__ struct utsname ut; #endif @@ -804,7 +823,7 @@ static void PRS(int argc, char *argv[]) param.s_feature_incompat |= EXT2_FEATURE_INCOMPAT_FILETYPE; param.s_feature_ro_compat |= EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER; -#ifdef linux +#ifdef __linux__ if (uname(&ut)) { perror("uname"); exit(1); -- 1.8.3.1