local-exec_filename
authorGNU Libc Maintainers <debian-glibc@lists.debian.org>
Sun, 14 Jan 2018 10:24:48 +0000 (10:24 +0000)
committerAurelien Jarno <aurel32@debian.org>
Sun, 14 Jan 2018 10:24:48 +0000 (10:24 +0000)
Keep compatibility with experimental implementation

Gbp-Pq: Topic hurd-i386
Gbp-Pq: Name local-exec_filename.diff

hurd/Makefile
hurd/Versions
hurd/hurdexec.c
sysdeps/mach/hurd/spawni.c

index 15f7b14a6459d6c75273dd3faf28637198af3fcf..c88533d2e3afb508ac5aff31573754efd3cda339 100644 (file)
@@ -32,8 +32,8 @@ user-interfaces               := $(addprefix hurd/,\
                                       auth auth_request auth_reply startup \
                                       process process_request \
                                       msg msg_reply msg_request \
-                                      exec exec_startup crash interrupt \
-                                      fs fsys io io_reply io_request \
+                                      exec exec_experimental exec_startup crash interrupt \
+                                      fs fs_experimental fsys io io_reply io_request \
                                       term tioctl socket ifsock \
                                       login password pfinet \
                                       )
index 13a740fd0316cbd731b621fbe858243d2cabe0cc..25538869c55941395d5bfbdd20e4a247d6472c06 100644 (file)
@@ -140,7 +140,11 @@ libc {
     _hurd_sigstate_unlock;
     _hurd_sigstate_delete;
   }
-  GLIBC_2.27 {
+  GLIBC_2.21 {
+    # "quasi-internal" functions
+    _hurd_exec_file_name;
+  }
+  GLIBC_2.26 {
     # "quasi-internal" functions
     _hurd_exec_paths;
   }
index 51893e1ab49b1911b3bb872716a45d5e77e53ad6..ad56e418d6d288cd7dd2dc8bf3a5a2a08652b025 100644 (file)
 #include <hurd/fd.h>
 #include <hurd/signal.h>
 #include <hurd/id.h>
+#include <hurd/fs_experimental.h>
 #include <assert.h>
 #include <argz.h>
 
+#include <shlib-compat.h>
+
 /* Overlay TASK, executing FILE with arguments ARGV and environment ENVP.
    If TASK == mach_task_self (), some ports are dealloc'd by the exec server.
    ARGV and ENVP are terminated by NULL pointers.
@@ -39,6 +42,13 @@ _hurd_exec (task_t task, file_t file,
   return _hurd_exec_paths (task, file, NULL, NULL, argv, envp);
 }
 
+error_t
+__hurd_exec_file_name (task_t task, file_t file, const char *filename,
+           char *const argv[], char *const envp[])
+{
+  return _hurd_exec_paths (task, file, filename, filename, argv, envp);
+}
+
 link_warning (_hurd_exec,
              "_hurd_exec is deprecated, use _hurd_exec_paths instead");
 
@@ -392,6 +402,19 @@ _hurd_exec_paths (task_t task, file_t file,
                               task == __mach_task_self () ? 1 : 0);
       /* Fall back for backwards compatibility.  This can just be removed
          when __file_exec goes away.  */
+      if (err == MIG_BAD_ID)
+       err = __file_exec_file_name (file, task, flags,
+                                   path ? path : "",
+                                   args, argslen, env, envlen,
+                                   dtable, MACH_MSG_TYPE_COPY_SEND, dtablesize,
+                                   ports, MACH_MSG_TYPE_COPY_SEND,
+                                   _hurd_nports,
+                                   ints, INIT_INT_MAX,
+                                   please_dealloc, pdp - please_dealloc,
+                                   &_hurd_msgport,
+                                   task == __mach_task_self () ? 1 : 0);
+      /* Fall back for backwards compatibility.  This can just be removed
+         when __file_exec goes away.  */
       if (err == MIG_BAD_ID)
        err = __file_exec (file, task, flags,
                           args, argslen, env, envlen,
@@ -435,3 +458,9 @@ _hurd_exec_paths (task_t task, file_t file,
   free (env);
   return err;
 }
+extern error_t _hurd_exec_file_name (task_t task,
+                                    file_t file,
+                                    const char *filename,
+                                    char *const argv[],
+                                    char *const envp[]);
+versioned_symbol (libc, __hurd_exec_file_name, _hurd_exec_file_name, GLIBC_2_21);
index 3ef5de002897814682b86150ab0818c3e99f6ec3..6d53dc192875e0f4b9ffb1c3b8a6c5409f3da3ad 100644 (file)
@@ -30,6 +30,7 @@
 #include <hurd/id.h>
 #include <hurd/lookup.h>
 #include <hurd/resource.h>
+#include <hurd/fs_experimental.h>
 #include <assert.h>
 #include <argz.h>
 #include "spawn_int.h"
@@ -659,6 +660,18 @@ __spawni (pid_t *pid, const char *file,
           ints, INIT_INT_MAX,
           NULL, 0, NULL, 0);
 
+       /* Fallback for backwards compatibility.  This can just be removed
+          when __file_exec goes away.  */
+       if (err == MIG_BAD_ID)
+         err = __file_exec_file_name
+         (file, task,
+          __sigismember (&_hurdsig_traced, SIGKILL) ? EXEC_SIGTRAP : 0,
+          relpath, args, argslen, env, envlen,
+          dtable, MACH_MSG_TYPE_COPY_SEND, dtablesize,
+          ports, MACH_MSG_TYPE_COPY_SEND, _hurd_nports,
+          ints, INIT_INT_MAX,
+          NULL, 0, NULL, 0);
+
        /* Fallback for backwards compatibility.  This can just be removed
           when __file_exec goes away.  */
        if (err == MIG_BAD_ID)