utime misusage

Henry Spencer henry at utzoo.UUCP
Sat Dec 1 03:17:38 AEST 1984

> The instances you refer to are of the form:
>         char *filename;
>         struct stat st;
>         ...
>         utime(filename, &st.st_atime);
> Despite its rather inelegant appearance, why should this fail?
> The second argument of utime(2) is expected to be the address of
> this kind of struct:
>         struct utimbuf { time_t actime, modtime; } ubuf;
> Using the address of the st_atime field of a stat(2) struct would
> provide these values correctly, because the word following st_atime in
> the structure is st_mtime (the mod. time).  Here's a picture:
>  &st.st_atime -----> st_atime      &ubuf -----> actime
>                      st_mtime                   modtime
> So is this really a bug, or is your C compiler acting strangely?

It's really a bug.  You are assuming that the st_atime + st_mtime fragment
of "struct stat" is laid out in memory the same way as a "struct utimbuf".
This is a compiler-dependent and system-dependent assumption, albeit one
that is often true on reasonable machines.
				Henry Spencer @ U of Toronto Zoology

More information about the Comp.lang.c mailing list