[PATCH util/makedepend V2] Quote colons in filenames/paths
Alan Coopersmith
alan.coopersmith at oracle.com
Sat May 5 18:11:26 UTC 2018
From: Antonio Larrosa <alarrosa at suse.com>
Makefile doesn't like colons in filenames/paths so they must
be quoted in the output. Otherwise makedepend doesn't work with
full paths that contain a colon.
V2: Use quoted filename when measuring name length
Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
---
pr.c | 48 ++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 44 insertions(+), 4 deletions(-)
diff --git a/pr.c b/pr.c
index 04abef9..9a49635 100644
--- a/pr.c
+++ b/pr.c
@@ -63,25 +63,65 @@ add_include(struct filepointer *filep, struct inclist *file,
}
}
+/**
+ * Replaces all ":" occurrences in @p input with "\:" using @p outputbuffer (of size @p bufsize)
+ * possibly to hold the result. @p returns the string with quoted colons
+ */
+static const char *
+quoteColons(const char *input, char *outputbuffer, size_t bufsize)
+{
+ const char *tmp=input;
+ const char *loc;
+ char *output=outputbuffer;
+
+ loc = strchr(input, ':');
+ if (loc == NULL) {
+ return input;
+ }
+
+ tmp=input;
+ while (loc != NULL && bufsize > loc-tmp+2 ) {
+ memcpy(output, tmp, loc-tmp);
+ output+=loc-tmp;
+ bufsize-=loc-tmp+2;
+ tmp=loc+1;
+ *output='\\';
+ output++;
+ *output=':';
+ output++;
+ loc = strchr(tmp, ':');
+ }
+
+ if (strlen(tmp) <= bufsize)
+ strcpy(output, tmp);
+ else {
+ strncpy(output, tmp, bufsize-1);
+ output[bufsize]=0;
+ }
+ return outputbuffer;
+}
+
static void
pr(struct inclist *ip, const char *file, const char *base)
{
static const char *lastfile;
static int current_len;
register int len, i;
+ const char * quoted;
char buf[ BUFSIZ ];
+ char quotebuf[ BUFSIZ ];
printed = TRUE;
- len = strlen(ip->i_file)+1;
+ quoted = quoteColons(ip->i_file, quotebuf, sizeof(quotebuf));
+ len = strlen(quoted)+1;
if (current_len + len > width || file != lastfile) {
lastfile = file;
snprintf(buf, sizeof(buf), "\n%s%s%s: %s",
- objprefix, base, objsuffix, ip->i_file);
+ objprefix, base, objsuffix, quoted);
len = current_len = strlen(buf);
}
else {
- buf[0] = ' ';
- strcpy(buf+1, ip->i_file);
+ snprintf(buf, sizeof(buf), " %s", quoted);
current_len += len;
}
fwrite(buf, len, 1, stdout);
--
2.15.0
More information about the xorg-devel
mailing list