From: Shenghou Ma Date: Fri, 12 Dec 2014 04:07:04 +0000 (-0500) Subject: cmd/dist: ignore \r in crlf EOL when splitlines() X-Git-Tag: go1.5beta1~2640 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d3072127ccac58f39df12a217f1fa9bb46d36a3b;p=gostls13.git cmd/dist: ignore \r in crlf EOL when splitlines() Fixes build on Windows. Fixes #9234. Change-Id: Iebf4317e7cc20ba1afea5558553166cd89783316 Reviewed-on: https://go-review.googlesource.com/1421 Reviewed-by: --- diff --git a/src/cmd/dist/buf.c b/src/cmd/dist/buf.c index 2ddc6be752..fbecd567ad 100644 --- a/src/cmd/dist/buf.c +++ b/src/cmd/dist/buf.c @@ -239,7 +239,8 @@ vuniq(Vec *v) } // splitlines replaces the vector v with the result of splitting -// the input p after each \n. +// the input p after each \n. If there is a \r immediately before +// each \n, it will be removed. void splitlines(Vec *v, char *p) { @@ -249,8 +250,12 @@ splitlines(Vec *v, char *p) vreset(v); start = p; for(i=0; p[i]; i++) { - if(p[i] == '\n') { + if((p[i] == '\r' && p[i+1] == '\n') || p[i] == '\n') { vaddn(v, start, (p+i+1)-start); + if(p[i] == '\r') { + v->p[v->len-1][(p+i)-start] = '\n'; + i++; + } start = p+i+1; } }