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/d6b1cce6c3f8
branches: trunk
changeset: 956439:d6b1cce6c3f8
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 c7a380ec19d0 -r d6b1cce6c3f8 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 c7a380ec19d0 -r d6b1cce6c3f8 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