two small changes:
authorespie <espie@openbsd.org>
Mon, 19 Jul 2010 19:30:37 +0000 (19:30 +0000)
committerespie <espie@openbsd.org>
Mon, 19 Jul 2010 19:30:37 +0000 (19:30 +0000)
- allow variables in SysV modifiers, as requested by matthieu@
(since recursive variables are an extension, this just extends the
extension)
- variation on :Q  called :QL (quote list), which does quote every character
EXCEPT for whitespace. e.g.,

toto:
@for i in ${VAR:QL} ...

54 files changed:
usr.bin/make/arch.c
usr.bin/make/arch.h
usr.bin/make/buf.c
usr.bin/make/buf.h
usr.bin/make/cmd_exec.c
usr.bin/make/cmd_exec.h
usr.bin/make/compat.h
usr.bin/make/cond.h
usr.bin/make/cond_int.h
usr.bin/make/config.h
usr.bin/make/defines.h
usr.bin/make/dir.c
usr.bin/make/dir.h
usr.bin/make/direxpand.c
usr.bin/make/direxpand.h
usr.bin/make/engine.h
usr.bin/make/error.c
usr.bin/make/error.h
usr.bin/make/extern.h
usr.bin/make/for.h
usr.bin/make/garray.h
usr.bin/make/generate.c
usr.bin/make/gnode.h
usr.bin/make/init.c
usr.bin/make/init.h
usr.bin/make/job.h
usr.bin/make/lowparse.h
usr.bin/make/lst.h
usr.bin/make/lst_t.h
usr.bin/make/main.h
usr.bin/make/make.h
usr.bin/make/memory.c
usr.bin/make/memory.h
usr.bin/make/node_int.h
usr.bin/make/parse.h
usr.bin/make/parsevar.c
usr.bin/make/parsevar.h
usr.bin/make/pathnames.h
usr.bin/make/regress.c
usr.bin/make/stats.c
usr.bin/make/stats.h
usr.bin/make/str.c
usr.bin/make/suff.h
usr.bin/make/symtable.h
usr.bin/make/targ.c
usr.bin/make/targ.h
usr.bin/make/timestamp.c
usr.bin/make/timestamp.h
usr.bin/make/timestamp_t.h
usr.bin/make/util.c
usr.bin/make/varmodifiers.c
usr.bin/make/varmodifiers.h
usr.bin/make/varname.c
usr.bin/make/varname.h

index 138a972..0e65cd9 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: arch.c,v 1.77 2010/02/03 20:45:44 miod Exp $ */
+/*     $OpenBSD: arch.c,v 1.78 2010/07/19 19:30:37 espie Exp $ */
 /*     $NetBSD: arch.c,v 1.17 1996/11/06 17:58:59 christos Exp $       */
 
 /*
index 1dca02c..0e7d8ec 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef ARCH_H
 #define ARCH_H
 /*     $OpenPackages$ */
-/*     $OpenBSD: arch.h,v 1.4 2007/09/17 10:12:35 espie Exp $ */
+/*     $OpenBSD: arch.h,v 1.5 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index 4e373a0..b3eec47 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: buf.c,v 1.21 2007/07/24 21:09:07 espie Exp $  */
+/*     $OpenBSD: buf.c,v 1.22 2010/07/19 19:30:37 espie Exp $  */
 /*     $NetBSD: buf.c,v 1.9 1996/12/31 17:53:21 christos Exp $ */
 
 /*
index 40bbe4f..df07c45 100644 (file)
@@ -2,7 +2,7 @@
 #define _BUF_H
 
 /*     $OpenPackages$ */
-/*     $OpenBSD: buf.h,v 1.17 2007/09/17 09:28:36 espie Exp $  */
+/*     $OpenBSD: buf.h,v 1.18 2010/07/19 19:30:37 espie Exp $  */
 /*     $NetBSD: buf.h,v 1.7 1996/12/31 17:53:22 christos Exp $ */
 
 /*
index 7d06845..132677f 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: cmd_exec.c,v 1.6 2007/07/24 21:09:07 espie Exp $ */
+/*     $OpenBSD: cmd_exec.c,v 1.7 2010/07/19 19:30:37 espie Exp $ */
 /*
  * Copyright (c) 2001 Marc Espie.
  *
index a7be777..3bca2d3 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef CMD_EXEC_H
 #define CMD_EXEC_H
 /*     $OpenPackages$ */
-/*     $OpenBSD: cmd_exec.h,v 1.2 2007/09/17 09:28:36 espie Exp $ */
+/*     $OpenBSD: cmd_exec.h,v 1.3 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index df772d5..19b2504 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef COMPAT_H
 #define COMPAT_H
 /*     $OpenPackages$ */
-/*     $OpenBSD: compat.h,v 1.1 2001/05/23 12:34:41 espie Exp $ */
+/*     $OpenBSD: compat.h,v 1.2 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index a965524..a9ffb06 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef COND_H
 #define COND_H
 /*     $OpenPackages$ */
-/*     $OpenBSD: cond.h,v 1.3 2007/07/08 17:44:20 espie Exp $ */
+/*     $OpenBSD: cond.h,v 1.4 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index da76293..a428f8b 100644 (file)
@@ -1,5 +1,5 @@
 /* $OpenPackages$ */
-/* $OpenBSD: cond_int.h,v 1.4 2007/07/08 17:44:20 espie Exp $ */
+/* $OpenBSD: cond_int.h,v 1.5 2010/07/19 19:30:37 espie Exp $ */
 
 /* List of all keywords recognized by the make parser */
 #define COND_IF                "if"
index 4bde350..0e4f284 100644 (file)
@@ -2,7 +2,7 @@
 #define CONFIG_H
 
 /*     $OpenPackages$ */
-/*     $OpenBSD: config.h,v 1.16 2007/09/16 09:49:24 espie Exp $       */
+/*     $OpenBSD: config.h,v 1.17 2010/07/19 19:30:37 espie Exp $       */
 /*     $NetBSD: config.h,v 1.7 1996/11/06 17:59:03 christos Exp $      */
 
 /*
index b0df89d..2aecd8c 100644 (file)
@@ -2,7 +2,7 @@
 #define DEFINES_H
 
 /*     $OpenPackages$ */
-/*     $OpenBSD: defines.h,v 1.7 2008/11/04 07:22:35 espie Exp $ */
+/*     $OpenBSD: defines.h,v 1.8 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index 822cd14..0574d2b 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: dir.c,v 1.57 2009/08/16 09:53:43 espie Exp $ */
+/*     $OpenBSD: dir.c,v 1.58 2010/07/19 19:30:37 espie Exp $ */
 /*     $NetBSD: dir.c,v 1.14 1997/03/29 16:51:26 christos Exp $        */
 
 /*
index 4eb1778..b72b7e4 100644 (file)
@@ -2,7 +2,7 @@
 #define DIR_H
 
 /*     $OpenPackages$ */
-/*     $OpenBSD: dir.h,v 1.24 2008/11/04 07:22:35 espie Exp $  */
+/*     $OpenBSD: dir.h,v 1.25 2010/07/19 19:30:37 espie Exp $  */
 /*     $NetBSD: dir.h,v 1.4 1996/11/06 17:59:05 christos Exp $ */
 
 /*
index 2a6eb4f..1ce7195 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: direxpand.c,v 1.4 2007/09/17 12:22:52 espie Exp $ */
+/*     $OpenBSD: direxpand.c,v 1.5 2010/07/19 19:30:37 espie Exp $ */
 /*
  * Copyright (c) 1999,2007 Marc Espie.
  *
index 7cbd139..a032312 100644 (file)
@@ -1,6 +1,6 @@
 #ifndef DIREXPAND_H
 #define DIREXPAND_H
-/* $OpenBSD: direxpand.h,v 1.1 2007/09/16 10:14:26 espie Exp $ */
+/* $OpenBSD: direxpand.h,v 1.2 2010/07/19 19:30:37 espie Exp $ */
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
  * Copyright (c) 1988, 1989 by Adam de Boor
index d6e3e7d..046dd34 100644 (file)
@@ -1,6 +1,6 @@
 #ifndef ENGINE_H
 #define ENGINE_H
-/*     $OpenBSD: engine.h,v 1.8 2009/05/10 11:07:37 espie Exp $        */
+/*     $OpenBSD: engine.h,v 1.9 2010/07/19 19:30:37 espie Exp $        */
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
index 30b19f7..e3c9484 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: error.c,v 1.17 2008/11/04 07:22:35 espie Exp $ */
+/*     $OpenBSD: error.c,v 1.18 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index 2e9905f..f6a18fb 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef ERROR_H
 #define ERROR_H
 /*     $OpenPackages$ */
-/*     $OpenBSD: error.h,v 1.9 2008/11/04 07:22:35 espie Exp $ */
+/*     $OpenBSD: error.h,v 1.10 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index 4ea7980..ecc63e0 100644 (file)
@@ -2,7 +2,7 @@
 #define EXTERN_H
 
 /*     $OpenPackages$ */
-/*     $OpenBSD: extern.h,v 1.41 2007/09/17 12:42:09 espie Exp $       */
+/*     $OpenBSD: extern.h,v 1.42 2010/07/19 19:30:37 espie Exp $       */
 /*     $NetBSD: nonints.h,v 1.12 1996/11/06 17:59:19 christos Exp $    */
 
 /*-
index 66479f2..5a5e8cd 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef FOR_H
 #define FOR_H
 /*     $OpenPackages$ */
-/* $OpenBSD: for.h,v 1.3 2007/09/17 09:28:36 espie Exp $ */
+/* $OpenBSD: for.h,v 1.4 2010/07/19 19:30:37 espie Exp $ */
 /*
  * Copyright (c) 2001 Marc Espie.
  *
index 91d085e..2c98341 100644 (file)
@@ -2,7 +2,7 @@
 #define GARRAY_H
 
 /* $OpenPackages$ */
-/* $OpenBSD: garray.h,v 1.4 2007/12/01 15:14:34 espie Exp $ */
+/* $OpenBSD: garray.h,v 1.5 2010/07/19 19:30:37 espie Exp $ */
 /* Growable array implementation */
 
 /*
index b95547a..13a0558 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: generate.c,v 1.10 2007/09/17 09:28:36 espie Exp $ */
+/*     $OpenBSD: generate.c,v 1.11 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index 3669dbf..31e2824 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef GNODE_H
 #define GNODE_H
 /*     $OpenPackages$ */
-/*     $OpenBSD: gnode.h,v 1.15 2009/08/16 09:51:12 espie Exp $ */
+/*     $OpenBSD: gnode.h,v 1.16 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index 21d2c89..0831ddf 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: init.c,v 1.4 2007/09/17 12:42:09 espie Exp $ */
+/*     $OpenBSD: init.c,v 1.5 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index 9086357..474ba16 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef INIT_H
 #define INIT_H
 /*     $OpenPackages$ */
-/*     $OpenBSD: init.h,v 1.1 2001/05/23 12:34:44 espie Exp $ */
+/*     $OpenBSD: init.h,v 1.2 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index b27cedb..a9b3e1f 100644 (file)
@@ -2,7 +2,7 @@
 #define _JOB_H_
 
 /*     $OpenPackages$ */
-/*     $OpenBSD: job.h,v 1.23 2009/05/10 11:07:37 espie Exp $  */
+/*     $OpenBSD: job.h,v 1.24 2010/07/19 19:30:37 espie Exp $  */
 /*     $NetBSD: job.h,v 1.5 1996/11/06 17:59:10 christos Exp $ */
 
 /*
index 2fd910f..a011893 100644 (file)
@@ -2,7 +2,7 @@
 #define LOWPARSE_H
 
 /* $OpenPackages$ */
-/* $OpenBSD: lowparse.h,v 1.5 2007/09/17 09:28:36 espie Exp $ */
+/* $OpenBSD: lowparse.h,v 1.6 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 1999 Marc Espie.
index 789b49e..f1c9b03 100644 (file)
@@ -2,7 +2,7 @@
 #define _LST_H_
 
 /*     $OpenPackages$ */
-/*     $OpenBSD: lst.h,v 1.27 2008/01/12 13:08:59 espie Exp $ */
+/*     $OpenBSD: lst.h,v 1.28 2010/07/19 19:30:37 espie Exp $ */
 /*     $NetBSD: lst.h,v 1.7 1996/11/06 17:59:12 christos Exp $ */
 
 /*
index 69a4a32..6c84cd9 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: lst_t.h,v 1.1 2001/05/23 12:34:46 espie Exp $ */
+/*     $OpenBSD: lst_t.h,v 1.2 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index ce737a9..0220bd6 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef MAIN_H
 #define MAIN_H
 /*     $OpenPackages$ */
-/*     $OpenBSD: main.h,v 1.3 2007/09/17 12:42:09 espie Exp $ */
+/*     $OpenBSD: main.h,v 1.4 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index fb7e8e1..430bbac 100644 (file)
@@ -2,7 +2,7 @@
 #define _MAKE_H_
 
 /*     $OpenPackages$ */
-/*     $OpenBSD: make.h,v 1.36 2007/12/01 15:14:34 espie Exp $ */
+/*     $OpenBSD: make.h,v 1.37 2010/07/19 19:30:37 espie Exp $ */
 /*     $NetBSD: make.h,v 1.15 1997/03/10 21:20:00 christos Exp $       */
 
 /*
index 9572f50..bb90c15 100644 (file)
@@ -1,5 +1,5 @@
 /* $OpenPackages$ */
-/* $OpenBSD: memory.c,v 1.6 2008/03/24 18:03:53 espie Exp $ */
+/* $OpenBSD: memory.c,v 1.7 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
index ff8bfd9..df9a15b 100644 (file)
@@ -2,7 +2,7 @@
 #define MEMORY_H
 
 /* $OpenPackages$ */
-/* $OpenBSD: memory.h,v 1.5 2008/03/24 18:03:53 espie Exp $ */
+/* $OpenBSD: memory.h,v 1.6 2010/07/19 19:30:37 espie Exp $ */
 
 /*-
  * Copyright (c) 1988, 1989, 1990, 1993
index f80aec6..1f063c6 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: node_int.h,v 1.1 2007/09/16 10:20:17 espie Exp $ */
+/* $OpenBSD: node_int.h,v 1.2 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2007 Marc Espie.
index eb2d73e..b7388d6 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef PARSE_H
 #define PARSE_H
 /*     $OpenPackages$ */
-/*     $OpenBSD: parse.h,v 1.3 2007/09/17 11:11:30 espie Exp $ */
+/*     $OpenBSD: parse.h,v 1.4 2010/07/19 19:30:37 espie Exp $ */
 /*
  * Copyright (c) 2001 Marc Espie.
  *
index abd4f93..1de7b4f 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: parsevar.c,v 1.12 2007/09/17 11:14:38 espie Exp $     */
+/*     $OpenBSD: parsevar.c,v 1.13 2010/07/19 19:30:37 espie Exp $     */
 /*     $NetBSD: parse.c,v 1.29 1997/03/10 21:20:04 christos Exp $      */
 
 /*
index b8a443a..11e4df8 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef PARSEVAR_H
 #define PARSEVAR_H
 /*     $OpenPackages$ */
-/*     $OpenBSD: parsevar.h,v 1.3 2007/09/17 11:14:38 espie Exp $ */
+/*     $OpenBSD: parsevar.h,v 1.4 2010/07/19 19:30:37 espie Exp $ */
 /*
  * Copyright (c) 2001 Marc Espie.
  *
index 9fd6d11..96d695a 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: pathnames.h,v 1.10 2003/06/03 02:56:12 millert Exp $  */
+/*     $OpenBSD: pathnames.h,v 1.11 2010/07/19 19:30:37 espie Exp $    */
 /*     $NetBSD: pathnames.h,v 1.6 1996/11/06 17:59:21 christos Exp $   */
 
 /*
index 4dfb7ce..35e9f49 100644 (file)
@@ -1,5 +1,5 @@
 /* $OpenPackages$ */
-/* $OpenBSD: regress.c,v 1.5 2004/04/07 13:11:36 espie Exp $ */
+/* $OpenBSD: regress.c,v 1.6 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 1999 Marc Espie.
index 8d57044..fade35c 100644 (file)
@@ -1,5 +1,5 @@
 /* $OpenPackages$ */
-/* $OpenBSD: stats.c,v 1.8 2004/05/05 09:10:47 espie Exp $ */
+/* $OpenBSD: stats.c,v 1.9 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 1999 Marc Espie.
index f1f8520..26b4b08 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef STAT_H
 #define STAT_H
 /* $OpenPackages$ */
-/* $OpenBSD: stats.h,v 1.4 2004/05/05 09:10:47 espie Exp $ */
+/* $OpenBSD: stats.h,v 1.5 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 1999 Marc Espie.
index 1ded11e..c88b8ed 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: str.c,v 1.25 2007/09/17 09:44:20 espie Exp $  */
+/*     $OpenBSD: str.c,v 1.26 2010/07/19 19:30:37 espie Exp $  */
 /*     $NetBSD: str.c,v 1.13 1996/11/06 17:59:23 christos Exp $        */
 
 /*-
index de1df27..c3d2525 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef SUFF_H
 #define SUFF_H
 /*     $OpenPackages$ */
-/*     $OpenBSD: suff.h,v 1.4 2007/11/24 15:41:01 espie Exp $ */
+/*     $OpenBSD: suff.h,v 1.5 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index 368d035..db4afc4 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef SYMTABLE_H
 #define SYMTABLE_H
 /*     $OpenPackages$ */
-/*     $OpenBSD: symtable.h,v 1.2 2007/11/17 16:39:45 espie Exp $ */
+/*     $OpenBSD: symtable.h,v 1.3 2010/07/19 19:30:37 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index c6522b3..1e0740e 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: targ.c,v 1.60 2010/04/25 13:59:53 espie Exp $ */
+/*     $OpenBSD: targ.c,v 1.61 2010/07/19 19:30:37 espie Exp $ */
 /*     $NetBSD: targ.c,v 1.11 1997/02/20 16:51:50 christos Exp $       */
 
 /*
@@ -462,3 +462,9 @@ targets_hash()
 {
        return &targets;
 }
+
+GNode *
+Targ_FindNodeh(const char *name, size_t n, uint32_t hv, int flags)
+{
+       return Targ_FindNodeih(name, name + n - 1, hv, flags);
+}
index a061a3c..c4a3d17 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef TARG_H
 #define TARG_H
 /*     $OpenPackages$ */
-/*     $OpenBSD: targ.h,v 1.7 2008/11/04 07:22:36 espie Exp $ */
+/*     $OpenBSD: targ.h,v 1.8 2010/07/19 19:30:38 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index 8e933df..3581f30 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: timestamp.c,v 1.4 2009/08/16 09:53:43 espie Exp $ */
+/*     $OpenBSD: timestamp.c,v 1.5 2010/07/19 19:30:38 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index 5423d79..1514b7d 100644 (file)
@@ -2,7 +2,7 @@
 #define TIMESTAMP_H
 
 /*     $OpenPackages$ */
-/*     $OpenBSD: timestamp.h,v 1.4 2007/09/17 09:44:20 espie Exp $ */
+/*     $OpenBSD: timestamp.h,v 1.5 2010/07/19 19:30:38 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index 5eb98aa..36c56d3 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: timestamp_t.h,v 1.1 2001/05/23 12:34:51 espie Exp $ */
+/*     $OpenBSD: timestamp_t.h,v 1.2 2010/07/19 19:30:38 espie Exp $ */
 
 /*
  * Copyright (c) 2001 Marc Espie.
index d093901..fa20496 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: util.c,v 1.23 2007/09/17 09:28:36 espie Exp $ */
+/*     $OpenBSD: util.c,v 1.24 2010/07/19 19:30:38 espie Exp $ */
 /*     $NetBSD: util.c,v 1.10 1996/12/31 17:56:04 christos Exp $       */
 
 /*
index 206b9a6..f7c402c 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: varmodifiers.c,v 1.25 2007/11/03 15:42:11 deraadt Exp $       */
+/*     $OpenBSD: varmodifiers.c,v 1.26 2010/07/19 19:30:38 espie Exp $ */
 /*     $NetBSD: var.c,v 1.18 1997/03/18 19:24:46 christos Exp $        */
 
 /*
@@ -149,6 +149,7 @@ static char *VarQuote(const char *, const struct Name *, void *);
 static char *VarModify(char *, bool (*)(struct Name *, bool, Buffer, void *), void *);
 
 static void *check_empty(const char **, SymTable *, bool, int);
+static void *check_quote(const char **, SymTable *, bool, int);
 static char *do_upper(const char *, const struct Name *, void *);
 static char *do_lower(const char *, const struct Name *, void *);
 static void *check_shcmd(const char **, SymTable *, bool, int);
@@ -193,7 +194,7 @@ static struct modifier {
 #ifndef MAKE_BOOTSTRAP
        resubst_mod = {false, get_patternarg, do_regex, NULL, free_patternarg},
 #endif
-       quote_mod = {false, check_empty, VarQuote, NULL , NULL},
+       quote_mod = {false, check_quote, VarQuote, NULL , free},
        tail_mod = {false, check_empty, NULL, VarTail, NULL},
        head_mod = {false, check_empty, NULL, VarHead, NULL},
        suffix_mod = {false, check_empty, NULL, VarSuffix, NULL},
@@ -607,14 +608,13 @@ VarSYSVMatch(struct Name *word, bool addSpace, Buffer buf, void *patp)
 }
 
 void *
-get_sysvpattern(const char **p, SymTable *ctxt UNUSED, bool err UNUSED,
-    int endc)
+get_sysvpattern(const char **p, SymTable *ctxt UNUSED, bool err, int endc)
 {
        VarPattern              *pattern;
        const char              *cp, *cp2;
+       BUFFER buf;
        int cnt = 0;
        char startc = endc == ')' ? '(' : '{';
-
        for (cp = *p;; cp++) {
                if (*cp == '=' && cnt == 0)
                        break;
@@ -628,25 +628,41 @@ get_sysvpattern(const char **p, SymTable *ctxt UNUSED, bool err UNUSED,
                                return NULL;
                }
        }
+       Buf_Init(&buf, 0);
        for (cp2 = cp+1;; cp2++) {
                if ((*cp2 == ':' || *cp2 == endc) && cnt == 0)
                        break;
-               if (*cp2 == '\0')
+               if (*cp2 == '\0') {
+                       Buf_Destroy(&buf);
                        return NULL;
+               }
                if (*cp2 == startc)
                        cnt++;
                else if (*cp2 == endc) {
                        cnt--;
-                       if (cnt < 0)
+                       if (cnt < 0) {
+                               Buf_Destroy(&buf);
                                return NULL;
+                       }
+               } else if (*cp2 == '$') {
+                       if (cp2[1] == '$')
+                               cp2++;
+                       else {
+                               size_t len;
+                               (void)Var_ParseBuffer(&buf, cp2, ctxt, err, 
+                                   &len);
+                               cp2 += len - 1;
+                               continue;
+                       }
                }
+               Buf_AddChar(&buf, *cp2);
        }
 
        pattern = (VarPattern *)emalloc(sizeof(VarPattern));
        pattern->lbuffer = pattern->lhs = Str_dupi(*p, cp);
        pattern->leftLen = cp - *p;
-       pattern->rhs = Str_dupi(cp+1, cp2);
-       pattern->rightLen = cp2 - (cp+1);
+       pattern->rhs = Buf_Retrieve(&buf);
+       pattern->rightLen = Buf_Size(&buf);
        pattern->flags = 0;
        *p = cp2;
        return pattern;
@@ -1043,16 +1059,20 @@ VarGetPattern(SymTable *ctxt, int err, const char **tstr, int delim1,
  *-----------------------------------------------------------------------
  */
 static char *
-VarQuote(const char *str, const struct Name *n UNUSED, void *dummy UNUSED)
+VarQuote(const char *str, const struct Name *n UNUSED, void *islistp)
 {
+       int islist = *((int *)islistp);
 
        BUFFER    buf;
        /* This should cover most shells :-( */
        static char meta[] = "\n \t'`\";&<>()|*?{}[]\\$!#^~";
+       char *rep = meta;
+       if (islist)
+               rep += 3;
 
        Buf_Init(&buf, MAKE_BSIZE);
        for (; *str; str++) {
-               if (strchr(meta, *str) != NULL)
+               if (strchr(rep, *str) != NULL)
                        Buf_AddChar(&buf, '\\');
                Buf_AddChar(&buf, *str);
        }
@@ -1070,6 +1090,22 @@ check_empty(const char **p, SymTable *ctxt UNUSED, bool b UNUSED, int endc)
                return NULL;
 }
 
+static void *
+check_quote(const char **p, SymTable *ctxt UNUSED, bool b UNUSED, int endc)
+{
+       int *qargs = emalloc(sizeof(int));
+       *qargs = 0;
+       if ((*p)[1] == 'L') {
+               *qargs = 1;
+               (*p)++;
+       }
+       if ((*p)[1] == endc || (*p)[1] == ':') {
+               (*p)++;
+               return qargs;
+       } else
+               return NULL;
+}
+
 static void *
 check_shcmd(const char **p, SymTable *ctxt UNUSED, bool b UNUSED, int endc)
 {
index 9de4203..2358468 100644 (file)
@@ -2,7 +2,7 @@
 #define VARMODIFIERS_H
 
 /* $OpenPackages$ */
-/* $OpenBSD: varmodifiers.h,v 1.10 2007/09/17 09:28:36 espie Exp $ */
+/* $OpenBSD: varmodifiers.h,v 1.11 2010/07/19 19:30:38 espie Exp $ */
 
 /*
  * Copyright (c) 1999 Marc Espie.
index edcc7ed..ade006e 100644 (file)
@@ -1,5 +1,5 @@
 /*     $OpenPackages$ */
-/*     $OpenBSD: varname.c,v 1.3 2007/07/09 12:29:45 espie Exp $       */
+/*     $OpenBSD: varname.c,v 1.4 2010/07/19 19:30:38 espie Exp $       */
 /*
  * Copyright (c) 2001 Marc Espie.
  *
index 01d0e5e..71e8447 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: varname.h,v 1.3 2007/09/17 09:28:36 espie Exp $       */
+/*     $OpenBSD: varname.h,v 1.4 2010/07/19 19:30:38 espie Exp $       */
 #ifndef VARNAME_H
 #define VARNAME_H
 /*