aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/patches/glibc-hurd-magic-pid.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches/glibc-hurd-magic-pid.patch')
-rw-r--r--gnu/packages/patches/glibc-hurd-magic-pid.patch190
1 files changed, 0 insertions, 190 deletions
diff --git a/gnu/packages/patches/glibc-hurd-magic-pid.patch b/gnu/packages/patches/glibc-hurd-magic-pid.patch
deleted file mode 100644
index a6849f7d35..0000000000
--- a/gnu/packages/patches/glibc-hurd-magic-pid.patch
+++ /dev/null
@@ -1,190 +0,0 @@
-This patch implements "magic" lookup for "pid/…", as used when looking up
-/proc/self.
-
-The patch comes from the 't/magic-pid' branch
-at <https://git.savannah.gnu.org/cgit/hurd/glibc.git>. It squashes
-commit 392e52286a302ca6157fbd221295e64ab6b6d8ba (by Justus Winter)
-and commit 392e52286a302ca6157fbd221295e64ab6b6d8ba (a subsequent fix by
-Samuel Thibault).
-
-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.
-
-diff --git a/hurd/lookup-retry.c b/hurd/lookup-retry.c
-index aee2ba8f93..6ed8de1653 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)
- {
-@@ -107,14 +109,15 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
- {
- case FS_RETRY_REAUTH:
- if (err = reauthenticate (*result))
-- return err;
-+ goto out;
- /* Fall through. */
-
- case FS_RETRY_NORMAL:
- if (nloops++ >= __eloop_threshold ())
- {
- __mach_port_deallocate (__mach_task_self (), *result);
-- return ELOOP;
-+ err = ELOOP;
-+ goto out;
- }
-
- /* An empty RETRYNAME indicates we have the final port. */
-@@ -174,7 +177,7 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
-
- if (err)
- __mach_port_deallocate (__mach_task_self (), *result);
-- return err;
-+ goto out;
- }
-
- startdir = *result;
-@@ -189,7 +192,10 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
- if (*result != MACH_PORT_NULL)
- __mach_port_deallocate (__mach_task_self (), *result);
- if (nloops++ >= __eloop_threshold ())
-- return ELOOP;
-+ {
-+ err = ELOOP;
-+ goto out;
-+ }
- file_name = &retryname[1];
- break;
-
-@@ -208,7 +214,8 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
- (*end != '/' && *end != '\0'))
- {
- errno = save;
-- return ENOENT;
-+ err = ENOENT;
-+ goto out;
- }
- if (! get_dtable_port)
- err = EGRATUITOUS;
-@@ -226,9 +233,12 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
- }
- errno = save;
- if (err)
-- return err;
-+ goto out;
- if (*end == '\0')
-- return 0;
-+ {
-+ err = 0;
-+ goto out;
-+ }
- else
- {
- /* Do a normal retry on the remaining components. */
-@@ -255,9 +265,12 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
- if (err = __host_info (__mach_host_self (), HOST_BASIC_INFO,
- (integer_t *) &hostinfo,
- &hostinfocnt))
-- return err;
-+ goto out;
- if (hostinfocnt != HOST_BASIC_INFO_COUNT)
-- return EGRATUITOUS;
-+ {
-+ err = EGRATUITOUS;
-+ goto out;
-+ }
- p = _itoa (hostinfo.cpu_subtype, &retryname[8], 10, 0);
- *--p = '/';
- p = _itoa (hostinfo.cpu_type, &retryname[8], 10, 0);
-@@ -293,10 +306,11 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
- }
-
- case '\0':
-- return opentty (result);
-+ err = opentty (result);
-+ goto out;
- case '/':
- if (err = opentty (&startdir))
-- return err;
-+ goto out;
- strcpy (retryname, &retryname[4]);
- break;
- default:
-@@ -306,14 +320,48 @@ __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. */
-+ __mach_port_mod_refs (__mach_task_self (), lastdir,
-+ MACH_PORT_RIGHT_SEND, 1);
-+ startdir = lastdir;
-+ file_name = retryname;
-+ }
-+ else
-+ goto bad_magic;
-+ break;
-+
- default:
- bad_magic:
-- return EGRATUITOUS;
-+ err = EGRATUITOUS;
-+ goto out;
- }
- break;
-
- default:
-- return EGRATUITOUS;
-+ err = EGRATUITOUS;
-+ goto out;
-+ }
-+
-+ 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)
-@@ -326,6 +374,10 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
- err = (*use_init_port) (dirport, &lookup_op);
- } while (! err);
-
-+out:
-+ 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)