Diff for /libelwix/src/pio.c between versions 1.5 and 1.7.2.1

version 1.5, 2016/05/18 12:47:42 version 1.7.2.1, 2020/06/19 22:35:05
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004 - 2015Copyright 2004 - 2020
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 65  static pthread_mutex_t pidlist_mutex = PTHREAD_MUTEX_I Line 65  static pthread_mutex_t pidlist_mutex = PTHREAD_MUTEX_I
  * @command = command   * @command = command
  * @type = type   * @type = type
  * @ppid = return pid of child program   * @ppid = return pid of child program
    *      If value of *ppid is -1 when invoke routine then child will be session leader
  * return: NULL error or !=NULL open program   * return: NULL error or !=NULL open program
  */   */
 #ifdef POPEN_STREAM  #ifdef POPEN_STREAM
Line 74  int Line 75  int
 #endif  #endif
 e_popen(const char *command, const char *type, pid_t *ppid)  e_popen(const char *command, const char *type, pid_t *ppid)
 {  {
           return e_popen2(command, type, ppid, NULL, 0);
   }
   
   /*
    * e_popen2() - ELWIX replacement of standard popen with post close of chosen handles
    *
    * @command = command
    * @type = type
    * @ppid = return pid of child program 
    *      If value of *ppid is -1 when invoke routine then child will be session leader
    * @fds = file descriptor array for close when fork
    * @fdslen = fds number of descriptors
    * return: NULL error or !=NULL open program
    */
   #ifdef POPEN_STREAM
   FILE *
   #else
   int
   #endif
   e_popen2(const char *command, const char *type, pid_t *ppid, int *fds, size_t fdslen)
   {
         struct tagPIOPID *cur, *p;          struct tagPIOPID *cur, *p;
        int pdes[2], pid, twoway, cloexec;        int pdes[2], pid, twoway, cloexec, i;
         char *argv[4];          char *argv[4];
   
         if (!command || !type)          if (!command || !type)
Line 143  e_popen(const char *command, const char *type, pid_t * Line 165  e_popen(const char *command, const char *type, pid_t *
 #endif  #endif
                 /* NOTREACHED */                  /* NOTREACHED */
         case 0:                         /* Child. */          case 0:                         /* Child. */
                   if (ppid && *ppid == -1)
                           setsid();
   
                   if (fds && fdslen) {
                           for (i = 0; i < fdslen; i++)
                                   close(fds[i]);
                   }
   
                 if (*type == 'r') {                  if (*type == 'r') {
                         /*                          /*
                          * The _dup2() to STDIN_FILENO is repeated to avoid                           * The _dup2() to STDIN_FILENO is repeated to avoid
Line 235  e_pclose(int iop) Line 265  e_pclose(int iop)
 #endif  #endif
 {  {
         struct tagPIOPID *cur, *last = NULL;          struct tagPIOPID *cur, *last = NULL;
        int pstat;        int pstat = 0;
         pid_t pid;          pid_t pid;
   
         if (!iop)          if (!iop)

Removed from v.1.5  
changed lines
  Added in v.1.7.2.1


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>