summary refs log tree commit diff
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)