diff options
-rw-r--r-- | tools/build/make_check/Makefile | 11 | ||||
-rw-r--r-- | tools/regression/usr.bin/make/Makefile | 11 | ||||
-rw-r--r-- | usr.bin/make/dir.c | 11 |
3 files changed, 30 insertions, 3 deletions
diff --git a/tools/build/make_check/Makefile b/tools/build/make_check/Makefile index bf26b44..e7bede7 100644 --- a/tools/build/make_check/Makefile +++ b/tools/build/make_check/Makefile @@ -44,6 +44,9 @@ all: @echo "Running test arith_expr" @${MAKE} arith_expr || ${MAKE} failure @echo "PASS: Test arith_expr detected no regression." + @echo "Running test PATH_exists" + @${MAKE} PATH_exists || ${MAKE} failure + @echo "PASS: Test PATH_exists detected no regression." .if make(double) # Doubly-defined targets. make(1) will warn, but use the "right" one. If it @@ -102,6 +105,14 @@ VALUE= 0 .endif .endif +.if make(PATH_exists) +PATH_exists: +.PATH: ${.CURDIR} +.if !exists(${.CURDIR}/) || !exists(${.CURDIR}/.) || !exists(${.CURDIR}/..) +.error exists() failed +.endif +.endif + failure: @echo "FAIL: Test failed: regression detected. See above." @false diff --git a/tools/regression/usr.bin/make/Makefile b/tools/regression/usr.bin/make/Makefile index bf26b44..e7bede7 100644 --- a/tools/regression/usr.bin/make/Makefile +++ b/tools/regression/usr.bin/make/Makefile @@ -44,6 +44,9 @@ all: @echo "Running test arith_expr" @${MAKE} arith_expr || ${MAKE} failure @echo "PASS: Test arith_expr detected no regression." + @echo "Running test PATH_exists" + @${MAKE} PATH_exists || ${MAKE} failure + @echo "PASS: Test PATH_exists detected no regression." .if make(double) # Doubly-defined targets. make(1) will warn, but use the "right" one. If it @@ -102,6 +105,14 @@ VALUE= 0 .endif .endif +.if make(PATH_exists) +PATH_exists: +.PATH: ${.CURDIR} +.if !exists(${.CURDIR}/) || !exists(${.CURDIR}/.) || !exists(${.CURDIR}/..) +.error exists() failed +.endif +.endif + failure: @echo "FAIL: Test failed: regression detected. See above." @false diff --git a/usr.bin/make/dir.c b/usr.bin/make/dir.c index 57d1687..137a21e 100644 --- a/usr.bin/make/dir.c +++ b/usr.bin/make/dir.c @@ -680,7 +680,7 @@ Dir_FindFile (char *name, Lst path) LstNode ln; /* a list element */ char *file; /* the current filename to check */ Path *p; /* current path member */ - char *cp; /* index of first slash, if any */ + char *cp; /* final component of the name */ Boolean hasSlash; /* true if 'name' contains a / */ struct stat stb; /* Buffer for stat, if necessary */ Hash_Entry *entry; /* Entry for mtimes table */ @@ -767,9 +767,14 @@ Dir_FindFile (char *name, Lst path) continue; } if (*p1 == '\0' && p2 == cp - 1) { - DEBUGF(DIR, ("must be here but isn't -- returing NULL\n")); Lst_Close (path); - return ((char *) NULL); + if (*cp == '\0' || ISDOT(cp) || ISDOTDOT(cp)) { + DEBUGF(DIR, ("returning %s\n", name)); + return (estrdup(name)); + } else { + DEBUGF(DIR, ("must be here but isn't -- returning NULL\n")); + return ((char *) NULL); + } } } } |