diff options
| author | sjg <sjg@NetBSD.org> | 2017-08-10 21:07:48 +0000 |
|---|---|---|
| committer | sjg <sjg@NetBSD.org> | 2017-08-10 21:07:48 +0000 |
| commit | 024cc42bf1909a5868fbf4aa86d3ed2e045739f9 (patch) | |
| tree | f8b2fdcae10cafff69c38710c05e329c49e22247 /usr.bin/make | |
| parent | e2e1887fdd71aa90fa6f6f24298d16b95e30437d (diff) | |
Avoid full path meta file names for subdir of .OBJDIR
Diffstat (limited to 'usr.bin/make')
| -rw-r--r-- | usr.bin/make/meta.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/usr.bin/make/meta.c b/usr.bin/make/meta.c index af717d019a2..05cdc7a0f7d 100644 --- a/usr.bin/make/meta.c +++ b/usr.bin/make/meta.c @@ -1,4 +1,4 @@ -/* $NetBSD: meta.c,v 1.68 2017/07/09 04:54:00 sjg Exp $ */ +/* $NetBSD: meta.c,v 1.69 2017/08/10 21:07:48 sjg Exp $ */ /* * Implement 'meta' mode. @@ -246,6 +246,8 @@ meta_name(struct GNode *gn, char *mname, size_t mnamelen, char *rp; char *cp; char *tp; + char *dtp; + size_t ldname; /* * Weed out relative paths from the target file name. @@ -282,10 +284,15 @@ meta_name(struct GNode *gn, char *mname, size_t mnamelen, } /* on some systems dirname may modify its arg */ tp = bmake_strdup(tname); - if (strcmp(dname, dirname(tp)) == 0) + dtp = dirname(tp); + if (strcmp(dname, dtp) == 0) snprintf(mname, mnamelen, "%s.meta", tname); else { - snprintf(mname, mnamelen, "%s/%s.meta", dname, tname); + ldname = strlen(dname); + if (strncmp(dname, dtp, ldname) == 0 && dtp[ldname] == '/') + snprintf(mname, mnamelen, "%s/%s.meta", dname, &tname[ldname+1]); + else + snprintf(mname, mnamelen, "%s/%s.meta", dname, tname); /* * Replace path separators in the file name after the |
