On 03/09/2016 12:02 PM, Greg Kurz wrote: > On Wed, 2 Mar 2016 23:41:43 +0800 > Jevon Qiao <[email protected]> wrote: >
>> +}
>> +
>> +static int cephfs_readdir_r(FsContext *ctx, V9fsFidOpenState *fs,
>> + struct dirent *entry,
>> + struct dirent **result)
>> +{
>> + int ret;
>> +
>> + return ret;
>
> This function should behave like the original readdir_r() function from the
> C library, but it doesn't.
>
readdir_r() is hopelessly broken. POSIX is withdrawing it as such.
http://austingroupbugs.net/view.php?id=696
readdir() should be all the more any sane program needs, because it
should already be thread-safe.
> According to the the libcephfs.h header:
>
> * @returns 1 if the next entry was filled in, 0 if the end of the directory
> stream was reached,
> * and a negative error code on failure.
> */
> int ceph_readdir_r(struct ceph_mount_info *cmount, struct ceph_dir_result
> *dirp, struct dirent *de);
>
> and the readdir_r() manual page says:
>
> The readdir_r() function returns 0 on success. On error, it returns a
> positive error number (listed under ERRORS). If the end of the direcā
> tory stream is reached, readdir_r() returns 0, and returns NULL in
> *result.
readdir_r() can silently overflow buffers, with no recourse. Its use
should not be encouraged.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
