[PATCH v3] server: Fail if non-empty directory marked for deletion.

Chip Davis cdavis at codeweavers.com
Thu May 28 21:08:40 CDT 2020


May 28, 2020 7:44 PM, "Daniel Lehman" <dlehman25 at gmail.com> wrote:

>> + empty = 1;
>> + while (empty && (de = readdir( dir )))
>> + {
>> + if (!strcmp( de->d_name, "." ) || !strcmp( de->d_name, ".." )) continue;
>> + empty = 0;
>> 
>> You could probably break from the loop after this point, since you found what you were looking for.
> 
> it does break the loop. i originally had an explicit break, but
> changed it to break when empty is zeroed. i can switch it back if
> preferred

Ah, I see now. Sorry about that. It should be fine as is.

> 
>> + }
>> + closedir( dir );
>> + close( fd );
>> 
>> This close(2) call shouldn't be necessary, since closedir(3) does that for you. It's the reason I
>> suggested dup(2)'ing the fd in the first place. Leaving this in will set errno to EBADF, which may
>> not be desirable.
> 
> i had considered that, but the documentation suggests that using a
> file descriptor is implementation-dependent. i know that's the case
> for linux, but not sure about the others. from docs, it looks like
> freebsd, macosx, and android are the same. if that covers it, i'll
> remove the close

Let's see what POSIX has to say:

  Upon calling closedir() the file descriptor shall be closed.[1]

Most modern systems should conform to POSIX. I think you should be OK removing the close(2) call.

[1]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdopendir.html#

Chip



More information about the wine-devel mailing list