From: Rolf K. <lab...@us...> - 2004-09-18 21:36:00
|
Update of /cvsroot/opengtoolkit/pipe/c_source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22934/c_source Modified Files: pipes.c Log Message: Some minor modifications to the unix code. Not working nor tested yet. Index: pipes.c =================================================================== RCS file: /cvsroot/opengtoolkit/pipe/c_source/pipes.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** pipes.c 9 Apr 2004 22:55:51 -0000 1.7 --- pipes.c 18 Sep 2004 21:35:50 -0000 1.8 *************** *** 104,108 **** /* There is no server to connect to, so create our own server */ ! handle = CreateNamedPipe(name, dwMode, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_NOWAIT, PIPE_UNLIMITED_INSTANCES, 1024, 1024, NMPWAIT_USE_DEFAULT_WAIT, NULL); } --- 104,108 ---- /* There is no server to connect to, so create our own server */ ! handle = CreateNamedPipe(name, dwMode, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, 1024, 1024, NMPWAIT_USE_DEFAULT_WAIT, NULL); } *************** *** 116,121 **** #elif defined(Unix) ! char pmode; ! pipe_t handle; if (mode > kWriteMode) --- 116,120 ---- #elif defined(Unix) ! mode_t mode; if (mode > kWriteMode) *************** *** 125,147 **** { case kReadMode: ! pMode = 'r'; break; case kWriteMode: ! pMode = 'w'; break; } /* Attempt to create the named pipe */ ! handle = popen(name, pMode); ! if (handle <= 0) { err = UnixToLVErr(errno); - *fd = 0; } ! else { ! *fd = handle; } #else err = mgNotImplementd: --- 124,154 ---- { case kReadMode: ! mode = S_IRUSR; break; case kWriteMode: ! mode = S_IWUSR; break; } /* Attempt to create the named pipe */ ! if (mkfifo(name, S_IWUSR | S_IRUSR | S_IRGRP | S_IWGRP | S_IROTH) < 0) { err = UnixToLVErr(errno); } ! ! if (!err || err == fDupPath) { ! err = noErr; ! *fd = open(name, O_NONBLOCK); ! if (*fd < 0) ! { ! err = UnixToLVErr(errno); ! } } + if (err) + { + *fd = 0; + } #else err = mgNotImplementd: *************** *** 163,166 **** --- 170,177 ---- return mgArgErr; + *fdIn = *fdOut = *fdErr = 0; + + DebugBreaking(); + saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); saAttr.lpSecurityDescriptor = NULL; *************** *** 223,236 **** /* Set a read handle to the pipe to be STDERR. */ ! if (!SetStdHandle(STD_ERROR_HANDLE, hChildStderrRd)) goto error; /* Duplicate the write handle to the pipe so it is not inherited. */ ! if (!DuplicateHandle(GetCurrentProcess(), hChildStderrWr, GetCurrentProcess(), (HANDLE*)fdErr, 0, FALSE, DUPLICATE_SAME_ACCESS)) goto error; ! CloseHandle(hChildStderrWr); hChildStderrRd = 0; } --- 234,247 ---- /* Set a read handle to the pipe to be STDERR. */ ! if (!SetStdHandle(STD_ERROR_HANDLE, hChildStderrWr)) goto error; /* Duplicate the write handle to the pipe so it is not inherited. */ ! if (!DuplicateHandle(GetCurrentProcess(), hChildStderrRd, GetCurrentProcess(), (HANDLE*)fdErr, 0, FALSE, DUPLICATE_SAME_ACCESS)) goto error; ! CloseHandle(hChildStderrRd); hChildStderrRd = 0; } *************** *** 241,257 **** goto error; ! /* After process creation, restore the saved STDIN and STDOUT. */ if (mode == kReadMode || mode == kReadWriteMode) if (!SetStdHandle(STD_INPUT_HANDLE, hSaveStdin)) goto error; if (mode == kWriteMode || mode == kReadWriteMode) if (!SetStdHandle(STD_OUTPUT_HANDLE, hSaveStdout)) goto error; if (mode == kWriteMode || mode == kReadWriteMode) if (!SetStdHandle(STD_OUTPUT_HANDLE, hSaveStdout)) goto error; ! return noErr; error: --- 252,280 ---- goto error; ! /* After process creation, restore the saved STDIN. STDOUT, ! and STDERR. Also close the intermediate handle. */ if (mode == kReadMode || mode == kReadWriteMode) + { + CloseHandle(hChildStdinRd); + hChildStdinRd = 0; if (!SetStdHandle(STD_INPUT_HANDLE, hSaveStdin)) goto error; + } if (mode == kWriteMode || mode == kReadWriteMode) + { + CloseHandle(hChildStdoutWr); + hChildStdoutWr = 0; if (!SetStdHandle(STD_OUTPUT_HANDLE, hSaveStdout)) goto error; + } if (mode == kWriteMode || mode == kReadWriteMode) + { + CloseHandle(hChildStderrWr); + hChildStderrWr = 0; if (!SetStdHandle(STD_OUTPUT_HANDLE, hSaveStdout)) goto error; ! } return noErr; error: *************** *** 262,265 **** --- 285,290 ---- if (hChildStdoutWr) CloseHandle(hChildStdoutWr); + if (*fdOut) + CloseHandle(*(HANDLE*)fdOut); if (hSaveStdin) CloseHandle(hSaveStdin); *************** *** 268,271 **** --- 293,298 ---- if (hChildStdinWr) CloseHandle(hChildStdinWr); + if (*fdIn) + CloseHandle(*(HANDLE*)fdIn); if (hSaveStderr) CloseHandle(hSaveStderr); *************** *** 274,280 **** --- 301,335 ---- if (hChildStderrWr) CloseHandle(hChildStderrWr); + if (*fdErr) + CloseHandle(*(HANDLE*)fdErr); return dvOpenErr; #elif defined(Unix) + char *pmode; + pipe_t handle; + + if (mode > kWriteMode) + return mgArgErr; + switch (mode) + { + case kReadMode: + pMode = "r"; + break; + case kWriteMode: + pMode = "w"; + break; + } + + /* Attempt to create the named pipe */ + handle = popen(name, pMode); + if (handle <= 0) + { + err = UnixToLVErr(errno); + *fd = 0; + } + else + { + *fd = handle; + } #else err = mgNotImplementd: |