File: tg-pipe2.diff

package info (click to toggle)
glibc 2.24-10
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 223,412 kB
  • sloc: ansic: 991,967; asm: 261,800; sh: 10,385; makefile: 9,710; cpp: 4,169; python: 3,971; perl: 2,254; awk: 1,753; pascal: 1,521; yacc: 291; sed: 80
file content (134 lines) | stat: -rw-r--r-- 4,503 bytes parent folder | download | duplicates (14)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
From: Thomas Schwinge <thomas@schwinge.name>
Subject: [PATCH] pipe2

2008-12-17  Thomas Schwinge  <tschwinge@gnu.org>

	pipe2 for GNU Hurd.
	* sysdeps/mach/hurd/pipe2.c: New file, copy from pipe.c.  Evolve it to
	implement __pipe2.
	* sysdeps/mach/hurd/pipe.c (__pipe): Reimplement using __pipe2.
	* sysdeps/mach/hurd/kernel-features.h (__ASSUME_PIPE2): Define.

---
 sysdeps/mach/hurd/kernel-features.h |  1 +
 sysdeps/mach/hurd/pipe.c            | 21 +------------
 sysdeps/mach/hurd/pipe2.c           | 61 +++++++++++++++++++++++++++++++++++++
 3 files changed, 63 insertions(+), 20 deletions(-)

diff --git a/sysdeps/mach/hurd/kernel-features.h b/sysdeps/mach/hurd/kernel-features.h
index 2b10327..d603be8 100644
--- a/sysdeps/mach/hurd/kernel-features.h
+++ b/sysdeps/mach/hurd/kernel-features.h
@@ -24,3 +24,4 @@
 #define __ASSUME_DUP3		1
 #define __ASSUME_ACCEPT4	1
 #define __ASSUME_SOCK_CLOEXEC	1
+#define __ASSUME_PIPE2		1
diff --git a/sysdeps/mach/hurd/pipe.c b/sysdeps/mach/hurd/pipe.c
index 5f91648..24a74ca 100644
--- a/sysdeps/mach/hurd/pipe.c
+++ b/sysdeps/mach/hurd/pipe.c
@@ -15,9 +15,6 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <errno.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
 #include <unistd.h>
 
 /* Create a one-way communication channel (pipe).
@@ -28,23 +25,7 @@
 int
 __pipe (int fds[2])
 {
-  int save_errno = errno;
-  int result;
-
-  /* The magic S_IFIFO protocol tells the pflocal server to create
-     sockets which report themselves as FIFOs, as POSIX requires for
-     pipes.  */
-  result = __socketpair (PF_LOCAL, SOCK_STREAM, S_IFIFO, fds);
-  if (result == -1 && errno == EPROTONOSUPPORT)
-    {
-      /* We contacted an "old" pflocal server that doesn't support the
-         magic S_IFIFO protocol.
-	 FIXME: Remove this junk somewhere in the future.  */
-      __set_errno (save_errno);
-      return __socketpair (PF_LOCAL, SOCK_STREAM, 0, fds);
-    }
-
-  return result;
+  return __pipe2 (fds, 0);
 }
 libc_hidden_def (__pipe)
 weak_alias (__pipe, pipe)
diff --git a/sysdeps/mach/hurd/pipe2.c b/sysdeps/mach/hurd/pipe2.c
new file mode 100644
index 0000000..c2e5f03
--- /dev/null
+++ b/sysdeps/mach/hurd/pipe2.c
@@ -0,0 +1,61 @@
+/* Copyright (C) 1992, 1993, 1994, 1995, 1996, 1999, 2000, 2002, 2008 Free
+   Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <errno.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <fcntl-internal.h>
+#include <hurd.h>
+
+/* Create a one-way communication channel (pipe).
+   Actually the channel is two-way on the Hurd.
+   If successful, two file descriptors are stored in FDS;
+   bytes written on FDS[1] can be read from FDS[0].
+   Apply FLAGS to the new file descriptors.
+   Returns 0 if successful, -1 if not.  */
+int
+__pipe2 (int fds[2], int flags)
+{
+  int save_errno = errno;
+  int result;
+
+  if (flags & ~(O_CLOEXEC | O_NONBLOCK))
+    return __hurd_fail (EINVAL);
+
+  flags = o_to_sock_flags (flags);
+
+  /* The magic S_IFIFO protocol tells the pflocal server to create
+     sockets which report themselves as FIFOs, as POSIX requires for
+     pipes.  */
+  result = __socketpair (PF_LOCAL, SOCK_STREAM | flags, S_IFIFO, fds);
+  if (result == -1 && errno == EPROTONOSUPPORT)
+    {
+      /* We contacted an "old" pflocal server that doesn't support the
+         magic S_IFIFO protocol.
+	 FIXME: Remove this junk somewhere in the future.  */
+      __set_errno (save_errno);
+      return __socketpair (PF_LOCAL, SOCK_STREAM | flags, 0, fds);
+    }
+
+  return result;
+}
+weak_alias (__pipe2, pipe2)
-- 
tg: (6965864..) t/pipe2 (depends on: t/socketpair_flags)