1
0
mirror of https://github.com/golang/go synced 2024-11-18 18:14:43 -07:00

cmd/ld: retry short writes, to get error detail

Fixes #3802.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/7228066
This commit is contained in:
Russ Cox 2013-01-31 07:49:33 -08:00
parent 956cd0059c
commit 592b480746

View File

@ -1447,6 +1447,23 @@ Yconv(Fmt *fp)
vlong coutpos;
static void
dowrite(int fd, char *p, int n)
{
int m;
while(n > 0) {
m = write(fd, p, n);
if(m <= 0) {
cursym = S;
diag("write error: %r");
errorexit();
}
n -= m;
p += m;
}
}
void
cflush(void)
{
@ -1455,13 +1472,8 @@ cflush(void)
if(cbpmax < cbp)
cbpmax = cbp;
n = cbpmax - buf.cbuf;
if(n) {
if(write(cout, buf.cbuf, n) != n) {
diag("write error: %r");
errorexit();
}
dowrite(cout, buf.cbuf, n);
coutpos += n;
}
cbp = buf.cbuf;
cbc = sizeof(buf.cbuf);
cbpmax = cbp;
@ -1502,10 +1514,7 @@ cwrite(void *buf, int n)
cflush();
if(n <= 0)
return;
if(write(cout, buf, n) != n) {
diag("write error: %r");
errorexit();
}
dowrite(cout, buf, n);
coutpos += n;
}