commit d864419
Michael Forney
·
2025-02-02 09:46:07 +0000 UTC
parent 28abe26
bubblewrap: Update to 0.11.0
8 files changed,
+305,
-64
+1,
-1
1@@ -1 +1 @@
2-#define PACKAGE_STRING "bubblewrap 0.8.0"
3+#define PACKAGE_STRING "bubblewrap 0.11.0"
1@@ -1,4 +1,4 @@
2-From f399ecdc5cc4a3d6563b9ea3c8984c3832d655ea Mon Sep 17 00:00:00 2001
3+From 5b70e5f6af8d0688b8947c649acc2904cce96d3b Mon Sep 17 00:00:00 2001
4 From: Michael Forney <mforney@mforney.org>
5 Date: Tue, 4 Jul 2023 10:44:15 -0700
6 Subject: [PATCH] utils: Avoid unnecessary VLAs
7@@ -8,18 +8,18 @@ Subject: [PATCH] utils: Avoid unnecessary VLAs
8 1 file changed, 4 insertions(+), 6 deletions(-)
9
10 diff --git a/utils.c b/utils.c
11-index 693273b..6845283 100644
12+index 51875ae..8ab89bb 100644
13 --- a/utils.c
14 +++ b/utils.c
15-@@ -727,15 +727,14 @@ send_pid_on_socket (int socket)
16+@@ -758,15 +758,14 @@ send_pid_on_socket (int sockfd)
17 char buf[1] = { 0 };
18 struct msghdr msg = {};
19 struct iovec iov = { buf, sizeof (buf) };
20 - const ssize_t control_len_snd = CMSG_SPACE(sizeof(struct ucred));
21-- char control_buf_snd[control_len_snd];
22-+ char control_buf_snd[CMSG_SPACE(sizeof(struct ucred))];
23+- _Alignas(struct cmsghdr) char control_buf_snd[control_len_snd];
24++ _Alignas(struct cmsghdr) char control_buf_snd[CMSG_SPACE(sizeof(struct ucred))];
25 struct cmsghdr *cmsg;
26- struct ucred *cred;
27+ struct ucred cred;
28
29 msg.msg_iov = &iov;
30 msg.msg_iovlen = 1;
31@@ -29,13 +29,13 @@ index 693273b..6845283 100644
32
33 cmsg = CMSG_FIRSTHDR(&msg);
34 cmsg->cmsg_level = SOL_SOCKET;
35-@@ -769,14 +768,13 @@ read_pid_from_socket (int socket)
36+@@ -800,14 +799,13 @@ read_pid_from_socket (int sockfd)
37 char recv_buf[1] = { 0 };
38 struct msghdr msg = {};
39 struct iovec iov = { recv_buf, sizeof (recv_buf) };
40 - const ssize_t control_len_rcv = CMSG_SPACE(sizeof(struct ucred));
41-- char control_buf_rcv[control_len_rcv];
42-+ char control_buf_rcv[CMSG_SPACE(sizeof(struct ucred))];
43+- _Alignas(struct cmsghdr) char control_buf_rcv[control_len_rcv];
44++ _Alignas(struct cmsghdr) char control_buf_rcv[CMSG_SPACE(sizeof(struct ucred))];
45 struct cmsghdr* cmsg;
46
47 msg.msg_iov = &iov;
48@@ -44,8 +44,8 @@ index 693273b..6845283 100644
49 - msg.msg_controllen = control_len_rcv;
50 + msg.msg_controllen = sizeof (control_buf_rcv);
51
52- if (recvmsg (socket, &msg, 0) < 0)
53+ if (TEMP_FAILURE_RETRY (recvmsg (sockfd, &msg, 0)) < 0)
54 die_with_error ("Can't read pid from socket");
55 --
56-2.37.3
57+2.44.0
58
1@@ -1,4 +1,4 @@
2-From 21b0b65179640a795394a9664862d797aaca9120 Mon Sep 17 00:00:00 2001
3+From c1dc134f5f2591d364907a2e6102848d76c762a7 Mon Sep 17 00:00:00 2001
4 From: Michael Forney <mforney@mforney.org>
5 Date: Tue, 4 Jul 2023 18:57:02 -0700
6 Subject: [PATCH] Break up long string literal
7@@ -8,18 +8,18 @@ Subject: [PATCH] Break up long string literal
8 1 file changed, 2 insertions(+)
9
10 diff --git a/bubblewrap.c b/bubblewrap.c
11-index 8322ea0..ceb4beb 100644
12+index f8728c7..d834618 100644
13 --- a/bubblewrap.c
14 +++ b/bubblewrap.c
15-@@ -339,6 +339,8 @@ usage (int ecode, FILE *out)
16+@@ -340,6 +340,8 @@ usage (int ecode, FILE *out)
17 " --dev-bind-try SRC DEST Equal to --dev-bind but ignores non-existent SRC\n"
18 " --ro-bind SRC DEST Bind mount the host path SRC readonly on DEST\n"
19 " --ro-bind-try SRC DEST Equal to --ro-bind but ignores non-existent SRC\n"
20 + );
21 + fprintf (out,
22+ " --bind-fd FD DEST Bind open directory or path fd on DEST\n"
23+ " --ro-bind-fd FD DEST Bind open directory or path fd read-only on DEST\n"
24 " --remount-ro DEST Remount DEST as readonly; does not recursively remount\n"
25- " --exec-label LABEL Exec label for the sandbox\n"
26- " --file-label LABEL File label for temporary sandbox content\n"
27 --
28-2.37.3
29+2.44.0
30
R pkg/bubblewrap/patch/0004-Use-external-string-to-cap-function.patch =>
pkg/bubblewrap/patch/0003-Use-external-string-to-cap-function.patch
+12,
-11
1@@ -1,14 +1,14 @@
2-From 1939348d3a1e8238464cd4c52743b04fa52ebed1 Mon Sep 17 00:00:00 2001
3+From 0859d2570ddc7ff9ff5c7dc1309dea88eef2168a Mon Sep 17 00:00:00 2001
4 From: Michael Forney <mforney@mforney.org>
5 Date: Tue, 4 Jul 2023 19:20:51 -0700
6 Subject: [PATCH] Use external string-to-cap function
7
8 ---
9- bubblewrap.c | 15 ++++++++++-----
10- 1 file changed, 10 insertions(+), 5 deletions(-)
11+ bubblewrap.c | 16 +++++++++++-----
12+ 1 file changed, 11 insertions(+), 5 deletions(-)
13
14 diff --git a/bubblewrap.c b/bubblewrap.c
15-index 608009d..71c8bd0 100644
16+index d834618..bc53891 100644
17 --- a/bubblewrap.c
18 +++ b/bubblewrap.c
19 @@ -30,8 +30,8 @@
20@@ -21,17 +21,18 @@ index 608009d..71c8bd0 100644
21 #include <linux/sched.h>
22 #include <linux/seccomp.h>
23 #include <linux/filter.h>
24-@@ -44,6 +44,9 @@
25+@@ -44,6 +44,10 @@
26 #define CLONE_NEWCGROUP 0x02000000 /* New cgroup namespace */
27 #endif
28
29 +int capset(void *, void *);
30 +int capget(void *, void *);
31 +int cap_from_name(const char *);
32-
33++
34 /* We limit the size of a tmpfs to half the architecture's address space,
35 * to avoid hitting arbitrary limits in the kernel.
36-@@ -2358,7 +2361,7 @@ parse_args_recurse (int *argcp,
37+ * For example, on at least one x86_64 machine, the actual limit seems to be
38+@@ -2604,7 +2608,7 @@ parse_args_recurse (int *argcp,
39 }
40 else if (strcmp (arg, "--cap-add") == 0)
41 {
42@@ -40,7 +41,7 @@ index 608009d..71c8bd0 100644
43 if (argc < 2)
44 die ("--cap-add takes an argument");
45
46-@@ -2370,7 +2373,8 @@ parse_args_recurse (int *argcp,
47+@@ -2616,7 +2620,8 @@ parse_args_recurse (int *argcp,
48 }
49 else
50 {
51@@ -50,7 +51,7 @@ index 608009d..71c8bd0 100644
52 die ("unknown cap: %s", argv[1]);
53
54 if (cap < 32)
55-@@ -2384,7 +2388,7 @@ parse_args_recurse (int *argcp,
56+@@ -2630,7 +2635,7 @@ parse_args_recurse (int *argcp,
57 }
58 else if (strcmp (arg, "--cap-drop") == 0)
59 {
60@@ -59,7 +60,7 @@ index 608009d..71c8bd0 100644
61 if (argc < 2)
62 die ("--cap-drop takes an argument");
63
64-@@ -2396,7 +2400,8 @@ parse_args_recurse (int *argcp,
65+@@ -2642,7 +2647,8 @@ parse_args_recurse (int *argcp,
66 }
67 else
68 {
69@@ -70,5 +71,5 @@ index 608009d..71c8bd0 100644
70
71 if (cap < 32)
72 --
73-2.37.3
74+2.44.0
75
1@@ -0,0 +1,238 @@
2+From bbe8e2f75800633c251adbb34f7f9a1632a0d22a Mon Sep 17 00:00:00 2001
3+From: Michael Forney <mforney@mforney.org>
4+Date: Sun, 2 Feb 2025 01:34:54 -0800
5+Subject: [PATCH] Revert "Handle EINTR when doing I/O on files or sockets"
6+
7+This reverts commit 0c9646573f140d415cf790310ed17c2ab89f64a3.
8+---
9+ bind-mount.c | 2 +-
10+ bubblewrap.c | 26 +++++++++++++-------------
11+ network.c | 6 +++---
12+ utils.c | 16 ++++++++--------
13+ 4 files changed, 25 insertions(+), 25 deletions(-)
14+
15+diff --git a/bind-mount.c b/bind-mount.c
16+index a2e1ac6..c1aa9ce 100644
17+--- a/bind-mount.c
18++++ b/bind-mount.c
19+@@ -405,7 +405,7 @@ bind_mount (int proc_fd,
20+ if (resolved_dest == NULL)
21+ return BIND_MOUNT_ERROR_REALPATH_DEST;
22+
23+- dest_fd = TEMP_FAILURE_RETRY (open (resolved_dest, O_PATH | O_CLOEXEC));
24++ dest_fd = open (resolved_dest, O_PATH | O_CLOEXEC);
25+ if (dest_fd < 0)
26+ {
27+ if (failing_path != NULL)
28+diff --git a/bubblewrap.c b/bubblewrap.c
29+index bc53891..4848713 100644
30+--- a/bubblewrap.c
31++++ b/bubblewrap.c
32+@@ -608,7 +608,7 @@ do_init (int event_fd, pid_t initial_pid)
33+
34+ for (lock = lock_files; lock != NULL; lock = lock->next)
35+ {
36+- int fd = TEMP_FAILURE_RETRY (open (lock->path, O_RDONLY | O_CLOEXEC));
37++ int fd = open (lock->path, O_RDONLY | O_CLOEXEC);
38+ if (fd == -1)
39+ die_with_error ("Unable to open lock file %s", lock->path);
40+
41+@@ -619,7 +619,7 @@ do_init (int event_fd, pid_t initial_pid)
42+ .l_len = 0
43+ };
44+
45+- if (TEMP_FAILURE_RETRY (fcntl (fd, F_SETLK, &l)) < 0)
46++ if (fcntl (fd, F_SETLK, &l) < 0)
47+ die_with_error ("Unable to lock file %s", lock->path);
48+
49+ /* Keep fd open to hang on to lock */
50+@@ -636,7 +636,7 @@ do_init (int event_fd, pid_t initial_pid)
51+ pid_t child;
52+ int status;
53+
54+- child = TEMP_FAILURE_RETRY (wait (&status));
55++ child = wait (&status);
56+ if (child == initial_pid)
57+ {
58+ initial_exit_status = propagate_exit_status (status);
59+@@ -647,7 +647,7 @@ do_init (int event_fd, pid_t initial_pid)
60+ int res UNUSED;
61+
62+ val = initial_exit_status + 1;
63+- res = TEMP_FAILURE_RETRY (write (event_fd, &val, 8));
64++ res = write (event_fd, &val, 8);
65+ /* Ignore res, if e.g. the parent died and closed event_fd
66+ we don't want to error out here */
67+ }
68+@@ -1071,10 +1071,10 @@ privileged_op (int privileged_op_socket,
69+ if (arg2 != NULL)
70+ strcpy ((char *) buffer + arg2_offset, arg2);
71+
72+- if (TEMP_FAILURE_RETRY (write (privileged_op_socket, buffer, buffer_size)) != (ssize_t)buffer_size)
73++ if (write (privileged_op_socket, buffer, buffer_size) != (ssize_t)buffer_size)
74+ die ("Can't write to privileged_op_socket");
75+
76+- if (TEMP_FAILURE_RETRY (read (privileged_op_socket, buffer, 1)) != 1)
77++ if (read (privileged_op_socket, buffer, 1) != 1)
78+ die ("Can't read from privileged_op_socket");
79+
80+ return;
81+@@ -2824,7 +2824,7 @@ namespace_ids_read (pid_t pid)
82+ NsInfo *info;
83+
84+ dir = xasprintf ("%d/ns", pid);
85+- ns_fd = TEMP_FAILURE_RETRY (openat (proc_fd, dir, O_PATH));
86++ ns_fd = openat (proc_fd, dir, O_PATH);
87+
88+ if (ns_fd < 0)
89+ die_with_error ("open /proc/%s/ns failed", dir);
90+@@ -3046,7 +3046,7 @@ main (int argc,
91+
92+ /* We need to read stuff from proc during the pivot_root dance, etc.
93+ Lets keep a fd to it open */
94+- proc_fd = TEMP_FAILURE_RETRY (open ("/proc", O_PATH));
95++ proc_fd = open ("/proc", O_PATH);
96+ if (proc_fd == -1)
97+ die_with_error ("Can't open /proc");
98+
99+@@ -3213,7 +3213,7 @@ main (int argc,
100+
101+ /* Let child run now that the uid maps are set up */
102+ val = 1;
103+- res = TEMP_FAILURE_RETRY (write (child_wait_fd, &val, 8));
104++ res = write (child_wait_fd, &val, 8);
105+ /* Ignore res, if e.g. the child died and closed child_wait_fd we don't want to error out here */
106+ close (child_wait_fd);
107+
108+@@ -3393,12 +3393,12 @@ main (int argc,
109+ op = read_priv_sec_op (unpriv_socket, buffer, sizeof (buffer),
110+ &flags, &perms, &size_arg, &arg1, &arg2);
111+ privileged_op (-1, op, flags, perms, size_arg, arg1, arg2);
112+- if (TEMP_FAILURE_RETRY (write (unpriv_socket, buffer, 1)) != 1)
113++ if (write (unpriv_socket, buffer, 1) != 1)
114+ die ("Can't write to op_socket");
115+ }
116+ while (op != PRIV_SEP_OP_DONE);
117+
118+- TEMP_FAILURE_RETRY (waitpid (child, &status, 0));
119++ waitpid (child, &status, 0);
120+ /* Continue post setup */
121+ }
122+ }
123+@@ -3422,7 +3422,7 @@ main (int argc,
124+ * We're aiming to make /newroot the real root, and get rid of /oldroot. To do
125+ * that we need a temporary place to store it before we can unmount it.
126+ */
127+- { cleanup_fd int oldrootfd = TEMP_FAILURE_RETRY (open ("/", O_DIRECTORY | O_RDONLY));
128++ { cleanup_fd int oldrootfd = open ("/", O_DIRECTORY | O_RDONLY);
129+ if (oldrootfd < 0)
130+ die_with_error ("can't open /");
131+ if (chdir ("/newroot") != 0)
132+@@ -3470,7 +3470,7 @@ main (int argc,
133+ {
134+ cleanup_fd int sysctl_fd = -1;
135+
136+- sysctl_fd = TEMP_FAILURE_RETRY (openat (proc_fd, "sys/user/max_user_namespaces", O_WRONLY));
137++ sysctl_fd = openat (proc_fd, "sys/user/max_user_namespaces", O_WRONLY);
138+
139+ if (sysctl_fd < 0)
140+ die_with_error ("cannot open /proc/sys/user/max_user_namespaces");
141+diff --git a/network.c b/network.c
142+index 373d606..f6d58a6 100644
143+--- a/network.c
144++++ b/network.c
145+@@ -53,8 +53,8 @@ rtnl_send_request (int rtnl_fd,
146+ struct sockaddr_nl dst_addr = { AF_NETLINK, 0 };
147+ ssize_t sent;
148+
149+- sent = TEMP_FAILURE_RETRY (sendto (rtnl_fd, (void *) header, header->nlmsg_len, 0,
150+- (struct sockaddr *) &dst_addr, sizeof (dst_addr)));
151++ sent = sendto (rtnl_fd, (void *) header, header->nlmsg_len, 0,
152++ (struct sockaddr *) &dst_addr, sizeof (dst_addr));
153+ if (sent < 0)
154+ return -1;
155+
156+@@ -71,7 +71,7 @@ rtnl_read_reply (int rtnl_fd,
157+
158+ while (1)
159+ {
160+- received = TEMP_FAILURE_RETRY (recv (rtnl_fd, buffer, sizeof (buffer), 0));
161++ received = recv (rtnl_fd, buffer, sizeof (buffer), 0);
162+ if (received < 0)
163+ return -1;
164+
165+diff --git a/utils.c b/utils.c
166+index 8ab89bb..ffe0a0d 100644
167+--- a/utils.c
168++++ b/utils.c
169+@@ -378,7 +378,7 @@ fdwalk (int proc_fd, int (*cb)(void *data,
170+ int res = 0;
171+ DIR *d;
172+
173+- dfd = TEMP_FAILURE_RETRY (openat (proc_fd, "self/fd", O_DIRECTORY | O_RDONLY | O_NONBLOCK | O_CLOEXEC | O_NOCTTY));
174++ dfd = openat (proc_fd, "self/fd", O_DIRECTORY | O_RDONLY | O_NONBLOCK | O_CLOEXEC | O_NOCTTY);
175+ if (dfd == -1)
176+ return res;
177+
178+@@ -460,7 +460,7 @@ write_file_at (int dfd,
179+ bool res;
180+ int errsv;
181+
182+- fd = TEMP_FAILURE_RETRY (openat (dfd, path, O_RDWR | O_CLOEXEC, 0));
183++ fd = openat (dfd, path, O_RDWR | O_CLOEXEC, 0);
184+ if (fd == -1)
185+ return -1;
186+
187+@@ -485,7 +485,7 @@ create_file (const char *path,
188+ int res;
189+ int errsv;
190+
191+- fd = TEMP_FAILURE_RETRY (creat (path, mode));
192++ fd = creat (path, mode);
193+ if (fd == -1)
194+ return -1;
195+
196+@@ -566,11 +566,11 @@ copy_file (const char *src_path,
197+ int res;
198+ int errsv;
199+
200+- sfd = TEMP_FAILURE_RETRY (open (src_path, O_CLOEXEC | O_RDONLY));
201++ sfd = open (src_path, O_CLOEXEC | O_RDONLY);
202+ if (sfd == -1)
203+ return -1;
204+
205+- dfd = TEMP_FAILURE_RETRY (creat (dst_path, mode));
206++ dfd = creat (dst_path, mode);
207+ if (dfd == -1)
208+ {
209+ errsv = errno;
210+@@ -647,7 +647,7 @@ load_file_at (int dfd,
211+ char *data;
212+ int errsv;
213+
214+- fd = TEMP_FAILURE_RETRY (openat (dfd, path, O_CLOEXEC | O_RDONLY));
215++ fd = openat (dfd, path, O_CLOEXEC | O_RDONLY);
216+ if (fd == -1)
217+ return NULL;
218+
219+@@ -777,7 +777,7 @@ send_pid_on_socket (int sockfd)
220+ cred.gid = getegid ();
221+ memcpy (CMSG_DATA (cmsg), &cred, sizeof (cred));
222+
223+- if (TEMP_FAILURE_RETRY (sendmsg (sockfd, &msg, 0)) < 0)
224++ if (sendmsg (sockfd, &msg, 0) < 0)
225+ die_with_error ("Can't send pid");
226+ }
227+
228+@@ -807,7 +807,7 @@ read_pid_from_socket (int sockfd)
229+ msg.msg_control = control_buf_rcv;
230+ msg.msg_controllen = sizeof (control_buf_rcv);
231+
232+- if (TEMP_FAILURE_RETRY (recvmsg (sockfd, &msg, 0)) < 0)
233++ if (recvmsg (sockfd, &msg, 0) < 0)
234+ die_with_error ("Can't read pid from socket");
235+
236+ if (msg.msg_controllen <= 0)
237+--
238+2.44.0
239+
R pkg/bubblewrap/patch/0003-Avoid-statement-expressions-for-TEMP_FAILURE_RETRY.patch =>
pkg/bubblewrap/patch/0005-Remove-unnecessary-TEMP_FAILURE_RETRY.patch
+35,
-33
1@@ -1,63 +1,65 @@
2-From 095786df5a2eb12f7996a183a16912cbb8368105 Mon Sep 17 00:00:00 2001
3+From cd531eb41821e239f3776295c5a2a4e14bbda2a7 Mon Sep 17 00:00:00 2001
4 From: Michael Forney <mforney@mforney.org>
5-Date: Tue, 4 Jul 2023 19:04:48 -0700
6-Subject: [PATCH] Avoid statement expressions for TEMP_FAILURE_RETRY
7+Date: Sun, 2 Feb 2025 01:40:38 -0800
8+Subject: [PATCH] Remove unnecessary TEMP_FAILURE_RETRY
9
10+bwrap doesn't use signal handlers.
11 ---
12- bubblewrap.c | 19 ++++++++-----------
13- 1 file changed, 8 insertions(+), 11 deletions(-)
14+ bubblewrap.c | 6 +++---
15+ utils.h | 9 ---------
16+ 2 files changed, 3 insertions(+), 12 deletions(-)
17
18 diff --git a/bubblewrap.c b/bubblewrap.c
19-index ceb4beb..608009d 100644
20+index 4848713..c593436 100644
21 --- a/bubblewrap.c
22 +++ b/bubblewrap.c
23-@@ -44,14 +44,6 @@
24- #define CLONE_NEWCGROUP 0x02000000 /* New cgroup namespace */
25- #endif
26-
27--#ifndef TEMP_FAILURE_RETRY
28--#define TEMP_FAILURE_RETRY(expression) \
29-- (__extension__ \
30-- ({ long int __result; \
31-- do __result = (long int) (expression); \
32-- while (__result == -1L && errno == EINTR); \
33-- __result; }))
34--#endif
35-
36- /* We limit the size of a tmpfs to half the architecture's address space,
37- * to avoid hitting arbitrary limits in the kernel.
38-@@ -467,7 +459,8 @@ report_child_exit_status (int exitc, int setup_finished_fd)
39+@@ -479,7 +479,7 @@ report_child_exit_status (int exitc, int setup_finished_fd)
40 if (opt_json_status_fd == -1 || setup_finished_fd == -1)
41 return;
42
43 - s = TEMP_FAILURE_RETRY (read (setup_finished_fd, data, sizeof data));
44-+ do s = read (setup_finished_fd, data, sizeof data);
45-+ while (s == -1 && errno == EINTR);
46++ s = read (setup_finished_fd, data, sizeof data);
47 if (s == -1 && errno != EAGAIN)
48 die_with_error ("read eventfd");
49 if (s != 1) // Is 0 if pipe closed before exec, is 2 if closed after exec.
50-@@ -2953,7 +2946,9 @@ main (int argc,
51+@@ -3207,7 +3207,7 @@ main (int argc,
52 if (opt_userns_block_fd != -1)
53 {
54 char b[1];
55 - (void) TEMP_FAILURE_RETRY (read (opt_userns_block_fd, b, 1));
56-+ ssize_t s;
57-+ do s = read (opt_userns_block_fd, b, 1);
58-+ while (s == -1 && errno == EINTR);
59++ read (opt_userns_block_fd, b, 1);
60 close (opt_userns_block_fd);
61 }
62
63-@@ -3238,7 +3233,9 @@ main (int argc,
64+@@ -3505,7 +3505,7 @@ main (int argc,
65 if (opt_block_fd != -1)
66 {
67 char b[1];
68 - (void) TEMP_FAILURE_RETRY (read (opt_block_fd, b, 1));
69-+ ssize_t s;
70-+ do s = read (opt_block_fd, b, 1);
71-+ while (s == -1 && errno == EINTR);
72++ read (opt_block_fd, b, 1);
73 close (opt_block_fd);
74 }
75
76+diff --git a/utils.h b/utils.h
77+index 079fe7c..bea4e9d 100644
78+--- a/utils.h
79++++ b/utils.h
80+@@ -43,15 +43,6 @@
81+
82+ #define N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0]))
83+
84+-#ifndef TEMP_FAILURE_RETRY
85+-#define TEMP_FAILURE_RETRY(expression) \
86+- (__extension__ \
87+- ({ long int __result; \
88+- do __result = (long int) (expression); \
89+- while (__result == -1L && errno == EINTR); \
90+- __result; }))
91+-#endif
92+-
93+ #define PIPE_READ_END 0
94+ #define PIPE_WRITE_END 1
95+
96 --
97-2.37.3
98+2.44.0
99
+1,
-1
1@@ -1 +1 @@
2-Subproject commit 4ab175fe6d3a4053444b04d805a6d686f53455b9
3+Subproject commit 9ca3b05ec787acfb4b17bed37db5719fa777834f
+1,
-1
1@@ -1 +1 @@
2-0.8.0 r0
3+0.11.0 r0