Source-Changes-HG archive

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

[src/trunk]: src/usr.bin/make make(1): move SysV string matching to var.c



details:   https://anonhg.NetBSD.org/src/rev/579cf4a02b04
branches:  trunk
changeset: 936103:579cf4a02b04
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sun Jul 19 09:26:18 2020 +0000

description:
make(1): move SysV string matching to var.c

This kind of string matching is only used in variable modifiers, and only
if this feature is enabled by SYSVVARSUB.

diffstat:

 usr.bin/make/nonints.h |    4 +-
 usr.bin/make/str.c     |  110 +-----------------------------------------------
 usr.bin/make/var.c     |  110 +++++++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 110 insertions(+), 114 deletions(-)

diffs (296 lines):

diff -r 0d259c880be6 -r 579cf4a02b04 usr.bin/make/nonints.h
--- a/usr.bin/make/nonints.h    Sun Jul 19 09:13:22 2020 +0000
+++ b/usr.bin/make/nonints.h    Sun Jul 19 09:26:18 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: nonints.h,v 1.78 2020/07/03 07:40:13 rillig Exp $      */
+/*     $NetBSD: nonints.h,v 1.79 2020/07/19 09:26:18 rillig Exp $      */
 
 /*-
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -138,8 +138,6 @@
 char **brk_string(const char *, int *, Boolean, char **);
 char *Str_FindSubstring(const char *, const char *);
 Boolean Str_Match(const char *, const char *);
-char *Str_SYSVMatch(const char *, const char *, size_t *, Boolean *);
-void Str_SYSVSubst(Buffer *, char *, char *, size_t, Boolean);
 
 /* suff.c */
 void Suff_ClearSuffixes(void);
diff -r 0d259c880be6 -r 579cf4a02b04 usr.bin/make/str.c
--- a/usr.bin/make/str.c        Sun Jul 19 09:13:22 2020 +0000
+++ b/usr.bin/make/str.c        Sun Jul 19 09:26:18 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: str.c,v 1.51 2020/07/03 07:40:13 rillig Exp $  */
+/*     $NetBSD: str.c,v 1.52 2020/07/19 09:26:18 rillig Exp $  */
 
 /*-
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: str.c,v 1.51 2020/07/03 07:40:13 rillig Exp $";
+static char rcsid[] = "$NetBSD: str.c,v 1.52 2020/07/19 09:26:18 rillig Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char     sccsid[] = "@(#)str.c  5.8 (Berkeley) 6/1/90";
 #else
-__RCSID("$NetBSD: str.c,v 1.51 2020/07/03 07:40:13 rillig Exp $");
+__RCSID("$NetBSD: str.c,v 1.52 2020/07/19 09:26:18 rillig Exp $");
 #endif
 #endif                         /* not lint */
 #endif
@@ -423,107 +423,3 @@
                str++;
        }
 }
-
-/*-
- *-----------------------------------------------------------------------
- * Str_SYSVMatch --
- *     Check word against pattern for a match (% is wild),
- *
- * Input:
- *     word            Word to examine
- *     pattern         Pattern to examine against
- *     len             Number of characters to substitute
- *
- * Results:
- *     Returns the beginning position of a match or null. The number
- *     of characters matched is returned in len.
- *
- * Side Effects:
- *     None
- *
- *-----------------------------------------------------------------------
- */
-char *
-Str_SYSVMatch(const char *word, const char *pattern, size_t *len,
-    Boolean *hasPercent)
-{
-    const char *p = pattern;
-    const char *w = word;
-    const char *m;
-
-    *hasPercent = FALSE;
-    if (*p == '\0') {
-       /* Null pattern is the whole string */
-       *len = strlen(w);
-       return UNCONST(w);
-    }
-
-    if ((m = strchr(p, '%')) != NULL) {
-       *hasPercent = TRUE;
-       if (*w == '\0') {
-               /* empty word does not match pattern */
-               return NULL;
-       }
-       /* check that the prefix matches */
-       for (; p != m && *w && *w == *p; w++, p++)
-            continue;
-
-       if (p != m)
-           return NULL;        /* No match */
-
-       if (*++p == '\0') {
-           /* No more pattern, return the rest of the string */
-           *len = strlen(w);
-           return UNCONST(w);
-       }
-    }
-
-    m = w;
-
-    /* Find a matching tail */
-    do
-       if (strcmp(p, w) == 0) {
-           *len = w - m;
-           return UNCONST(m);
-       }
-    while (*w++ != '\0');
-
-    return NULL;
-}
-
-
-/*-
- *-----------------------------------------------------------------------
- * Str_SYSVSubst --
- *     Substitute '%' on the pattern with len characters from src.
- *     If the pattern does not contain a '%' prepend len characters
- *     from src.
- *
- * Results:
- *     None
- *
- * Side Effects:
- *     Places result on buf
- *
- *-----------------------------------------------------------------------
- */
-void
-Str_SYSVSubst(Buffer *buf, char *pat, char *src, size_t len,
-    Boolean lhsHasPercent)
-{
-    char *m;
-
-    if ((m = strchr(pat, '%')) != NULL && lhsHasPercent) {
-       /* Copy the prefix */
-       Buf_AddBytes(buf, m - pat, pat);
-       /* skip the % */
-       pat = m + 1;
-    }
-    if (m != NULL || !lhsHasPercent) {
-       /* Copy the pattern */
-       Buf_AddBytes(buf, len, src);
-    }
-
-    /* append the rest */
-    Buf_AddBytes(buf, strlen(pat), pat);
-}
diff -r 0d259c880be6 -r 579cf4a02b04 usr.bin/make/var.c
--- a/usr.bin/make/var.c        Sun Jul 19 09:13:22 2020 +0000
+++ b/usr.bin/make/var.c        Sun Jul 19 09:26:18 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: var.c,v 1.255 2020/07/04 17:41:04 rillig Exp $ */
+/*     $NetBSD: var.c,v 1.256 2020/07/19 09:26:18 rillig Exp $ */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.255 2020/07/04 17:41:04 rillig Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.256 2020/07/19 09:26:18 rillig Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)var.c      8.3 (Berkeley) 3/19/94";
 #else
-__RCSID("$NetBSD: var.c,v 1.255 2020/07/04 17:41:04 rillig Exp $");
+__RCSID("$NetBSD: var.c,v 1.256 2020/07/19 09:26:18 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -1215,6 +1215,108 @@
 }
 
 #ifdef SYSVVARSUB
+/*-
+ *-----------------------------------------------------------------------
+ * Str_SYSVMatch --
+ *     Check word against pattern for a match (% is wild),
+ *
+ * Input:
+ *     word            Word to examine
+ *     pattern         Pattern to examine against
+ *     len             Number of characters to substitute
+ *
+ * Results:
+ *     Returns the beginning position of a match or null. The number
+ *     of characters matched is returned in len.
+ *
+ * Side Effects:
+ *     None
+ *
+ *-----------------------------------------------------------------------
+ */
+static char *
+Str_SYSVMatch(const char *word, const char *pattern, size_t *len,
+    Boolean *hasPercent)
+{
+    const char *p = pattern;
+    const char *w = word;
+    const char *m;
+
+    *hasPercent = FALSE;
+    if (*p == '\0') {
+       /* Null pattern is the whole string */
+       *len = strlen(w);
+       return UNCONST(w);
+    }
+
+    if ((m = strchr(p, '%')) != NULL) {
+       *hasPercent = TRUE;
+       if (*w == '\0') {
+               /* empty word does not match pattern */
+               return NULL;
+       }
+       /* check that the prefix matches */
+       for (; p != m && *w && *w == *p; w++, p++)
+            continue;
+
+       if (p != m)
+           return NULL;        /* No match */
+
+       if (*++p == '\0') {
+           /* No more pattern, return the rest of the string */
+           *len = strlen(w);
+           return UNCONST(w);
+       }
+    }
+
+    m = w;
+
+    /* Find a matching tail */
+    do
+       if (strcmp(p, w) == 0) {
+           *len = w - m;
+           return UNCONST(m);
+       }
+    while (*w++ != '\0');
+
+    return NULL;
+}
+
+
+/*-
+ *-----------------------------------------------------------------------
+ * Str_SYSVSubst --
+ *     Substitute '%' on the pattern with len characters from src.
+ *     If the pattern does not contain a '%' prepend len characters
+ *     from src.
+ *
+ * Side Effects:
+ *     Places result on buf
+ *
+ *-----------------------------------------------------------------------
+ */
+static void
+Str_SYSVSubst(Buffer *buf, const char *pat, const char *src, size_t len,
+    Boolean lhsHasPercent)
+{
+    const char *m;
+
+    if ((m = strchr(pat, '%')) != NULL && lhsHasPercent) {
+       /* Copy the prefix */
+       Buf_AddBytes(buf, m - pat, pat);
+       /* skip the % */
+       pat = m + 1;
+    }
+    if (m != NULL || !lhsHasPercent) {
+       /* Copy the pattern */
+       Buf_AddBytes(buf, len, src);
+    }
+
+    /* append the rest */
+    Buf_AddBytes(buf, strlen(pat), pat);
+}
+
+
 /* Callback function for VarModify to implement the :%.from=%.to modifier. */
 static Boolean
 VarSYSVMatch(GNode *ctx, Var_Parse_State *vpstate,
@@ -1222,7 +1324,7 @@
             void *data)
 {
     size_t len;
-    char *ptr;
+    const char *ptr;
     Boolean hasPercent;
     VarPattern *pat = data;
 



Home | Main Index | Thread Index | Old Index