From: Denys Vlasenko <vda.linux@googlemail.com>
To: musl <musl@lists.openwall.com>, Rich Felker <dalias@libc.org>
Subject: shell needs to change fd in a FILE
Date: Mon, 31 Jul 2017 17:05:24 +0200 [thread overview]
Message-ID: <CAK1hOcPZNYAwAjH0V702gZ6kMscK=xdb2SLCX1SptvG4T69PQg@mail.gmail.com> (raw)
Hi,
I'm using ordinary FILE i/o for reading scripts in hush shell,
instead of rolling my own implementation, so that I can reuse
buffering code in libc, through the use of fgetc().
This works for almost all cases, except this one: if in script
I have a redirect which says shell wants to open a fd which happens
to be equal to the fd (say, 10) shell already used for script FILE:
exec 10>FILE
What other shells do in this situation is they simply
dup and close script fd [in real code, they use fcntl(F_DUPFD)
instead of dup() since they want to avoid getting low fds],
so that fd is "moved" and no longer collides with the redirect.
I can do this trick, but since I use FILE interface, then
I need to inform libc that it needs to use new fd for this FILE.
"fileno(fp) = new_fd;" is non-portable and does not work in either
musl or glibc: it's a function, not a macro referencing
(fp)->field_holding_fd.
"fclose(fp); fp = fdopen(new_fd);" is not good since fp may have
some buffered input, which will be lost by such code.
How about adding a "set_fileno(fp, fd)" extension to musl,
with some easy define to probe for to conditionally use it?
next reply other threads:[~2017-07-31 15:05 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-31 15:05 Denys Vlasenko [this message]
2017-07-31 20:18 ` Rich Felker
2017-08-02 12:08 ` Denys Vlasenko
2017-08-02 15:38 ` Rich Felker
2017-08-02 16:02 ` Denys Vlasenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAK1hOcPZNYAwAjH0V702gZ6kMscK=xdb2SLCX1SptvG4T69PQg@mail.gmail.com' \
--to=vda.linux@googlemail.com \
--cc=dalias@libc.org \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).