Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/xinstall install(1): copy metachar table from usr.bi...



details:   https://anonhg.NetBSD.org/src/rev/e3adc57dfeb8
branches:  trunk
changeset: 941789:e3adc57dfeb8
user:      rillig <rillig%NetBSD.org@localhost>
date:      Fri Oct 30 20:05:00 2020 +0000

description:
install(1): copy metachar table from usr.bin/make

It is not worth having a dependency on usr.bin/make just for including
this small table.  The header file usr.bin/make/make.h, which is
included for consistency with the rest of the usr.bin/make code, is
using inline functions a lot and refers to several parts of make that
are completely irrelevant to usr.bin/install.

diffstat:

 usr.bin/xinstall/Makefile   |   8 +---
 usr.bin/xinstall/xinstall.c |  90 +++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 89 insertions(+), 9 deletions(-)

diffs (151 lines):

diff -r b41669e19e70 -r e3adc57dfeb8 usr.bin/xinstall/Makefile
--- a/usr.bin/xinstall/Makefile Fri Oct 30 19:14:20 2020 +0000
+++ b/usr.bin/xinstall/Makefile Fri Oct 30 20:05:00 2020 +0000
@@ -1,16 +1,12 @@
-#      $NetBSD: Makefile,v 1.28 2020/09/29 12:04:48 roy Exp $
+#      $NetBSD: Makefile,v 1.29 2020/10/30 20:05:00 rillig Exp $
 #      @(#)Makefile    8.1 (Berkeley) 6/6/93
 
 .include <bsd.own.mk>
 
 PROG=  xinstall
-SRCS=  xinstall.c getid.c metachar.c
+SRCS=  xinstall.c getid.c
 MAN=   install.1
 
-.PATH:         ${NETBSDSRCDIR}/usr.bin/make
-CPPFLAGS+=     -I${NETBSDSRCDIR}/usr.bin/make
-CPPFLAGS+=     -DMAKE_NATIVE
-
 .PATH:         ${NETBSDSRCDIR}/usr.sbin/mtree
 CPPFLAGS+=     -I${NETBSDSRCDIR}/usr.sbin/mtree
 
diff -r b41669e19e70 -r e3adc57dfeb8 usr.bin/xinstall/xinstall.c
--- a/usr.bin/xinstall/xinstall.c       Fri Oct 30 19:14:20 2020 +0000
+++ b/usr.bin/xinstall/xinstall.c       Fri Oct 30 20:05:00 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: xinstall.c,v 1.125 2016/05/31 06:55:02 pgoyette Exp $  */
+/*     $NetBSD: xinstall.c,v 1.126 2020/10/30 20:05:00 rillig Exp $    */
 
 /*
  * Copyright (c) 1987, 1993
@@ -29,6 +29,35 @@
  * SUCH DAMAGE.
  */
 
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
 #define __MKTEMP_OK__  /* All uses of mktemp have been checked */
 
 #if HAVE_NBTOOL_CONFIG_H
@@ -48,7 +77,7 @@
 #if 0
 static char sccsid[] = "@(#)xinstall.c 8.1 (Berkeley) 7/21/93";
 #else
-__RCSID("$NetBSD: xinstall.c,v 1.125 2016/05/31 06:55:02 pgoyette Exp $");
+__RCSID("$NetBSD: xinstall.c,v 1.126 2020/10/30 20:05:00 rillig Exp $");
 #endif
 #endif /* not lint */
 
@@ -84,7 +113,6 @@
 
 #include "pathnames.h"
 #include "mtree.h"
-#include "metachar.h"
 
 #define BACKUP_SUFFIX ".old"
 
@@ -143,6 +171,7 @@
 __dead static void     usage(void);
 static char   *xbasename(char *);
 static char   *xdirname(char *);
+static int     needshell(const char *, int);
 
 int
 main(int argc, char *argv[])
@@ -1286,3 +1315,58 @@
            prog, prog, prog);
        exit(1);
 }
+
+/*
+ * The following array is used to make a fast determination of which
+ * characters are interpreted specially by the shell.  If a command
+ * contains any of these characters, it is executed by the shell, not
+ * directly by us.
+ */
+static unsigned char _metachar[128] = {
+/*    nul   soh   stx   etx   eot   enq   ack   bel */
+       1,    0,    0,    0,    0,    0,    0,    0,
+/*     bs    ht    nl    vt    np    cr    so    si */
+       0,    0,    1,    0,    0,    0,    0,    0,
+/*    dle   dc1   dc2   dc3   dc4   nak   syn   etb */
+       0,    0,    0,    0,    0,    0,    0,    0,
+/*    can    em   sub   esc    fs    gs    rs    us */
+       0,    0,    0,    0,    0,    0,    0,    0,
+/*     sp     !     "     #     $     %     &     ' */
+       0,    1,    1,    1,    1,    0,    1,    1,
+/*      (     )     *     +     ,     -     .     / */
+       1,    1,    1,    0,    0,    0,    0,    0,
+/*      0     1     2     3     4     5     6     7 */
+       0,    0,    0,    0,    0,    0,    0,    0,
+/*      8     9     :     ;     <     =     >     ? */
+       0,    0,    0,    1,    1,    0,    1,    1,
+/*      @     A     B     C     D     E     F     G */
+       0,    0,    0,    0,    0,    0,    0,    0,
+/*      H     I     J     K     L     M     N     O */
+       0,    0,    0,    0,    0,    0,    0,    0,
+/*      P     Q     R     S     T     U     V     W */
+       0,    0,    0,    0,    0,    0,    0,    0,
+/*      X     Y     Z     [     \     ]     ^     _ */
+       0,    0,    0,    1,    1,    1,    1,    0,
+/*      `     a     b     c     d     e     f     g */
+       1,    0,    0,    0,    0,    0,    0,    0,
+/*      h     i     j     k     l     m     n     o */
+       0,    0,    0,    0,    0,    0,    0,    0,
+/*      p     q     r     s     t     u     v     w */
+       0,    0,    0,    0,    0,    0,    0,    0,
+/*      x     y     z     {     |     }     ~   del */
+       0,    0,    0,    1,    1,    1,    1,    0,
+};
+
+#define ismeta(c)      _metachar[(c) & 0x7f]
+
+static int
+needshell(const char *cmd, int white)
+{
+       while (!ismeta(*cmd) && *cmd != ':' && *cmd != '=') {
+               if (white && isspace((unsigned char)*cmd))
+                       break;
+               cmd++;
+       }
+
+       return *cmd != '\0';
+}



Home | Main Index | Thread Index | Old Index