From: Miklos S. <mi...@sz...> - 2008-07-25 21:26:25
|
On Fri, 25 Jul 2008, Daniel Benamy wrote: > On Wednesday 23 July 2008 02:51:37 Miklos Szeredi wrote: > > On Tue, 22 Jul 2008, Daniel Benamy wrote: > > > So filler() won't ever return 1 when used in this mode? > > > > It will only return 1 if it failed to allocate memory for the buffer. > > If it can ever return 1 on error, doesn't readdir need to indicate > that? Like so: > > --- fusexmp.c 2006-02-02 09:04:51.000000000 -0800 > +++ fusexmp-readdir-error.c 2008-07-25 10:22:36.000000000 -0700 > @@ -78,7 +78,7 @@ > st.st_ino = de->d_ino; > st.st_mode = de->d_type << 12; > if (filler(buf, de->d_name, &st, 0)) > - break; > + return -EINVAL; > } > > closedir(dp); > > Am I missing something? The filler function will store the error value in the buffer, and the caller will check that and return the stored error. So the original code is correct, and the above patch would actually make it worse: - the wrong error value is returned (EINVAL instead of ENOMEM) - closedir() is not called, causing memory and a file descriptor to leak Miklos |