Print only the complete information if the fd is valid itself (in is_valid_fd).
[reactos.git] / reactos / lib / crt / io / pipe.c
1 /* $Id$
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS system libraries
5 * FILE: lib/msvcrt/io/pipe.c
6 * PURPOSE: Creates a pipe
7 * PROGRAMER: DJ Delorie
8 * UPDATE HISTORY:
9 * 28/12/98: Appropriated for Reactos
10 */
11
12 #include "precomp.h"
13 #include <io.h>
14 #include <errno.h>
15 #include <internal/file.h>
16
17 #define NDEBUG
18 #include <internal/debug.h>
19
20
21 /*
22 * @implemented
23 */
24 int _pipe(int _fildes[2], unsigned int size, int mode )
25 {
26 HANDLE hReadPipe, hWritePipe;
27 SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE};
28
29 TRACE("_pipe((%i,%i), %ui, %i)", _fildes[0], _fildes[1], size, mode);
30
31 if (mode & O_NOINHERIT)
32 sa.bInheritHandle = FALSE;
33
34 if (!CreatePipe(&hReadPipe,&hWritePipe,&sa,size)) {
35 _dosmaperr(GetLastError());
36 return( -1);
37 }
38
39 if ((_fildes[0] = alloc_fd(hReadPipe, split_oflags(mode))) < 0)
40 {
41 CloseHandle(hReadPipe);
42 CloseHandle(hWritePipe);
43 __set_errno(EMFILE);
44 return(-1);
45 }
46
47 if ((_fildes[1] = alloc_fd(hWritePipe, split_oflags(mode))) < 0)
48 {
49 free_fd(_fildes[0]);
50 CloseHandle(hReadPipe);
51 CloseHandle(hWritePipe);
52 __set_errno(EMFILE);
53 return(-1);
54 }
55 return(0);
56 }