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

Revision 7371, 2.1 KB checked in by alanbach-guest, 3 years ago (diff)
  • New upstream stable release
    • build-dep on dh-autoreconf and removed 90_autoreconf.patch
    • merged updates from Ubuntu
  • vte-0.25.91

    Upstream: http://bugzilla.gnome.org/show_bug.cgi?id=320128
    Description: Keep file descriptors open on vte_fork_pty().
    
    old new  
    192192                const char *name; 
    193193                int fd; 
    194194        } tty; 
     195        int keep_fd; 
    195196} VtePtyChildSetupData; 
    196197 
    197198/** 
     
    332332                close(fd); 
    333333        } 
    334334 
     335        if (data->keep_fd > 0) { 
     336                int i; 
     337                /* Close most descriptors. */ 
     338                for (i = 0; i < sysconf(_SC_OPEN_MAX); i++) { 
     339                        if (i != data->keep_fd && 
     340                            i != fd &&  
     341                            i != STDOUT_FILENO &&  
     342                            i != STDIN_FILENO &&  
     343                            i != STDERR_FILENO) { 
     344                                close(i); 
     345                         } 
     346                } 
     347        } 
     348 
    335349        /* Reset our signals -- our parent may have done any number of 
    336350         * weird things to them. */ 
    337351        _vte_pty_reset_signal_handlers(); 
     
    437451        return (gchar **) g_ptr_array_free (array, FALSE); 
    438452} 
    439453 
     454static int 
     455_vte_pty_keep_fd(char **env_add) 
     456{ 
     457        int i; 
     458        if (env_add == NULL) 
     459                return -1; 
     460 
     461        const gchar *needle = "VTE_PTY_KEEP_FD="; 
     462        for (i = 0; env_add[i] != NULL; i++) { 
     463                gchar *s = strstr(env_add[i], needle); 
     464                if (s != NULL) 
     465                        return atoi(&s[strlen(needle)]); 
     466        } 
     467 
     468        return -1; 
     469} 
     470 
    440471/* 
    441472 * __vte_pty_get_pty_flags: 
    442473 * @lastlog: %TRUE if the session should be logged to the lastlog 
     
    520551        /* add the given environment to the childs */ 
    521552        envp2 = __vte_pty_merge_environ (envv); 
    522553 
     554        pty->priv->child_setup_data.keep_fd = _vte_pty_keep_fd(envp2); 
     555        if (pty->priv->child_setup_data.keep_fd > 0) 
     556                spawn_flags |= G_SPAWN_LEAVE_DESCRIPTORS_OPEN; 
     557 
    523558        _VTE_DEBUG_IF (VTE_DEBUG_MISC) { 
    524559                g_printerr ("Spawing command:\n"); 
    525560                for (i = 0; argv[i] != NULL; i++) { 
Note: See TracBrowser for help on using the repository browser.