source: pkg/raul/main/vte/trunk/debian/patches/91_keep_fds.patch @ 7372

Revision 7372, 2.0 KB checked in by alanbach-guest, 3 years ago (diff)
  • Refreshed 91_keep_fds.patch
  • src/pty.c

    diff -urN vte-0.26.2/src/pty.c vte-0.26.2.new//src/pty.c
    old new  
    192192                const char *name; 
    193193                int fd; 
    194194        } tty; 
     195        int keep_fd; 
    195196} VtePtyChildSetupData; 
    196197 
    197198/** 
     
    332333                close(fd); 
    333334        } 
    334335 
     336        if (data->keep_fd > 0) { 
     337                int i; 
     338                /* Close most descriptors. */ 
     339                for (i = 0; i < sysconf(_SC_OPEN_MAX); i++) { 
     340                        if (i != data->keep_fd && 
     341                            i != fd &&  
     342                            i != STDOUT_FILENO &&  
     343                            i != STDIN_FILENO &&  
     344                            i != STDERR_FILENO) { 
     345                                close(i); 
     346                         } 
     347                } 
     348        } 
     349 
    335350        /* Reset our signals -- our parent may have done any number of 
    336351         * weird things to them. */ 
    337352        _vte_pty_reset_signal_handlers(); 
     
    440455        return (gchar **) g_ptr_array_free (array, FALSE); 
    441456} 
    442457 
     458static int 
     459_vte_pty_keep_fd(char **env_add) 
     460{ 
     461        int i; 
     462        if (env_add == NULL) 
     463                return -1; 
     464 
     465        const gchar *needle = "VTE_PTY_KEEP_FD="; 
     466        for (i = 0; env_add[i] != NULL; i++) { 
     467                gchar *s = strstr(env_add[i], needle); 
     468                if (s != NULL) 
     469                        return atoi(&s[strlen(needle)]); 
     470        } 
     471 
     472        return -1; 
     473} 
     474 
    443475/* 
    444476 * __vte_pty_get_pty_flags: 
    445477 * @lastlog: %TRUE if the session should be logged to the lastlog 
     
    523555        /* add the given environment to the childs */ 
    524556        envp2 = __vte_pty_merge_environ (envv, pty->priv->term); 
    525557 
     558        pty->priv->child_setup_data.keep_fd = _vte_pty_keep_fd(envp2); 
     559        if (pty->priv->child_setup_data.keep_fd > 0) 
     560                spawn_flags |= G_SPAWN_LEAVE_DESCRIPTORS_OPEN; 
     561 
    526562        _VTE_DEBUG_IF (VTE_DEBUG_MISC) { 
    527563                g_printerr ("Spawing command:\n"); 
    528564                for (i = 0; argv[i] != NULL; i++) { 
Note: See TracBrowser for help on using the repository browser.