mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Fix: Closing a FD within a comsub broke output (rhbz#1116072)
Another Red Hat patch. "Prior to this update, the result of a
command substitution was lost if a file descriptor used for the
substitution was previously explicitly closed. With this update,
ksh no longer reuses file descriptors that were closed during the
execution of a command substitution. Now, command substitutions
work as expected in the described situation."
Prior discussion:
https://bugzilla.redhat.com/1116072
Original patch:
642af4d6/f/ksh-20140929-safefd.patch
src/cmd/ksh93/include/io.h,
src/cmd/ksh93/sh/io.c:
- Add sh_iosafefd() function to get a file descriptor that is not
in use or otherwise occupied (including marked as closed).
src/cmd/ksh93/sh/subshell.c: sh_subshell():
- Use that function to obtain a safe FD upon restoring state when
exiting a command substitution. I don't really know the how and
why -- all that I/O magic is still beyond me and the code is
uncommented as usual.
src/cmd/ksh93/tests/subshell.sh:
- Add regression test from the reproducer in the bug, reduced to
the minimum necessary.
This commit is contained in:
parent
18b3f4aa28
commit
045fe6a110
4 changed files with 37 additions and 1 deletions
|
@ -79,6 +79,7 @@ extern Sfio_t *sh_iostream(Shell_t*,int);
|
|||
extern int sh_redirect(Shell_t*,struct ionod*,int);
|
||||
extern void sh_iosave(Shell_t *, int,int,char*);
|
||||
extern int sh_iovalidfd(Shell_t*, int);
|
||||
extern int sh_iosafefd(Shell_t*, int);
|
||||
extern int sh_inuse(Shell_t*, int);
|
||||
extern void sh_iounsave(Shell_t*);
|
||||
extern void sh_iounpipe(Shell_t*);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue