[resend] winetest: run with -mwindows
Ferenc Wagner
wferi at afavant.elte.hu
Mon Mar 29 08:56:39 CST 2004
Hi Alexandre,
Is anything wrong with this patch?
ChangeLog:
Don't expect stdout be usable after exchanging file
descriptors under it.
Index: main.c
===================================================================
RCS file: /home/wine/wine/programs/winetest/main.c,v
retrieving revision 1.7
diff -u -r1.7 main.c
--- main.c 20 Mar 2004 19:21:39 -0000 1.7
+++ main.c 24 Mar 2004 13:30:26 -0000
@@ -337,8 +337,6 @@
SetErrorMode (SEM_FAILCRITICALERRORS);
if (!(wineloader = getenv("WINELOADER"))) wineloader = "wine";
- if (setvbuf (stdout, NULL, _IONBF, 0))
- report (R_FATAL, "Can't unbuffer output.");
tempdir = tempnam (0, "wct");
if (!tempdir)
Index: util.c
===================================================================
RCS file: /home/wine/wine/programs/winetest/util.c,v
retrieving revision 1.4
diff -u -r1.4 util.c
--- util.c 19 Mar 2004 19:15:23 -0000 1.4
+++ util.c 24 Mar 2004 13:30:26 -0000
@@ -19,6 +19,7 @@
*
*/
#include <windows.h>
+#include <unistd.h>
#include <errno.h>
#include "winetest.h"
@@ -39,26 +40,14 @@
return p;
}
-void xprintf (const char *fmt, ...)
-{
- va_list ap;
-
- va_start (ap, fmt);
- if (vprintf (fmt, ap) < 0)
- report (R_FATAL, "Can't write logs: %d", errno);
- va_end (ap);
-}
-
-char *vstrmake (size_t *lenp, va_list ap)
+char *vstrfmtmake (size_t *lenp, const char *fmt, va_list ap)
{
- char *fmt;
size_t size = 1000;
char *p, *q;
int n;
p = malloc (size);
if (!p) return NULL;
- fmt = va_arg (ap, char*);
while (1) {
n = vsnprintf (p, size, fmt, ap);
if (n < 0) size *= 2; /* Windows */
@@ -75,6 +64,14 @@
return p;
}
+char *vstrmake (size_t *lenp, va_list ap)
+{
+ const char *fmt;
+
+ fmt = va_arg (ap, const char*);
+ return vstrfmtmake (lenp, fmt, ap);
+}
+
char *strmake (size_t *lenp, ...)
{
va_list ap;
@@ -85,6 +82,26 @@
if (!p) report (R_FATAL, "Out of memory.");
va_end (ap);
return p;
+}
+
+void xprintf (const char *fmt, ...)
+{
+ va_list ap;
+ size_t size;
+ ssize_t written;
+ char *buffer, *head;
+
+ va_start (ap, fmt);
+ buffer = vstrfmtmake (&size, fmt, ap);
+ head = buffer;
+ va_end (ap);
+ while ((written = write (1, head, size)) != size) {
+ if (written == -1)
+ report (R_FATAL, "Can't write logs: %d", errno);
+ head += written;
+ size -= written;
+ }
+ free (buffer);
}
char *
More information about the wine-patches
mailing list