You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by wr...@apache.org on 2002/02/27 18:38:20 UTC
cvs commit: httpd-2.0/support/win32 wintty.c
wrowe 02/02/27 09:38:20
Modified: support/win32 wintty.c
Log:
Must admit, my use case was focused on services. It seems that if we
had a console, we weren't reassigning stdhandles with AllocConsole().
Open the conin/conout very explicitly, and clean up some other cruft.
Revision Changes Path
1.5 +24 -14 httpd-2.0/support/win32/wintty.c
Index: wintty.c
===================================================================
RCS file: /home/cvs/httpd-2.0/support/win32/wintty.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- wintty.c 7 Aug 2001 15:50:25 -0000 1.4
+++ wintty.c 27 Feb 2002 17:38:20 -0000 1.5
@@ -86,7 +86,7 @@
"\t-v{erbose} error reporting (for debugging)\n"
"\t-? for this message\n\n";
-HANDLE herrout;
+HANDLE herrout = NULL;
BOOL verbose = FALSE;
void printerr(char *fmt, ...)
@@ -94,7 +94,7 @@
char str[1024];
va_list args;
DWORD len;
- if (!verbose)
+ if (!verbose || !herrout)
return;
va_start(args, fmt);
wvsprintf(str, fmt, args);
@@ -103,6 +103,11 @@
DWORD WINAPI feedback(LPVOID pipeout);
+typedef struct feedback_args_t {
+ HANDLE in;
+ HANDLE out;
+} feedback_args_t;
+
int main(int argc, char** argv)
{
char str[1024], *contitle;
@@ -112,6 +117,7 @@
HANDLE conin, conout;
HANDLE pipein, pipeout;
HANDLE hstdin, hstdout, hstderr;
+ feedback_args_t feed;
DWORD conmode;
DWORD newinmode = 0, notinmode = 0;
DWORD newoutmode = 0, notoutmode = 0;
@@ -169,6 +175,7 @@
herrout = hstderr = GetStdHandle(STD_ERROR_HANDLE);
if (!hstderr || hstderr == INVALID_HANDLE_VALUE) {
printerr("GetStdHandle(STD_ERROR_HANDLE) failed (%d)\n", GetLastError());
+ herrout = NULL;
}
else if (!DuplicateHandle(hproc, hstderr,
hproc, &herrout, 0, FALSE,
@@ -258,10 +265,15 @@
printerr("SetConsoleTitle() failed (%d)\n", GetLastError());
}
- conout = GetStdHandle(STD_OUTPUT_HANDLE);
+ conout = CreateFile("CONOUT$", GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ FALSE, OPEN_EXISTING, 0, NULL);
if (!conout || conout == INVALID_HANDLE_VALUE) {
printerr("GetStdHandle(STD_OUTPUT_HANDLE) failed (%d)\n", GetLastError());
}
+ else if (!herrout) {
+ herrout = conout;
+ }
else if (!GetConsoleMode(conout, &conmode)) {
printerr("GetConsoleMode(CONOUT) failed (%d)\n", GetLastError());
}
@@ -269,7 +281,9 @@
printerr("SetConsoleMode(CONOUT, 0x%x) failed (%d)\n", conmode, GetLastError());
}
- conin = GetStdHandle(STD_INPUT_HANDLE);
+ conin = CreateFile("CONIN$", GENERIC_READ,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ FALSE, OPEN_EXISTING, 0, NULL);
if (!conin || conin == INVALID_HANDLE_VALUE) {
printerr("GetStdHandle(STD_INPUT_HANDLE) failed (%d)\n", GetLastError());
}
@@ -280,7 +294,9 @@
printerr("SetConsoleMode(CONIN, 0x%x) failed (%d)\n", conmode, GetLastError());
}
- thread = CreateThread(NULL, 0, feedback, (LPVOID)pipeout, 0, &tid);
+ feed.in = conin;
+ feed.out = pipeout;
+ thread = CreateThread(NULL, 0, feedback, (LPVOID)&feed, 0, &tid);
while (ReadFile(pipein, str, sizeof(str), &len, NULL))
if (!len || !WriteFile(conout, str, len, &len, NULL))
@@ -318,18 +334,12 @@
DWORD WINAPI feedback(LPVOID arg)
{
- HANDLE conin;
- HANDLE pipeout = (HANDLE)arg;
+ feedback_args_t *feed = (feedback_args_t*)arg;
char *str[1024];
DWORD len;
- conin = GetStdHandle(STD_INPUT_HANDLE);
- if (!conin) {
- len = GetLastError();
- }
-
- while (ReadFile(conin, str, sizeof(str), &len, NULL))
- if (!len || !WriteFile(pipeout, str, len, &len, NULL))
+ while (ReadFile(feed->in, str, sizeof(str), &len, NULL))
+ if (!len || !WriteFile(feed->out, str, len, &len, NULL))
break;
printerr("[EOF] from Console (%d)\n", GetLastError());