cvs commit: src/sys/kern vfs_syscalls.c

Diomidis Spinellis dds at aueb.gr
Tue Jan 3 15:49:27 PST 2006


Poul-Henning Kamp wrote:
> In message <200601032158.k03LwMGP031138 at repoman.freebsd.org>, Diomidis Spinellis writes:
> 
>>dds         2006-01-03 21:58:22 UTC
>>
>> FreeBSD src repository
>>
>> Modified files:
>>   sys/kern             vfs_syscalls.c 
>> Log:
>> Normalize the tv_usec part of the utimes(2) arguments to ensure
>> that a file's atime and mtime are only set to correct fractional
>> second values (0-999999000ns with the current interface).
>> Prior to this change users could create files with values outside
>> that range.  Moreover, on 32-bit machines tv_usec offsets larger than
>> 4.3s would result in an unnormalized AND wrong timestamp value,
>> due to overflow.
> 
> 
> I think this is wrong.  We should return EINVAL if the fractional
> part is not correct.

I saw that one coming :-)  Solaris (SunOS 5.10) returns EINVAL, Mac OS X 
Tiger and Linux 2.4.21 appear to ignore the field, and NetBSD 1.5 
follows our buggy behavior.  POSIX is silent on the matter, and does not 
specify EINVAL in the list of prescribed errno values 
<http://www.opengroup.org/onlinepubs/007908799/xsh/utimes.html>.

However, POSIX, in general, allows returning additional error codes:
  Implementations may support additional errors not included in this
  list, may generate errors included in this list under circumstances
  other than those described here, or may contain extensions or
  limitations that prevent some errors from occurring. The ERRORS section
  on each reference page specifies whether an error shall be returned, or
  whether it may be returned. Implementations shall not generate a
  different error number from the ones described here for error
  conditions described in this volume of IEEE Std 1003.1-2001, but may
  generate additional errors unless explicitly disallowed for a
  particular function.

On the other hand, normalization is easy, relatively efficient, follows 
the letter of the standard, and will not break existing software.  As a 
precedent, consider that Unix traditionaly normalizes filename paths.

Diomidis - dds@


More information about the cvs-all mailing list