Added named pipe to linux port of mstpcap.

This commit is contained in:
skarg
2009-10-24 16:24:33 +00:00
parent 2917c9abf0
commit 857d0c185d
+37 -10
View File
@@ -308,18 +308,42 @@ static void named_pipe_create(char *name)
size_t data_write(const void *ptr, size_t size, size_t nitems) size_t data_write(const void *ptr, size_t size, size_t nitems)
{ {
DWORD cbWritten = 0; DWORD cbWritten = 0;
(void)WriteFile( if (hPipe != INVALID_HANDLE_VALUE) {
hPipe, /* handle to pipe */ (void)WriteFile(
ptr, /* buffer to write from */ hPipe, /* handle to pipe */
size*nitems, /* number of bytes to write */ ptr, /* buffer to write from */
&cbWritten, /* number of bytes written */ size*nitems, /* number of bytes to write */
NULL); /* not overlapped I/O */ &cbWritten, /* number of bytes written */
NULL); /* not overlapped I/O */
}
return fwrite(ptr, size, nitems, pFile); return fwrite(ptr, size, nitems, pFile);
} }
#else #else
static int FD_Pipe = -1;
static void named_pipe_create(char *name)
{
int rv = 0;
rv = mkfifo(name, 0666);
if (( rv == -1) && (errno != EEXIST))
{
perror("Error creating named pipe");
exit(1);
}
FD_Pipe = open(name, O_WRONLY);
if (FD_Pipe == -1) {
perror("Error connecting to named pipe");
exit(1);
}
}
size_t data_write(const void *ptr, size_t size, size_t nitems) size_t data_write(const void *ptr, size_t size, size_t nitems)
{ {
ssize_t bytes = 0;
if (FD_Pipe != -1) {
bytes = write(FD_Pipe, ptr, size*nitems);
bytes = bytes;
}
return fwrite(ptr, size, nitems, pFile); return fwrite(ptr, size, nitems, pFile);
} }
#endif #endif
@@ -445,6 +469,9 @@ static void sig_int(
int signo) int signo)
{ {
(void) signo; (void) signo;
if (FD_Pipe != -1) {
close(FD_Pipe);
}
exit(0); exit(0);
} }
@@ -519,12 +546,12 @@ int main(
#if defined(_WIN32) #if defined(_WIN32)
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_PROCESSED_INPUT); SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_PROCESSED_INPUT);
SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlCHandler, TRUE); SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlCHandler, TRUE);
if (argc > 3) {
named_pipe_create(argv[3]);
}
#else #else
signal_init(); signal_init();
#endif #endif
if (argc > 3) {
named_pipe_create(argv[3]);
}
filename_create_new(); filename_create_new();
/* run forever */ /* run forever */
for (;;) { for (;;) {