UbixOS  2.0
kern_pipe.c
Go to the documentation of this file.
1 /*-
2  * Copyright (c) 2002-2018 The UbixOS Project.
3  * All rights reserved.
4  *
5  * This was developed by Christopher W. Olsen for the UbixOS Project.
6  *
7  * Redistribution and use in source and binary forms, with or without modification, are permitted
8  * provided that the following conditions are met:
9  *
10  * 1) Redistributions of source code must retain the above copyright notice, this list of
11  * conditions, the following disclaimer and the list of authors.
12  * 2) Redistributions in binary form must reproduce the above copyright notice, this list of
13  * conditions, the following disclaimer and the list of authors in the documentation and/or
14  * other materials provided with the distribution.
15  * 3) Neither the name of the UbixOS Project nor the names of its contributors may be used to
16  * endorse or promote products derived from this software without specific prior written
17  * permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
20  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
22  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
24  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
26  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #include <sys/thread.h>
30 #include <sys/sysproto_posix.h>
31 #include <sys/pipe.h>
32 #include <sys/descrip.h>
33 #include <sys/video.h>
34 #include <string.h>
35 
36 int sys_pipe2(struct thread *thr, struct sys_pipe2_args *args) {
37  int error = 0x0;
38 
39  int fd1 = 0x0;
40  int fd2 = 0x0;
41 
42  struct file *nfp1 = 0x0;
43  struct file *nfp2 = 0x0;
44 
45  struct pipeInfo *pipeDesc = kmalloc(sizeof(struct pipeInfo));
46 
47  memset(pipeDesc, 0x0, sizeof(struct pipeInfo));
48 
49  error = falloc(thr, &nfp1, &fd1);
50  error = falloc(thr, &nfp2, &fd2);
51 
52  nfp1->data = pipeDesc;
53  nfp2->data = pipeDesc;
54 
55  nfp1->fd_type = 3;
56  nfp2->fd_type = 3;
57 
58  pipeDesc->rFD = fd1;
59  pipeDesc->rfdCNT = 2;
60  pipeDesc->wFD = fd2;
61  pipeDesc->wfdCNT = 2;
62 
63  args->fildes[0] = fd1;
64  args->fildes[1] = fd2;
65 
66  thr->td_retval[0] = 0;
67 
68  return (0x0);
69 }
sys_pipe2_args
Definition: sysproto_posix.h:757
sys_pipe2
int sys_pipe2(struct thread *thr, struct sys_pipe2_args *args)
Definition: kern_pipe.c:36
sys_pipe2_args::fildes
int * fildes
Definition: sysproto_posix.h:759
file::data
void * data
Definition: descrip.h:74
string.h
video.h
sysproto_posix.h
file
Definition: descrip.h:67
thread
Definition: thread.h:40
pipeInfo::rfdCNT
int rfdCNT
Definition: pipe.h:47
falloc
int falloc(struct thread *, struct file **, int *)
Definition: descrip.c:97
file::fd_type
int fd_type
Definition: descrip.h:72
pipe.h
pipeInfo::rFD
int rFD
Definition: pipe.h:46
thread::td_retval
int td_retval[2]
Definition: thread.h:41
pipeInfo::wFD
int wFD
Definition: pipe.h:48
kmalloc
void * kmalloc(uInt32 len)
Definition: kmalloc.c:241
descrip.h
memset
void * memset(void *dst, int c, size_t length)
pipeInfo
Definition: pipe.h:45
thread.h
pipeInfo::wfdCNT
int wfdCNT
Definition: pipe.h:49