Author: dreimer
Date: Wed Jan 27 23:13:26 2010
New Revision: 45288
URL:
http://svn.reactos.org/svn/reactos?rev=45288&view=rev
Log:
Update piperead to Version 0.3 (Jan Roeloffzen)
Modified:
trunk/reactos/tools/pipetools/piperead.cpp
Modified: trunk/reactos/tools/pipetools/piperead.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/pipetools/piperead.c…
==============================================================================
--- trunk/reactos/tools/pipetools/piperead.cpp [iso-8859-1] (original)
+++ trunk/reactos/tools/pipetools/piperead.cpp [iso-8859-1] Wed Jan 27 23:13:26 2010
@@ -8,9 +8,12 @@
#define WIN32_LEAN_AND_MEAN
+#include <errno.h>
#include <windows.h>
#include <stdio.h>
+#define PIPEREAD_VERSION "0.3"
+#define PIPEREAD_NOPIPE (-101)
// This definition currently missing in MinGW.
#ifndef FILE_FLAG_FIRST_PIPE_INSTANCE
@@ -42,7 +45,6 @@
DWORD error = GetLastError();
if (error == ERROR_PIPE_LISTENING) {
- fprintf(stderr,"INVALID_HANDLE_VALUE\n");
Sleep(1000);
} else if (error == ERROR_BROKEN_PIPE) {
CloseHandle(hPipe);
@@ -71,6 +73,7 @@
return 0;
}
+
static int pipeClient(char *path)
{
HANDLE hPipe=INVALID_HANDLE_VALUE;
@@ -96,9 +99,18 @@
break;
// Exit if an error other than ERROR_PIPE_BUSY occurs.
- if (GetLastError() != ERROR_PIPE_BUSY) {
- fprintf(stderr,"Could not open pipe. Error=%lu\n", GetLastError() );
- res = -1;
+ Err = GetLastError();
+ if (Err != ERROR_PIPE_BUSY) {
+ if (ERROR_FILE_NOT_FOUND == Err)
+ {
+ res = PIPEREAD_NOPIPE;
+ return res;
+ }
+ else
+ {
+ fprintf(stderr,"Could not open pipe %s. Error=%lu\n", path, Err );
+ res = -1;
+ }
break;
}
@@ -134,7 +146,6 @@
if ( ! fSuccess) {
fprintf(stderr, "ReadFile from pipe failed. Error=%lu\n", GetLastError()
);
- res = -5;
}
if (hPipe != INVALID_HANDLE_VALUE)
@@ -144,8 +155,29 @@
}
+static int fileClient(const char *path)
+{
+ int res = 0;
+ FILE *fin;
+ int c;
+
+ setvbuf(stdout, NULL, _IONBF, 0);
+ if (!(fin = fopen(path, "r"))) {
+ fprintf(stderr,"Could not fopen %s (%s)\n", path, strerror(errno) );
+ return -1;
+ }
+
+ while ((c = fgetc(fin)) != EOF) {
+ fputc(c, stdout);
+ }
+
+ fclose(fin);
+ return res;
+}
+
void usage(void)
{
+ fprintf(stderr, "piperead " PIPEREAD_VERSION "\n\n");
fprintf(stderr, "Usage: piperead [-c] <named pipe>\n");
fprintf(stderr, "-c means Client mode\n");
fprintf(stderr, "Example: piperead -c \\\\.\\pipe\\kdbg | log2lines -c\n\n");
@@ -193,6 +225,9 @@
if ( clientMode ) {
res = pipeClient(path);
+ if (res == PIPEREAD_NOPIPE) {
+ res = fileClient(pipe_name);
+ }
} else {
res = pipeServer(path);
}