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): make Lst_RemoveIf simpler in meta_oodate
details: https://anonhg.NetBSD.org/src/rev/ddb3646597fc
branches: trunk
changeset: 1015486:ddb3646597fc
user: rillig <rillig%NetBSD.org@localhost>
date: Sat Oct 24 10:17:21 2020 +0000
description:
make(1): make Lst_RemoveIf simpler in meta_oodate
Using Lst_Find and Lst_FindFrom to implement Lst_RemoveIf was a bad
idea. It made the code much more complicated than necessary. There is
no predefined Lst_RemoveIf, but that can be implemented easily. By
inlining the list handling, path_match does not need void pointers
anymore.
Freeing the path from the missingFiles list had been implemented in a
surprisingly complicated way, intermangling it unnecessarily with the
list operations, even though these are completely independent.
diffstat:
usr.bin/make/meta.c | 30 +++++++++++-------------------
1 files changed, 11 insertions(+), 19 deletions(-)
diffs (53 lines):
diff -r a3e68bcc3461 -r ddb3646597fc usr.bin/make/meta.c
--- a/usr.bin/make/meta.c Sat Oct 24 09:28:50 2020 +0000
+++ b/usr.bin/make/meta.c Sat Oct 24 10:17:21 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: meta.c,v 1.128 2020/10/24 04:31:53 rillig Exp $ */
+/* $NetBSD: meta.c,v 1.129 2020/10/24 10:17:21 rillig Exp $ */
/*
* Implement 'meta' mode.
@@ -961,10 +961,8 @@
/* See if the path equals prefix or starts with "prefix/". */
static Boolean
-path_match(const void *p, const void *q)
+path_starts_with(const char *path, const char *prefix)
{
- const char *path = p;
- const char *prefix = q;
size_t n = strlen(prefix);
if (strncmp(path, prefix, n) != 0)
@@ -1315,22 +1313,16 @@
DEQUOTE(move_target);
/* FALLTHROUGH */
case 'D': /* unlink */
- if (*p == '/' && !Lst_IsEmpty(missingFiles)) {
+ if (*p == '/') {
/* remove any missingFiles entries that match p */
- StringListNode *missingNode =
- Lst_Find(missingFiles, path_match, p);
- if (missingNode != NULL) {
- StringListNode *nln;
-
- do {
- char *tp;
- nln = Lst_FindFrom(missingFiles,
- missingNode->next,
- path_match, p);
- tp = missingNode->datum;
- Lst_Remove(missingFiles, missingNode);
- free(tp);
- } while ((missingNode = nln) != NULL);
+ StringListNode *ln = missingFiles->first;
+ while (ln != NULL) {
+ StringListNode *next = ln->next;
+ if (path_starts_with(ln->datum, p)) {
+ free(ln->datum);
+ Lst_Remove(missingFiles, ln);
+ }
+ ln = next;
}
}
if (buf[0] == 'M') {
Home |
Main Index |
Thread Index |
Old Index