Revert this since glibc is not ready yet

commit b2c97e251bb470e6f967c716081675a96dbde59c
Author: Justus Winter <4winter@informatik.uni-hamburg.de>
Date:   Mon Dec 19 02:13:06 2016 +0100

    procfs: provide magic retry response for /proc/self
    
    * hurd/hurd_types.h: Document the magic retry string `pid'.
    * hurd/paths.h (_HURD_MAGIC): New macro.
    * procfs/main.c: Remove all code related to faking /proc/self.
    * procfs/main.h: Likewise.
    * procfs/rootdir.c: Likewise.  Instead, return the magic retry
    response `pid' for the `self' node.

Index: hurd-debian/hurd/hurd_types.h
===================================================================
--- hurd-debian.orig/hurd/hurd_types.h
+++ hurd-debian/hurd/hurd_types.h
@@ -115,9 +115,6 @@ enum retry_type
 		    as for FS_RETRY_NORMAL.
 
      "/..." means retry "...", but starting from the users root directory.
-
-     "pid/..." means replace `pid' with the PID of the current process in %u
-               format and then retry as for FS_RETRY_NORMAL.
      */
 };
 typedef enum retry_type retry_type;
Index: hurd-debian/hurd/paths.h
===================================================================
--- hurd-debian.orig/hurd/paths.h
+++ hurd-debian/hurd/paths.h
@@ -54,7 +54,6 @@ the Free Software Foundation, 675 Mass A
 #define	_HURD_IFSOCK	_HURD "ifsock" /* S_IFSOCK */
 
 /* Symbolic names for all non-essential translators.  */
-#define _HURD_MAGIC	_HURD "magic"
 #define _HURD_CRASH	_HURD "crash"
 #define _HURD_MTAB	_HURD "mtab"
 
Index: hurd-debian/procfs/main.c
===================================================================
--- hurd-debian.orig/procfs/main.c
+++ hurd-debian/procfs/main.c
@@ -35,12 +35,14 @@
 /* Command-line options */
 int opt_clk_tck;
 mode_t opt_stat_mode;
+pid_t opt_fake_self;
 pid_t opt_kernel_pid;
 uid_t opt_anon_owner;
 
 /* Default values */
 #define OPT_CLK_TCK    sysconf(_SC_CLK_TCK)
 #define OPT_STAT_MODE  0400
+#define OPT_FAKE_SELF  -1
 #define OPT_KERNEL_PID HURD_PID_KERNEL
 #define OPT_ANON_OWNER 0
 
@@ -52,6 +54,7 @@ static void set_compatibility_options (v
 {
   opt_clk_tck = 100;
   opt_stat_mode = 0444;
+  opt_fake_self = 1;
 }
 
 static error_t
@@ -79,6 +82,19 @@ argp_parser (int key, char *arg, struct
 	opt_stat_mode = v;
       break;
 
+    case 'S':
+      if (arg)
+        {
+	  v = strtol (arg, &endp, 0);
+	  if (*endp || ! *arg)
+	    argp_error (state, "--fake-self: PID must be an integer");
+	  else
+	    opt_fake_self = v;
+	}
+      else
+	opt_fake_self = 1;
+      break;
+
     case 'k':
       v = strtol (arg, &endp, 0);
       if (*endp || ! *arg || (signed) opt_kernel_pid < 0)
@@ -144,6 +160,10 @@ struct argp_option common_options[] = {
       "You can use this option to override its mode to be more permissive "
       "for compatibility purposes.  "
       "(default: " STR (OPT_STAT_MODE) ")" },
+  { "fake-self", 'S', "PID", OPTION_ARG_OPTIONAL,
+      "Provide a fake \"self\" symlink to the given PID, for compatibility "
+      "purposes.  If PID is omitted, \"self\" will point to init.  "
+      "(default: no self link)" },
   { "kernel-process", 'k', "PID", 0,
       "Process identifier for the kernel, used to retrieve its command "
       "line, as well as the global up and idle times. "
@@ -239,6 +259,9 @@ netfs_append_args (char **argz, size_t *
   FOPT (opt_stat_mode, OPT_STAT_MODE,
         "--stat-mode=%o", opt_stat_mode);
 
+  FOPT (opt_fake_self, OPT_FAKE_SELF,
+        "--fake-self=%d", opt_fake_self);
+
   FOPT (opt_anon_owner, OPT_ANON_OWNER,
         "--anonymous-owner=%d", opt_anon_owner);
 
@@ -292,6 +315,7 @@ int main (int argc, char **argv)
 
   opt_clk_tck = OPT_CLK_TCK;
   opt_stat_mode = OPT_STAT_MODE;
+  opt_fake_self = OPT_FAKE_SELF;
   opt_kernel_pid = OPT_KERNEL_PID;
   opt_anon_owner = OPT_ANON_OWNER;
 
Index: hurd-debian/procfs/main.h
===================================================================
--- hurd-debian.orig/procfs/main.h
+++ hurd-debian/procfs/main.h
@@ -20,5 +20,6 @@
 /* Startup options */
 extern int opt_clk_tck;
 extern mode_t opt_stat_mode;
+extern pid_t opt_fake_self;
 extern pid_t opt_kernel_pid;
 extern uid_t opt_anon_owner;
Index: hurd-debian/procfs/rootdir.c
===================================================================
--- hurd-debian.orig/procfs/rootdir.c
+++ hurd-debian/procfs/rootdir.c
@@ -416,7 +416,19 @@ out:
   return err;
 }
 
-static struct node *rootdir_self_node;
+static int
+rootdir_fakeself_exists (void *dir_hook, const void *entry_hook)
+{
+  return opt_fake_self >= 0;
+}
+
+static error_t
+rootdir_gc_fakeself (void *hook, char **contents, ssize_t *contents_len)
+{
+  *contents_len = asprintf (contents, "%d", opt_fake_self);
+  return 0;
+}
+
 static struct node *rootdir_mounts_node;
 
 static error_t
@@ -682,10 +694,13 @@ rootdir_translated_node_get_translator (
 static const struct procfs_dir_entry rootdir_entries[] = {
   {
     .name = "self",
-    .hook = ROOTDIR_DEFINE_TRANSLATED_NODE (&rootdir_self_node,
-					    _HURD_MAGIC "\0pid"),
+    .hook = & (struct procfs_node_ops) {
+      .get_contents = rootdir_gc_fakeself,
+      .cleanup_contents = procfs_cleanup_contents_with_free,
+    },
     .ops = {
-      .make_node = rootdir_make_translated_node,
+      .make_node = rootdir_symlink_make_node,
+      .exists = rootdir_fakeself_exists,
     }
   },
   {
