Overwrite tracked file descriptors when exporting COLORED_STDERR_FDS.

If the list of tracked file descriptors is modified to contain unwanted
values (e.g. when a parent process closes or redirects stderr), this
makes it possible to set the tracked file descriptors back to a given
list.

This problem occurred with startx which somehow closes or redirects
stderr. As COLORED_STDERR_FDS was set in the shell running startx, this
disabled coloring stderr for all processes started in the X11 session.

This is no longer an issue. As COLORED_STDERR_FDS is set in the shell
configuration file, it automatically sets the list to the correct value
when a shell is opened in the terminal emulator once X11 is running.
This commit is contained in:
Simon Ruderich
2013-06-21 18:26:23 +02:00
parent 045ca46e79
commit 0d7f306898
8 changed files with 160 additions and 59 deletions

View File

@@ -1,114 +1,125 @@
argv[0] = |./example_exec|
environ[1] = |COLORED_STDERR_FDS=2,|
environ[1] = |COLORED_STDERR_PRIVATE_FDS=2,|
CHECKING COLORING.
argv[0] = |./example_exec|
environ[1] = |COLORED_STDERR_FDS=2,3,|
environ[1] = |COLORED_STDERR_PRIVATE_FDS=2,3,|
argv[0] = |./example_exec|
environ[1] = |COLORED_STDERR_FDS=2,3,4,|
environ[1] = |COLORED_STDERR_PRIVATE_FDS=2,3,4,|
argv[0] = |./example_exec|
environ[1] = |COLORED_STDERR_FDS=2,3,4,5,|
environ[1] = |COLORED_STDERR_PRIVATE_FDS=2,3,4,5,|
argv[0] = |./example_exec|
environ[1] = |COLORED_STDERR_FDS=2,3,4,5,6,|
environ[1] = |COLORED_STDERR_PRIVATE_FDS=2,3,4,5,6,|
argv[0] = |./example_exec|
environ[1] = |COLORED_STDERR_FDS=2,3,4,7,|
environ[1] = |COLORED_STDERR_PRIVATE_FDS=2,3,4,7,|
argv[0] = |./example_exec|
environ[1] = |COLORED_STDERR_FDS=2,3,8,|
environ[1] = |COLORED_STDERR_PRIVATE_FDS=2,3,8,|
argv[0] = |./example_exec|
environ[1] = |COLORED_STDERR_FDS=5,|
environ[2] = |COLORED_STDERR_PRIVATE_FDS=2,5,|
argv[0] = |./example_exec|
environ[1] = |COLORED_STDERR_PRIVATE_FDS=6,|
argv[0] = |./example_exec|
environ[1] = |COLORED_STDERR_PRIVATE_FDS=|
environ[2] = |COLORED_STDERR_FDS=2,|
CHECKING TRANSPARENCY.
argv[0] = |./example_exec|
environ[1] = |COLORED_STDERR_FDS=2,|
environ[1] = |COLORED_STDERR_PRIVATE_FDS=2,|
argv[0] = |./example_exec|
environ[0] = |TEST=42|
environ[2] = |COLORED_STDERR_FDS=2,|
environ[2] = |COLORED_STDERR_PRIVATE_FDS=2,|
argv[0] = |./example_exec|
argv[1] = |foo|
argv[2] = |bar|
environ[0] = |TEST=43|
environ[1] = |FOO=|
environ[3] = |COLORED_STDERR_FDS=2,|
environ[3] = |COLORED_STDERR_PRIVATE_FDS=2,|
argv[0] = |./example_exec|
environ[0] = |TEST=44|
environ[1] = |FOO=|
environ[3] = |COLORED_STDERR_FDS=2,|
environ[3] = |COLORED_STDERR_PRIVATE_FDS=2,|
argv[0] = |./example_exec|
argv[1] = |foo|
argv[2] = |bar|
environ[0] = |TEST=45|
environ[1] = |FOO=|
environ[3] = |COLORED_STDERR_FDS=2,|
environ[3] = |COLORED_STDERR_PRIVATE_FDS=2,|
argv[0] = |./example_exec|
environ[0] = |TEST=46|
environ[1] = |FOO=|
environ[3] = |COLORED_STDERR_FDS=2,|
environ[3] = |COLORED_STDERR_PRIVATE_FDS=2,|
argv[0] = |./example_exec|
argv[1] = |foo|
argv[2] = |bar|
environ[0] = |TEST=47|
environ[1] = |FOO=|
environ[3] = |COLORED_STDERR_FDS=2,|
environ[3] = |COLORED_STDERR_PRIVATE_FDS=2,|
argv[0] = |./example_exec|
environ[1] = |COLORED_STDERR_FDS=2,|
environ[1] = |COLORED_STDERR_PRIVATE_FDS=2,|
argv[0] = |./example_exec|
environ[0] = |TEST=48|
environ[2] = |COLORED_STDERR_FDS=2,|
environ[2] = |COLORED_STDERR_PRIVATE_FDS=2,|
argv[0] = |./example_exec|
argv[1] = |foo|
argv[2] = |bar|
environ[0] = |TEST=49|
environ[1] = |FOO=|
environ[3] = |COLORED_STDERR_FDS=2,|
environ[3] = |COLORED_STDERR_PRIVATE_FDS=2,|
argv[0] = |./example_exec|
environ[0] = |TEST=50|
environ[1] = |FOO=|
environ[3] = |COLORED_STDERR_FDS=2,|
environ[3] = |COLORED_STDERR_PRIVATE_FDS=2,|
argv[0] = |./example_exec|
argv[1] = |foo|
argv[2] = |bar|
environ[0] = |TEST=51|
environ[1] = |FOO=|
environ[3] = |COLORED_STDERR_FDS=2,|
environ[3] = |COLORED_STDERR_PRIVATE_FDS=2,|
argv[0] = |./example_exec|
environ[0] = |TEST=52|
environ[1] = |FOO=|
environ[3] = |COLORED_STDERR_FDS=2,|
environ[3] = |COLORED_STDERR_PRIVATE_FDS=2,|
argv[0] = |./example_exec|
argv[1] = |foo|
argv[2] = |bar|
environ[0] = |TEST=53|
environ[1] = |FOO=|
environ[3] = |COLORED_STDERR_FDS=2,|
environ[3] = |COLORED_STDERR_PRIVATE_FDS=2,|
argv[0] = |./example_exec|
environ[0] = |TEST=54|
environ[2] = |COLORED_STDERR_FDS=2,|
environ[2] = |COLORED_STDERR_PRIVATE_FDS=2,|
argv[0] = |./example_exec|
argv[1] = |foo|
argv[2] = |bar|
environ[0] = |TEST=55|
environ[2] = |COLORED_STDERR_FDS=2,|
environ[2] = |COLORED_STDERR_PRIVATE_FDS=2,|
Done.