From fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 8 Jul 2015 20:46:52 -0400 Subject: Initial commit --- unix/os/zfutim.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 unix/os/zfutim.c (limited to 'unix/os/zfutim.c') diff --git a/unix/os/zfutim.c b/unix/os/zfutim.c new file mode 100644 index 00000000..4c074f27 --- /dev/null +++ b/unix/os/zfutim.c @@ -0,0 +1,68 @@ +/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + */ + +#include +#include +#include +#ifdef SYSV +#include +#else +#include +#include +#endif +#include + +#define import_kernel +#define import_knames +#define import_spp +#include + +#define SECONDS_1970_TO_1980 315532800L + + +/* ZFUTIM -- Set the file access/modification times. Times are set in + * in units of seconds since 00:00:00 01-Jan-80, local time, as returned + * by ZFINFO. A NULL time value will not modify the field. + */ +int +ZFUTIM ( + PKCHAR *fname, + XLONG *atime, + XLONG *mtime, + XINT *status +) +{ + struct stat osfile; + struct utimbuf time; + int offset = 0; + int stat(), utime(); + + extern int ZGMTCO (); + + + /* Get UNIX file info. + */ + if (stat ((char *)fname, &osfile) == ERR) { + *status = XERR; + return (XERR); + } + + /* Get the timezone offset. Correct for daylight savings time, + * if in effect. + */ + ZGMTCO (&offset); + offset += SECONDS_1970_TO_1980; + + /* Set file access times. If time is NULL use the current value. + */ + time.actime = ((*atime == 0) ? osfile.st_atime : (*atime+offset)); + time.modtime = ((*mtime == 0) ? osfile.st_mtime : (*mtime+offset)); + + if (utime ((char *)fname, &time) == ERR) { + *status = XERR; + return (XERR); + } + *status = XOK; + + return (*status); +} -- cgit