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): in Dir_Expand, don't re-use local vari...
details: https://anonhg.NetBSD.org/src/rev/4111f815d735
branches: trunk
changeset: 1016565:4111f815d735
user: rillig <rillig%NetBSD.org@localhost>
date: Mon Nov 23 22:14:54 2020 +0000
description:
make(1): in Dir_Expand, don't re-use local variables
While here, add a few remarks from a previous attempt at flattening
the function.
diffstat:
usr.bin/make/dir.c | 28 ++++++++++++++++++----------
1 files changed, 18 insertions(+), 10 deletions(-)
diffs (64 lines):
diff -r f7bf647447af -r 4111f815d735 usr.bin/make/dir.c
--- a/usr.bin/make/dir.c Mon Nov 23 22:05:58 2020 +0000
+++ b/usr.bin/make/dir.c Mon Nov 23 22:14:54 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: dir.c,v 1.217 2020/11/23 22:05:58 rillig Exp $ */
+/* $NetBSD: dir.c,v 1.218 2020/11/23 22:14:54 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -134,7 +134,7 @@
#include "job.h"
/* "@(#)dir.c 8.2 (Berkeley) 1/2/94" */
-MAKE_RCSID("$NetBSD: dir.c,v 1.217 2020/11/23 22:05:58 rillig Exp $");
+MAKE_RCSID("$NetBSD: dir.c,v 1.218 2020/11/23 22:14:54 rillig Exp $");
#define DIR_DEBUG0(text) DEBUG0(DIR, text)
#define DIR_DEBUG1(fmt, arg1) DEBUG1(DIR, fmt, arg1)
@@ -790,7 +790,7 @@
/* At this point, the word has a directory component. */
- /* Find the first wildcard in the string. */
+ /* Find the first wildcard in the word. */
for (cp = word; *cp != '\0'; cp++)
if (*cp == '?' || *cp == '[' || *cp == '*')
break;
@@ -828,6 +828,11 @@
* It is probably surprising that the directory before a
* wildcard gets added to the path.
*/
+ /*
+ * XXX: Only the first match of the prefix in the path is
+ * taken, any others are ignored. The expectation may be
+ * that the pattern is expanded in the whole path.
+ */
char *dirpath = Dir_FindFile(prefix, path);
free(prefix);
@@ -840,14 +845,17 @@
* XXX: Check whether the above comment is still true.
*/
if (dirpath != NULL) {
- char *dp = &dirpath[strlen(dirpath) - 1];
- if (*dp == '/')
- *dp = '\0';
+ SearchPath *partPath;
- path = Lst_New();
- (void)Dir_AddDir(path, dirpath);
- DirExpandPath(cp + 1, path, expansions);
- Lst_Free(path);
+ char *end = &dirpath[strlen(dirpath) - 1];
+ /* XXX: What about multiple trailing slashes? */
+ if (*end == '/')
+ *end = '\0';
+
+ partPath = Lst_New();
+ (void)Dir_AddDir(partPath, dirpath);
+ DirExpandPath(cp + 1, partPath, expansions);
+ Lst_Free(partPath);
}
}
Home |
Main Index |
Thread Index |
Old Index