]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/dist: Make windows.c's fatal() print to stderr
authorPieter Droogendijk <pieter@binky.org.uk>
Sat, 30 Jun 2012 14:27:05 +0000 (00:27 +1000)
committerAlex Brainman <alex.brainman@gmail.com>
Sat, 30 Jun 2012 14:27:05 +0000 (00:27 +1000)
Generating env.bat using dist env -wp > env.bat failed silently
if case of an error, because the message was redirected to env.bat.
Verbose messages still go to stdout, causing problems, but that's
a seperate change.
Made errprintf() identical to xprintf(), except for the output handle.
Yes, it's duplicate code, but most of the function is unpacking
the argument list and preparing it for WriteFile(), which has to be
done anyway.

R=golang-dev, alex.brainman
CC=golang-dev
https://golang.org/cl/6343047

src/cmd/dist/windows.c

index 0caee73f5364a266b2f607d5a654ab6ae4d07c6b..ec26f7872400c04cca28e0473e8c68a40b2d259c 100644 (file)
@@ -121,6 +121,22 @@ errstr(void)
        return bstr(&b);  // leak but we're dying anyway
 }
 
+static void
+errprintf(char *fmt, ...) {
+       va_list arg;
+       char *p;
+       DWORD n, w;
+
+       va_start(arg, fmt);
+       n = vsnprintf(NULL, 0, fmt, arg);
+       p = xmalloc(n+1);
+       vsnprintf(p, n+1, fmt, arg);
+       va_end(arg);
+       w = 0;
+       WriteFile(GetStdHandle(STD_ERROR_HANDLE), p, n, &w, 0);
+       xfree(p);
+}
+
 void
 xgetenv(Buf *b, char *name)
 {
@@ -709,7 +725,7 @@ fatal(char *msg, ...)
        vsnprintf(buf1, sizeof buf1, msg, arg);
        va_end(arg);
 
-       xprintf("go tool dist: %s\n", buf1);
+       errprintf("go tool dist: %s\n", buf1);
        
        bgwait();
        ExitProcess(1);