1 
2 /*
3  * Copyright (c) 2002, Intel Corporation.
4  * Created by:  julie.n.fleischer REMOVE-THIS AT intel DOT com
5  * This file is licensed under the GPL license.  For the full content
6  * of this license, see the COPYING file at the top level of this
7  * source tree.
8  */
9 
10 
11 #include <sys/select.h>
12 
13 
sync_pipe_create(int fd[])14 int sync_pipe_create(int fd[])
15 {
16         return pipe (fd);
17 }
18 
sync_pipe_close(int fd[])19 int sync_pipe_close(int fd[])
20 {
21         int r = 0;
22 
23         if (fd[0] != -1)
24                 r = close (fd[0]);
25         if (fd[1] != -1)
26                 r |= close (fd[1]);
27         return r;
28 }
29 
sync_pipe_wait(int fd[])30 int sync_pipe_wait(int fd[])
31 {
32         char buf;
33         int r;
34 
35         if (fd[1] != -1) {
36                 close (fd[1]);
37                 fd[1] = -1;
38         }
39 
40         r = read (fd[0], &buf, 1);
41 
42         if ((r != 1) || (buf != 'A'))
43                 return -1;
44         return 0;
45 }
46 
sync_pipe_wait_select(int fd[],long tv_sec)47 int sync_pipe_wait_select(int fd[], long tv_sec)
48 {
49         int r;
50        fd_set rfds;
51        struct timeval tv;
52        int err;
53 
54        tv.tv_sec = tv_sec;
55        tv.tv_usec = 0;
56 
57         if (fd[1] != -1) {
58                 close (fd[1]);
59                 fd[1] = -1;
60         }
61 
62        FD_ZERO(&rfds);
63        FD_SET(fd[0], &rfds);
64 
65        r = select(fd[0] + 1, &rfds, NULL, NULL, &tv);
66        err = errno;
67 
68        if (FD_ISSET(fd[0], &rfds)) {
69                return sync_pipe_wait(fd);
70        }
71 
72        return r ? err : -ETIMEDOUT;
73 }
74 
75 
sync_pipe_notify(int fd[])76 int sync_pipe_notify(int fd[])
77 {
78         char buf = 'A';
79         int r;
80 
81         if (fd[0] != -1) {
82                 close (fd[0]);
83                 fd[0] = -1;
84         }
85 
86         r = write (fd[1], &buf, 1);
87 
88         if (r != 1)
89                 return -1;
90         return 0;
91 }
92