[Patch]: Create Global Privilege

Corinna Vinschen cygwin-patches@cygwin.com
Fri Dec 5 11:14:00 GMT 2003


Two questions:

On Dec  4 22:16, Pierre A. Humblet wrote:
> +locked_append (int fd, const void * buf, size_t size)
> +{
> +  struct __flock64 lock_buffer = {F_WRLCK, SEEK_SET, 0, 0, 0};
> +  int count = 0;
> +
> +  do
> +    if ((lock_buffer.l_start = lseek64 (fd, 0, SEEK_END)) != (_off64_t)-1
> +	&& fcntl_worker (fd, F_SETLK, &lock_buffer) != -1)

What is the advantage of using lseek(SEEK_END) and using that value
for fcntl(F_SETLK, SEEK_SET) over just using fcntl(F_SETLK, SEEK_END)?
Especially since lseek(SEEK_END) is then called afterwards anyway.

> +      {
> +	if (lseek64 (fd, 0, SEEK_END) != (_off64_t)-1)
> +	  write (fd, buf, size);
> +	lock_buffer.l_type = F_UNLCK;
> +	fcntl_worker (fd, F_SETLK, &lock_buffer);
> +	break;
> +      }
> +  while (count++ < 4
> +	 && (errno == EACCES || errno == EAGAIN)
> +	 && !usleep (1000));

What is the advantage of using a finite loop with fcntl(F_SETLK) over
using fcntl(F_SETLKW) just once?  This seems potentially less secure
than F_SETLKW and also less secure than the former Mutex solution.

Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Developer                                mailto:cygwin@cygwin.com
Red Hat, Inc.



More information about the Cygwin-patches mailing list