From: Alexander Aring <alex.aring@gmail.com>
To: Sascha Hauer <s.hauer@pengutronix.de>
Cc: barebox@lists.infradead.org
Subject: Re: [RFC 3/3] libbb: read_full: use read return instead size
Date: Fri, 28 Feb 2014 18:58:51 +0100 [thread overview]
Message-ID: <20140228175850.GA1867@omega> (raw)
In-Reply-To: <20140228171207.GA615@omega>
On Fri, Feb 28, 2014 at 06:12:07PM +0100, Alexander Aring wrote:
> Hi Sascha,
>
> On Fri, Feb 28, 2014 at 03:21:18PM +0100, Sascha Hauer wrote:
> > On Fri, Feb 28, 2014 at 09:03:34AM +0100, Alexander Aring wrote:
> > > On Fri, Feb 28, 2014 at 08:44:28AM +0100, Alexander Aring wrote:
> > > > Signed-off-by: Alexander Aring <alex.aring@gmail.com>
> > > > ---
> > > > lib/libbb.c | 2 +-
> > > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > > >
> > > > diff --git a/lib/libbb.c b/lib/libbb.c
> > > > index 189a170..c8d0835 100644
> > > > --- a/lib/libbb.c
> > > > +++ b/lib/libbb.c
> > > > @@ -162,7 +162,7 @@ int read_full(int fd, void *buf, size_t size)
> > > > int now;
> > > > int total = 0;
> > > >
> > > > - while (size) {
> > > > + while (now) {
> > > > now = read(fd, buf, size);
> > > > if (now == 0)
> > > > return total;
> > > and this should be a:
> > >
> > > do {
> > > ...
> > > } while (now);
> > >
> > > sry, it's only to demonstrate the issue.
> >
> > 'now' will never be 0 at the end of the loop, so you could equally well
> > write while(1). With this change we try to read as long as we read
> yes, I did it quickly to make something that command "edit" works in
> some way. The whole patches is only to demonstrate the issue. Also the
> foofs demo works if we read the whole thing at once, but that's okay for
> the test.
>
>
> > something last time, even if there's nothing left to read (size is 0).
> > What issue do you see with this function?
>
> The function read_full makes similar things like:
>
> stat(fd, &statbuf);
> ...
> read(fd, buf, statbuf.st_size);
>
> this is wrong because a filesize can be zero and read can read something
> from this file.
>
> For example procfs in linux, if you run this under linux for /proc/version
> it will do nothing.
>
> a "while (size)" don't call read because at first we checked if the file
> is zero, which don't indicate that you can read something from a file.
>
I meant s/can read/can't read/
- Alex
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2014-02-28 17:59 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-28 7:44 [RFC 0/3] current read implementation and POSIX Alexander Aring
2014-02-28 7:44 ` [RFC 1/3] ramfs: add foofs for testing Alexander Aring
2014-02-28 7:56 ` Alexander Aring
2014-03-03 8:36 ` Sascha Hauer
2014-03-03 9:08 ` Alexander Aring
2014-02-28 7:44 ` [RFC 2/3] fs: read: handle zero files Alexander Aring
2014-02-28 7:44 ` [RFC 3/3] libbb: read_full: use read return instead size Alexander Aring
2014-02-28 8:03 ` Alexander Aring
2014-02-28 14:21 ` Sascha Hauer
2014-02-28 17:12 ` Alexander Aring
2014-02-28 17:58 ` Alexander Aring [this message]
2014-03-03 8:30 ` Sascha Hauer
2014-03-03 9:04 ` Alexander Aring
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=20140228175850.GA1867@omega \
--to=alex.aring@gmail.com \
--cc=barebox@lists.infradead.org \
--cc=s.hauer@pengutronix.de \
/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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox