[PATCH] Quote colons in filenames/paths
Antonio Larrosa
alarrosa at suse.com
Tue Feb 2 18:31:27 CET 2016
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.
---
pr.c | 42 ++++++++++++++++++++++++++++++++++++++++--
1 file changed, 40 insertions(+), 2 deletions(-)
diff --git a/pr.c b/pr.c
index 04abef9..619be45 100644
--- a/pr.c
+++ b/pr.c
@@ -63,6 +63,43 @@ 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
+ */
+const char *quoteColons(const char *input, char *outputbuffer, int 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)
{
@@ -70,18 +107,19 @@ pr(struct inclist *ip, const char *file, const char *base)
static int current_len;
register int len, i;
char buf[ BUFSIZ ];
+ char quotebuf[ BUFSIZ ];
printed = TRUE;
len = strlen(ip->i_file)+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, quoteColons(ip->i_file, quotebuf, sizeof(quotebuf)));
len = current_len = strlen(buf);
}
else {
buf[0] = ' ';
- strcpy(buf+1, ip->i_file);
+ strcpy(buf+1, quoteColons(ip->i_file, quotebuf, sizeof(quotebuf)));
current_len += len;
}
fwrite(buf, len, 1, stdout);
--
2.1.4
More information about the xorg-devel
mailing list