[glibc] 01/01: hurd-i386/tg-magic-pid.diff: New patch, add support for /proc/self
This is an automated email from the git hooks/post-receive script.
sthibault pushed a commit to branch sid
in repository glibc.
commit eb123c94201494d030f7c1f75f5795fdbe5a71de
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date: Mon Dec 19 01:58:36 2016 +0100
hurd-i386/tg-magic-pid.diff: New patch, add support for /proc/self
---
debian/changelog | 1 +
debian/patches/hurd-i386/tg-magic-pid.diff | 86 ++++++++++++++++++++++++++++++
debian/patches/series | 1 +
3 files changed, 88 insertions(+)
diff --git a/debian/changelog b/debian/changelog
index 7aa4254..ab28e82 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,6 +3,7 @@ glibc (2.24-9) UNRELEASED; urgency=medium
[ Samuel Thibault ]
* hurd-i386/tg-libpthread-gsync-mutex.diff: Update patch, fixes trylock
error return.
+ * hurd-i386/tg-magic-pid.diff: New patch, add support for /proc/self.
[ Aurelien Jarno ]
* debian/sysdeps/{amd64,i386,x32}.mk: disable lock elision (aka Intel TSX)
diff --git a/debian/patches/hurd-i386/tg-magic-pid.diff b/debian/patches/hurd-i386/tg-magic-pid.diff
new file mode 100644
index 0000000..14b41fd
--- /dev/null
+++ b/debian/patches/hurd-i386/tg-magic-pid.diff
@@ -0,0 +1,86 @@
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Subject: [PATCH] hurd: Handle `pid' magical lookup retry
+
+ * hurd/lookup-retry.c: Handle `pid' magical lookup
+ retry.
+
+---
+ hurd/lookup-retry.c | 35 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 35 insertions(+)
+
+diff --git a/hurd/lookup-retry.c b/hurd/lookup-retry.c
+index aee2ba8..845bc24 100644
+--- a/hurd/lookup-retry.c
++++ b/hurd/lookup-retry.c
+@@ -25,6 +25,7 @@
+ #include <string.h>
+ #include <_itoa.h>
+ #include <eloop-threshold.h>
++#include <unistd.h>
+
+ /* Translate the error from dir_lookup into the error the user sees. */
+ static inline error_t
+@@ -59,6 +60,7 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
+ error_t err;
+ char *file_name;
+ int nloops;
++ file_t lastdir = MACH_PORT_NULL;
+
+ error_t lookup_op (file_t startdir)
+ {
+@@ -306,6 +308,26 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
+ goto bad_magic;
+ break;
+
++ case 'p':
++ if (retryname[1] == 'i' && retryname[2] == 'd' &&
++ (retryname[3] == '/' || retryname[3] == 0))
++ {
++ char *p, buf[1024]; /* XXX */
++ size_t len;
++ p = _itoa (__getpid (), &buf[sizeof buf], 10, 0);
++ len = &buf[sizeof buf] - p;
++ memcpy (buf, p, len);
++ strcpy (buf + len, &retryname[3]);
++ strcpy (retryname, buf);
++
++ /* Do a normal retry on the remaining components. */
++ startdir = lastdir;
++ file_name = retryname;
++ }
++ else
++ goto bad_magic;
++ break;
++
+ default:
+ bad_magic:
+ return EGRATUITOUS;
+@@ -316,6 +338,16 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
+ return EGRATUITOUS;
+ }
+
++ if (MACH_PORT_VALID (*result) && *result != lastdir)
++ {
++ if (MACH_PORT_VALID (lastdir))
++ __mach_port_deallocate (__mach_task_self (), lastdir);
++
++ lastdir = *result;
++ __mach_port_mod_refs (__mach_task_self (), lastdir,
++ MACH_PORT_RIGHT_SEND, 1);
++ }
++
+ if (startdir != MACH_PORT_NULL)
+ {
+ err = lookup_op (startdir);
+@@ -326,6 +358,9 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
+ err = (*use_init_port) (dirport, &lookup_op);
+ } while (! err);
+
++ if (MACH_PORT_VALID (lastdir))
++ __mach_port_deallocate (__mach_task_self (), lastdir);
++
+ return err;
+ }
+ weak_alias (__hurd_file_name_lookup_retry, hurd_file_name_lookup_retry)
+--
+tg: (7bb5f8a..) t/magic-pid (depends on: baseline)
diff --git a/debian/patches/series b/debian/patches/series
index b829544..4c8f68a 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -140,6 +140,7 @@ hurd-i386/tg-NOFOLLOW.diff
hurd-i386/tg-NOFOLLOW-DIRECTORY.diff
hurd-i386/tg-libc_rwlock_recursive.diff
hurd-i386/cvs-hurd_signal.h_c++.diff
+hurd-i386/tg-magic-pid.diff
i386/local-biarch.diff
i386/local-cmov.diff
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-glibc/glibc.git
Reply to: