Module Name: src Committed By: rillig Date: Sat Jan 23 11:14:59 UTC 2021
Modified Files: src/usr.bin/make: dir.c Log Message: make(1): extract SearchPath_ExpandMiddle from SearchPath_Expand To generate a diff of this commit: cvs rdiff -u -r1.258 -r1.259 src/usr.bin/make/dir.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/make/dir.c diff -u src/usr.bin/make/dir.c:1.258 src/usr.bin/make/dir.c:1.259 --- src/usr.bin/make/dir.c:1.258 Sat Jan 23 11:06:04 2021 +++ src/usr.bin/make/dir.c Sat Jan 23 11:14:59 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: dir.c,v 1.258 2021/01/23 11:06:04 rillig Exp $ */ +/* $NetBSD: dir.c,v 1.259 2021/01/23 11:14:59 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -138,7 +138,7 @@ #include "job.h" /* "@(#)dir.c 8.2 (Berkeley) 1/2/94" */ -MAKE_RCSID("$NetBSD: dir.c,v 1.258 2021/01/23 11:06:04 rillig Exp $"); +MAKE_RCSID("$NetBSD: dir.c,v 1.259 2021/01/23 11:14:59 rillig Exp $"); /* * A search path is a list of CachedDir structures. A CachedDir has in it the @@ -835,6 +835,54 @@ PrintExpansions(StringList *expansions) } /* + * The wildcard isn't in the first component. + * Find all the components up to the one with the wildcard. + */ +static void +SearchPath_ExpandMiddle(SearchPath *path, const char *pattern, + const char *wildcardComponent, StringList *expansions) +{ + char *prefix, *dirpath, *end; + SearchPath *partPath; + + prefix = bmake_strsedup(pattern, wildcardComponent + 1); + /* + * XXX: Check the "the directory is added to the path" part. + * 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. + */ + dirpath = Dir_FindFile(prefix, path); + free(prefix); + + /* + * dirpath is null if can't find the leading component + * + * XXX: Dir_FindFile won't find internal components. i.e. if the + * path contains ../Etc/Object and we're looking for Etc, it won't + * be found. Ah well. Probably not important. + * + * XXX: Check whether the above comment is still true. + */ + if (dirpath == NULL) + return; + + end = &dirpath[strlen(dirpath) - 1]; + /* XXX: What about multiple trailing slashes? */ + if (*end == '/') + *end = '\0'; + + partPath = SearchPath_New(); + (void)Dir_AddDir(partPath, dirpath); + DirExpandPath(wildcardComponent + 1, partPath, expansions); + SearchPath_Free(partPath); +} + +/* * Expand the given pattern into a list of existing filenames by globbing it, * looking in each directory from the search path. * @@ -899,49 +947,9 @@ SearchPath_Expand(SearchPath *path, cons /* The first component contains the wildcard. */ /* Start the search from the local directory */ DirExpandPath(pattern, path, expansions); - goto done; - } - - { - char *prefix = bmake_strsedup(pattern, wildcardComponent + 1); - /* - * The wildcard isn't in the first component. - * Find all the components up to the one with the wildcard. - */ - /* - * XXX: Check the "the directory is added to the path" part. - * 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); - - /* - * dirpath is null if can't find the leading component - * XXX: Dir_FindFile won't find internal components. - * i.e. if the path contains ../Etc/Object and we're - * looking for Etc, it won't be found. Ah well. - * Probably not important. - * XXX: Check whether the above comment is still true. - */ - if (dirpath != NULL) { - SearchPath *partPath; - - char *end = &dirpath[strlen(dirpath) - 1]; - /* XXX: What about multiple trailing slashes? */ - if (*end == '/') - *end = '\0'; - - partPath = SearchPath_New(); - (void)Dir_AddDir(partPath, dirpath); - DirExpandPath(wildcardComponent + 1, partPath, expansions); - SearchPath_Free(partPath); - } + } else { + SearchPath_ExpandMiddle(path, pattern, wildcardComponent, + expansions); } done: