Brian Candler wrote:
I noticed something odd in rad_unlockfd - both 2.x.x and master. .. That is: to unlock, the command should be F_SETLK(W) and the l_type should be F_UNLCK. The OSX (BSD) manpage agrees.
On Linux, the constant F_UNLCK is 2, so calling fcntl(fd, F_UNLCK...) is the same as calling fcntl(fd, F_SETFD...)
OK.
The other oddity is using SEEK_CUR for both lock and unlock. If you have written to the file in the mean time, then the current file offset will have changed, so you may end up unlocking a different byte range to the one you locked. I'd say SEEK_SET with offset 0 and length 0 (which locks or unlocks the entire file, including past its end) is safest - at least when unlocking.
That sounds right, IIRC.
As far as I can see, only rad_utmp calls this function, so the impact is not huge.
OK. Alan DeKok.