From: Antonio Larrosa <alarr...@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.coopersm...@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 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel