Module Name: src Committed By: nonaka Date: Sat Jun 11 11:43:23 UTC 2011
Modified Files: src/distrib/utils/sysinst/arch/hpcarm: md.c src/distrib/utils/sysinst/arch/zaurus: md.c Log Message: MBR magic exists at the beginning of 'a' partition, BPB is cleared. Avoid to detect msdosfs incorrectly at boot time. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/distrib/utils/sysinst/arch/hpcarm/md.c cvs rdiff -u -r1.7 -r1.8 src/distrib/utils/sysinst/arch/zaurus/md.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/utils/sysinst/arch/hpcarm/md.c diff -u src/distrib/utils/sysinst/arch/hpcarm/md.c:1.10 src/distrib/utils/sysinst/arch/hpcarm/md.c:1.11 --- src/distrib/utils/sysinst/arch/hpcarm/md.c:1.10 Mon Apr 4 08:30:29 2011 +++ src/distrib/utils/sysinst/arch/hpcarm/md.c Sat Jun 11 11:43:23 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: md.c,v 1.10 2011/04/04 08:30:29 mbalmer Exp $ */ +/* $NetBSD: md.c,v 1.11 2011/06/11 11:43:23 nonaka Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -148,6 +148,38 @@ int md_post_newfs(void) { + struct mbr_sector pbr; + char adevname[STRSIZE]; + ssize_t sz; + int fd = -1; + + snprintf(adevname, sizeof(adevname), "/dev/r%sa", diskdev); + fd = open(adevname, O_RDWR); + if (fd < 0) + goto out; + + /* Read partition boot record */ + sz = pread(fd, &pbr, sizeof(pbr), 0); + if (sz != sizeof(pbr)) + goto out; + + /* Check magic number */ + if (pbr.mbr_magic != le16toh(MBR_MAGIC)) + goto out; + +#define OSNAME "NetBSD60" + /* Update oemname */ + memcpy(&pbr.mbr_oemname, OSNAME, sizeof(OSNAME) - 1); + + /* Clear BPB */ + memset(&pbr.mbr_bpb, 0, sizeof(pbr.mbr_bpb)); + + /* write-backed new patition boot record */ + (void)pwrite(fd, &pbr, sizeof(pbr), 0); + +out: + if (fd >= 0) + close(fd); return 0; } Index: src/distrib/utils/sysinst/arch/zaurus/md.c diff -u src/distrib/utils/sysinst/arch/zaurus/md.c:1.7 src/distrib/utils/sysinst/arch/zaurus/md.c:1.8 --- src/distrib/utils/sysinst/arch/zaurus/md.c:1.7 Mon Apr 4 08:30:46 2011 +++ src/distrib/utils/sysinst/arch/zaurus/md.c Sat Jun 11 11:43:23 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: md.c,v 1.7 2011/04/04 08:30:46 mbalmer Exp $ */ +/* $NetBSD: md.c,v 1.8 2011/06/11 11:43:23 nonaka Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -111,6 +111,38 @@ int md_post_newfs(void) { + struct mbr_sector pbr; + char adevname[STRSIZE]; + ssize_t sz; + int fd = -1; + + snprintf(adevname, sizeof(adevname), "/dev/r%sa", diskdev); + fd = open(adevname, O_RDWR); + if (fd < 0) + goto out; + + /* Read partition boot record */ + sz = pread(fd, &pbr, sizeof(pbr), 0); + if (sz != sizeof(pbr)) + goto out; + + /* Check magic number */ + if (pbr.mbr_magic != le16toh(MBR_MAGIC)) + goto out; + +#define OSNAME "NetBSD60" + /* Update oemname */ + memcpy(&pbr.mbr_oemname, OSNAME, sizeof(OSNAME) - 1); + + /* Clear BPB */ + memset(&pbr.mbr_bpb, 0, sizeof(pbr.mbr_bpb)); + + /* write-backed new patition boot record */ + (void)pwrite(fd, &pbr, sizeof(pbr), 0); + +out: + if (fd >= 0) + close(fd); return 0; }