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