:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / lib / msvcrt / io / pipe.c
1 /* $Id$
2  *
3  * COPYRIGHT:   See COPYING in the top level directory
4  * PROJECT:     ReactOS system libraries
5  * FILE:        lib/crtdll/io/pipe.c
6  * PURPOSE:     Creates a pipe
7  * PROGRAMER:   DJ Delorie
8  * UPDATE HISTORY:
9  *              28/12/98: Appropriated for Reactos
10  */
11 #include <windows.h>
12 #include <msvcrt/io.h>
13 #include <msvcrt/errno.h>
14 #include <msvcrt/internal/file.h>
15
16
17 int _pipe(int _fildes[2], unsigned int size, int mode )
18 {
19   HANDLE hReadPipe, hWritePipe;
20   SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE};
21
22   if (mode & O_NOINHERIT)
23     sa.bInheritHandle = FALSE;
24
25   if (!CreatePipe(&hReadPipe,&hWritePipe,&sa,size))
26     return -1;
27
28   if ((_fildes[0] = __fileno_alloc(hReadPipe, mode)) < 0)
29   {
30     CloseHandle(hReadPipe);
31     CloseHandle(hWritePipe);
32     __set_errno(EMFILE);
33     return -1;
34   }
35
36   if ((_fildes[1] = __fileno_alloc(hWritePipe, mode)) < 0)
37   {
38     __fileno_close(_fildes[0]);
39     CloseHandle(hReadPipe);
40     CloseHandle(hWritePipe);
41     __set_errno(EMFILE);
42     return -1;
43   }
44   return 0;
45 }