| delorie.com/archives/browse.cgi | search |
| X-Authentication-Warning: | delorie.com: mail set sender to djgpp-bounces using -f |
| X-Recipient: | djgpp AT delorie DOT com |
| X-Spam-Checker-Version: | SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org |
| X-Spam-Level: | |
| X-Spam-Status: | No, score=0.5 required=5.0 tests=BAYES_50,RP_MATCHES_RCVD |
| autolearn=disabled version=3.3.2 | |
| Date: | Sun, 23 Oct 2016 09:04:52 +0300 |
| Message-Id: | <83d1irppmj.fsf@gnu.org> |
| From: | "Eli Zaretskii (eliz AT gnu DOT org) [via djgpp AT delorie DOT com]" <djgpp AT delorie DOT com> |
| To: | djgpp AT delorie DOT com |
| In-reply-to: | <580BCAA5.2000304@gmx.de> (djgpp@delorie.com) |
| Subject: | Re: A grep 2.26 test fails because fopen sets errno to EACCES when openning |
| an existing directory. | |
| References: | <580BCAA5 DOT 2000304 AT gmx DOT de> |
| X-detected-operating-system: | by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] |
| X-Received-From: | 2001:4830:134:3::e |
| Reply-To: | djgpp AT delorie DOT com |
| Errors-To: | nobody AT delorie DOT com |
| X-Mailing-List: | djgpp AT delorie DOT com |
| X-Unsubscribes-To: | listserv AT delorie DOT com |
> Date: Sat, 22 Oct 2016 22:23:01 +0200 > From: "Juan Manuel Guerrero (juan DOT guerrero AT gmx DOT de) [via djgpp AT delorie DOT com]" <djgpp AT delorie DOT com> > > While I was trying to port grep 2.26 I have observed that the implementation of > open retains errno to values that are generated by intermediary operations even > if the open operation performs well. > In this particular case an existing directory shall be open but errno is set to > EACCES by some DOS call and passed to the calling context that later uses this > errno to generate an error message. This is wrong IMHO. That's what DOS returns when you try to open a directory. > The calling context > is the grep code and not the djgpp library code. The documentation of the open > function clearly states that is at least possible to use the open function to > open a directory. Not on DOS, AFAIK. > Thus no errno number should be set as consequence of this > call if the directory exists. And this is the way linux works. On Unix, it is indeed possible to open a directory. But not on DOS. I see we've made 'open' to be able to do that, but '_open' should still error out with EACCES, because that's what DOS does. Not sure if your patch changes that. > I have changed fread and fwrite to return with EISDIR if the file pointer > corresponds to a directory I don't think EISDIR is right in this case, because Posix doesn't define that as one of the errno values returned by these functions. I think EBADF or ENXIO are better alternatives. > Of course, after having compiled grep with a changed library, the > check passes because fopen no longer fails with EACCES but the later > fread fails with EISDIR as it shall. Why does the test assume fread will fail with EISDIR? It doesn't on Unix, AFAIK.
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |