Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src Make disklabel a MI tool. It will use MACHINE/MACHINE_ARCH ...
details: https://anonhg.NetBSD.org/src/rev/98569c5573a8
branches: trunk
changeset: 786607:98569c5573a8
user: matt <matt%NetBSD.org@localhost>
date: Fri May 03 16:05:11 2013 +0000
description:
Make disklabel a MI tool. It will use MACHINE/MACHINE_ARCH to determine
the disklabel params as well as allowing command-line options of -M <machine>
and -B {le,be} to specify MACHINE and byteorder to be used.
diffstat:
sbin/disklabel/Makefile | 4 +-
sbin/disklabel/bswap.c | 34 ++--
sbin/disklabel/bswap.h | 39 +---
sbin/disklabel/dkcksum.c | 17 +-
sbin/disklabel/dkcksum.h | 6 +-
sbin/disklabel/extern.h | 15 +-
sbin/disklabel/interact.c | 6 +-
sbin/disklabel/main.c | 302 ++++++++++++++++++++++++++++++++++++++++++---
share/mk/bsd.own.mk | 4 +-
sys/sys/disklabel.h | 4 +-
tools/disklabel/Makefile | 14 +-
11 files changed, 337 insertions(+), 108 deletions(-)
diffs (truncated from 768 to 300 lines):
diff -r 1821f153cde8 -r 98569c5573a8 sbin/disklabel/Makefile
--- a/sbin/disklabel/Makefile Fri May 03 15:55:21 2013 +0000
+++ b/sbin/disklabel/Makefile Fri May 03 16:05:11 2013 +0000
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.69 2011/08/30 12:39:52 bouyer Exp $
+# $NetBSD: Makefile,v 1.70 2013/05/03 16:05:12 matt Exp $
# @(#)Makefile 8.2 (Berkeley) 3/17/94
PROG= disklabel
-SRCS= main.c dkcksum.c interact.c printlabel.c
+SRCS= main.c dkcksum.c interact.c printlabel.c bswap.c
MAN= disklabel.5 disklabel.8
.if (${HOSTPROG:U} == "")
DPADD+= ${LIBUTIL}
diff -r 1821f153cde8 -r 98569c5573a8 sbin/disklabel/bswap.c
--- a/sbin/disklabel/bswap.c Fri May 03 15:55:21 2013 +0000
+++ b/sbin/disklabel/bswap.c Fri May 03 16:05:11 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: bswap.c,v 1.1 2010/01/05 15:45:26 tsutsui Exp $ */
+/* $NetBSD: bswap.c,v 1.2 2013/05/03 16:05:12 matt Exp $ */
/*-
* Copyright (c) 2009 Izumi Tsutsui. All rights reserved.
@@ -59,6 +59,8 @@
#include "nbtool_config.h"
#endif
+#include <string.h>
+
#include <sys/types.h>
#if HAVE_NBTOOL_CONFIG_H
#include <nbinclude/sys/disklabel.h>
@@ -69,11 +71,8 @@
#include "bswap.h"
#include "dkcksum.h"
-#if TARGET_BYTE_ORDER != BYTE_ORDER
-static void bswaplabel(struct disklabel *nlp, struct disklabel *olp);
-
-void
-bswaplabel(struct disklabel *nlp, struct disklabel *olp)
+static void
+bswaplabel(struct disklabel *nlp, const struct disklabel *olp)
{
int i;
@@ -137,31 +136,37 @@
}
void
-targettohlabel(struct disklabel *hlp, struct disklabel *tlp)
+targettohlabel(struct disklabel *hlp, const struct disklabel *tlp)
{
- bswaplabel(hlp, tlp);
+ if (bswap32(tlp->d_magic) == DISKMAGIC)
+ bswaplabel(hlp, tlp);
+ else
+ *hlp = *tlp;
/* update checksum in host endian */
hlp->d_checksum = 0;
hlp->d_checksum = dkcksum(hlp);
}
void
-htotargetlabel(struct disklabel *tlp, struct disklabel *hlp)
+htotargetlabel(struct disklabel *tlp, const struct disklabel *hlp)
{
- bswaplabel(tlp, hlp);
+ if (bswap_p)
+ bswaplabel(tlp, hlp);
+ else
+ *tlp = *hlp;
+
/* update checksum in target endian */
tlp->d_checksum = 0;
- tlp->d_checksum = dkcksum_re(tlp);
+ tlp->d_checksum = dkcksum_target(tlp);
}
uint16_t
-dkcksum_re(struct disklabel *lp)
+dkcksum_target(struct disklabel *lp)
{
uint16_t npartitions;
- /* we can assume lp is reversed, but check it again for sanity */
if (lp->d_magic == DISKMAGIC)
npartitions = lp->d_npartitions;
else if (bswap32(lp->d_magic) == DISKMAGIC)
@@ -169,9 +174,8 @@
else
npartitions = 0;
- if (npartitions > MAXPARTITIONS)
+ if (npartitions > maxpartitions)
npartitions = 0;
return dkcksum_sized(lp, npartitions);
}
-#endif
diff -r 1821f153cde8 -r 98569c5573a8 sbin/disklabel/bswap.h
--- a/sbin/disklabel/bswap.h Fri May 03 15:55:21 2013 +0000
+++ b/sbin/disklabel/bswap.h Fri May 03 16:05:11 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: bswap.h,v 1.1 2010/01/05 15:45:26 tsutsui Exp $ */
+/* $NetBSD: bswap.h,v 1.2 2013/05/03 16:05:12 matt Exp $ */
/*-
* Copyright (c) 2009 Izumi Tsutsui. All rights reserved.
@@ -34,31 +34,18 @@
#define BYTE_ORDER LITTLE_ENDIAN
#endif
#endif
-#endif
-
-#ifndef TARGET_BYTE_ORDER
-#define TARGET_BYTE_ORDER BYTE_ORDER
+#else
+#include <sys/endian.h>
#endif
-#if TARGET_BYTE_ORDER != BYTE_ORDER
-#define htotarget16(x) bswap16(x)
-#define target16toh(x) bswap16(x)
-#define htotarget32(x) bswap32(x)
-#define target32toh(x) bswap32(x)
-#define dkcksum_target(lp) dkcksum_re(lp)
-
-void htotargetlabel(struct disklabel *, struct disklabel *);
-void targettohlabel(struct disklabel *, struct disklabel *);
-uint16_t dkcksum_re(struct disklabel *);
+extern int bswap_p;
+extern u_int maxpartitions;
-#else
-#define htotarget16(x) (x)
-#define target16toh(x) (x)
-#define htotarget32(x) (x)
-#define target32toh(x) (x)
-#define dkcksum_target(lp) dkcksum(lp)
-#define htotargetlabel(tlp, hlp) \
- do {*(tlp) = *(hlp);} while (/* CONSTCOND */0)
-#define targettohlabel(hlp, tlp) \
- do {*(hlp) = *(tlp);} while (/* CONSTCOND */0)
-#endif
+#define htotarget16(x) (bswap_p ? bswap16(x) : (x))
+#define target16toh(x) (bswap_p ? bswap16(x) : (x))
+#define htotarget32(x) (bswap_p ? bswap32(x) : (x))
+#define target32toh(x) (bswap_p ? bswap32(x) : (x))
+
+void htotargetlabel(struct disklabel *, const struct disklabel *);
+void targettohlabel(struct disklabel *, const struct disklabel *);
+uint16_t dkcksum_target(struct disklabel *);
diff -r 1821f153cde8 -r 98569c5573a8 sbin/disklabel/dkcksum.c
--- a/sbin/disklabel/dkcksum.c Fri May 03 15:55:21 2013 +0000
+++ b/sbin/disklabel/dkcksum.c Fri May 03 16:05:11 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: dkcksum.c,v 1.13 2010/01/05 15:45:26 tsutsui Exp $ */
+/* $NetBSD: dkcksum.c,v 1.14 2013/05/03 16:05:12 matt Exp $ */
/*-
* Copyright (c) 1991, 1993
@@ -38,7 +38,7 @@
#if 0
static char sccsid[] = "@(#)dkcksum.c 8.1 (Berkeley) 6/5/93";
#else
-__RCSID("$NetBSD: dkcksum.c,v 1.13 2010/01/05 15:45:26 tsutsui Exp $");
+__RCSID("$NetBSD: dkcksum.c,v 1.14 2013/05/03 16:05:12 matt Exp $");
#endif
#endif /* not lint */
@@ -51,22 +51,23 @@
#include "dkcksum.h"
uint16_t
-dkcksum(struct disklabel *lp)
+dkcksum(const struct disklabel *lp)
{
return dkcksum_sized(lp, lp->d_npartitions);
}
uint16_t
-dkcksum_sized(struct disklabel *lp, size_t npartitions)
+dkcksum_sized(const struct disklabel *lp, size_t npartitions)
{
- uint16_t *start, *end;
+ const uint16_t *start, *end;
uint16_t sum;
sum = 0;
- start = (uint16_t *)lp;
- end = (uint16_t *)&lp->d_partitions[npartitions];
- while (start < end)
+ start = (const uint16_t *)lp;
+ end = (const uint16_t *)&lp->d_partitions[npartitions];
+ while (start < end) {
sum ^= *start++;
+ }
return sum;
}
diff -r 1821f153cde8 -r 98569c5573a8 sbin/disklabel/dkcksum.h
--- a/sbin/disklabel/dkcksum.h Fri May 03 15:55:21 2013 +0000
+++ b/sbin/disklabel/dkcksum.h Fri May 03 16:05:11 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: dkcksum.h,v 1.5 2010/01/05 15:45:26 tsutsui Exp $ */
+/* $NetBSD: dkcksum.h,v 1.6 2013/05/03 16:05:12 matt Exp $ */
-uint16_t dkcksum(struct disklabel *);
-uint16_t dkcksum_sized(struct disklabel *, size_t);
+uint16_t dkcksum(const struct disklabel *);
+uint16_t dkcksum_sized(const struct disklabel *, size_t);
diff -r 1821f153cde8 -r 98569c5573a8 sbin/disklabel/extern.h
--- a/sbin/disklabel/extern.h Fri May 03 15:55:21 2013 +0000
+++ b/sbin/disklabel/extern.h Fri May 03 16:05:11 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: extern.h,v 1.12 2013/01/17 18:33:58 christos Exp $ */
+/* $NetBSD: extern.h,v 1.13 2013/05/03 16:05:12 matt Exp $ */
/*
* Copyright (c) 1997 Christos Zoulas. All rights reserved.
@@ -32,17 +32,12 @@
void interact(struct disklabel *, int);
int list_fs_types(void);
+extern u_int maxpartitions;
extern char specname[];
extern int Cflag;
#ifdef HAVE_NBTOOL_CONFIG_H
-static int
-dk_ioctl(int f, void *arg)
-{
- errno = ENOTTY;
- return -1;
-}
-# define dk_ioctl(f, cmd, arg) dk_ioctl(f, arg)
+#define dk_ioctl(f, cmd, arg) (errno = ENOTTY, -1)
#else
-# define dk_ioctl(f, cmd, arg) ioctl(f, cmd, arg)
-#endif /* HAVE_NBTOOL_CONFIG_H */
+int dk_ioctl(int, u_long cmd, void *);
+#endif
diff -r 1821f153cde8 -r 98569c5573a8 sbin/disklabel/interact.c
--- a/sbin/disklabel/interact.c Fri May 03 15:55:21 2013 +0000
+++ b/sbin/disklabel/interact.c Fri May 03 16:05:11 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: interact.c,v 1.37 2013/01/17 18:33:58 christos Exp $ */
+/* $NetBSD: interact.c,v 1.38 2013/05/03 16:05:12 matt Exp $ */
/*
* Copyright (c) 1997 Christos Zoulas. All rights reserved.
@@ -30,7 +30,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: interact.c,v 1.37 2013/01/17 18:33:58 christos Exp $");
+__RCSID("$NetBSD: interact.c,v 1.38 2013/05/03 16:05:12 matt Exp $");
#endif /* lint */
#include <sys/param.h>
@@ -45,7 +45,7 @@
#include <sys/ioctl.h>
#if HAVE_NBTOOL_CONFIG_H
-#define getmaxpartitions() MAXPARTITIONS
+#define getmaxpartitions() maxpartitions
#include <nbinclude/sys/disklabel.h>
#else
#include <util.h>
diff -r 1821f153cde8 -r 98569c5573a8 sbin/disklabel/main.c
--- a/sbin/disklabel/main.c Fri May 03 15:55:21 2013 +0000
+++ b/sbin/disklabel/main.c Fri May 03 16:05:11 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.28 2013/01/17 18:33:58 christos Exp $ */
+/* $NetBSD: main.c,v 1.29 2013/05/03 16:05:12 matt Exp $ */
/*
* Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -76,7 +76,7 @@
static char sccsid[] = "@(#)disklabel.c 8.4 (Berkeley) 5/4/95";
/* from static char sccsid[] = "@(#)disklabel.c 1.2 (Symmetric) 11/28/85"; */
#else
-__RCSID("$NetBSD: main.c,v 1.28 2013/01/17 18:33:58 christos Exp $");
+__RCSID("$NetBSD: main.c,v 1.29 2013/05/03 16:05:12 matt Exp $");
#endif
#endif /* not lint */
@@ -163,6 +163,7 @@
static void writelabel_direct(int);
static int update_label(int, u_int, u_int);
static struct disklabel *find_label(int, u_int);
+static void getmachineparams(const char *);
static void makedisktab(FILE *, struct disklabel *);
static void makelabel(const char *, const char *);
@@ -183,15 +184,142 @@
Home |
Main Index |
Thread Index |
Old Index