Started piping implementation.
[reactos.git] / reactos / lib / msvcrt / io / pipe.c
1 /* $Id: pipe.c,v 1.2 2002/05/07 22:31:25 hbirr Exp $
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 }