[vlc-commits] proxy: use vlc_spawn()

Rémi Denis-Courmont git at videolan.org
Sun Sep 20 11:53:07 CEST 2020


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Sep 19 12:53:29 2020 +0300| [03390c7f346e5e6911461d443095e4523884fe1b] | committer: Rémi Denis-Courmont

proxy: use vlc_spawn()

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=03390c7f346e5e6911461d443095e4523884fe1b
---

 src/posix/netconf.c | 45 ++++++---------------------------------------
 1 file changed, 6 insertions(+), 39 deletions(-)

diff --git a/src/posix/netconf.c b/src/posix/netconf.c
index e2db67b386..4ec82612d9 100644
--- a/src/posix/netconf.c
+++ b/src/posix/netconf.c
@@ -24,19 +24,11 @@
 
 #include <stdlib.h>
 #include <string.h>
-#include <signal.h>
-
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <fcntl.h>
-#include <spawn.h>
-#include <unistd.h>
-
-extern char **environ;
 
 #include <vlc_common.h>
 #include <vlc_fs.h>
 #include <vlc_network.h>
+#include <vlc_spawn.h>
 
 /**
  * Determines the network proxy server to use (if any).
@@ -45,43 +37,18 @@ extern char **environ;
  */
 char *vlc_getProxyUrl(const char *url)
 {
-    /* libproxy helper */
-    pid_t pid;
-    posix_spawn_file_actions_t actions;
-    posix_spawnattr_t attr;
-    char *argv[3] = { (char *)"proxy", (char *)url, NULL };
     int fd[2];
 
     if (vlc_pipe(fd))
         return NULL;
 
-    if (posix_spawn_file_actions_init(&actions))
-        return NULL;
-    if (posix_spawn_file_actions_addopen(&actions, STDIN_FILENO, "/dev/null",
-                                         O_RDONLY, 0644) ||
-        posix_spawn_file_actions_adddup2(&actions, fd[1], STDOUT_FILENO))
-    {
-        posix_spawn_file_actions_destroy(&actions);
-        return NULL;
-    }
-
-    posix_spawnattr_init(&attr);
-    {
-        sigset_t set;
-
-        sigemptyset(&set);
-        posix_spawnattr_setsigmask(&attr, &set);
-        sigaddset (&set, SIGPIPE);
-        posix_spawnattr_setsigdefault(&attr, &set);
-        posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETSIGDEF
-                                      | POSIX_SPAWN_SETSIGMASK);
-    }
+    pid_t pid;
+    int fdv[] = { -1, fd[1], STDERR_FILENO, -1 };
+    const char *argv[] = { "proxy", url, NULL };
 
-    if (posix_spawnp(&pid, "proxy", &actions, &attr, argv, environ))
+    if (vlc_spawnp(&pid, "proxy", fdv, argv))
         pid = -1;
 
-    posix_spawnattr_destroy(&attr);
-    posix_spawn_file_actions_destroy(&actions);
     vlc_close(fd[1]);
 
     if (pid != -1)
@@ -99,7 +66,7 @@ char *vlc_getProxyUrl(const char *url)
         while (len < sizeof (buf));
 
         vlc_close(fd[0]);
-        while (waitpid(pid, &(int){ 0 }, 0) == -1);
+        vlc_waitpid(pid);
 
         if (len >= 9 && !strncasecmp(buf, "direct://", 9))
             return NULL;



More information about the vlc-commits mailing list