Craig,

Based on my reading of Compaq's web site, we're doing the time change
correctly, though sloppily. I did find an article on "Issues with mktime
and stat function," though the circumstances of their problem were somewhat
different than mine. Based on this information, I duplicated the problem in
straight "C", and was able to work around it by disabling UTC support.

At this point, I'm about ready to throw in the towel and recompile Perl
without UTC support, and see how I like it. Have you any advice to give on
the best way to convince your procedure to convince MMK to convince CC to
define a couple symbols?

There are a couple PS's to this note. The first is a list of Compaq urls
that I thought might be relevant. The second is the code I used for
testing. I also ran the code Compaq posted to test your time change
procedure -- it says we did it right.

Thank you very much,
Tom Wyant

PS - Here are the Compaq references, in no particular order:

Issues with mktime and stat function:
http://www.compaq.com/support/asktima/appl_tools/CHAMP_SRC990518001118.html

How to set the time:
http://www.compaq.com/support/asktima/operating_systems/009C6814-B1D938A0-1C0186.html

How to adjust:
http://www.compaq.com/support/askkcs/hpcg/260_0_26164650_3115307.html

Time returned by C localtime is off by one hour:
http://www.compaq.com/support/asktima/appl_tools/CHAMP_SRC990127002633.html

Adjusting system time forward/backward:
http://www.compaq.com/support/asktima/operating_systems/009C6814-B1D938A0-1C0186.html

Method to Determine if UTC Based Time is Correctly Set:
http://www.compaq.com/support/asktima/appl_tools/CHAMP_SRC991104004012.html

PPS - The code used to duplicate the problem:
/* Defining the following gives us the correct behaviour
#define _DECC_V4_SOURCE 1
#define _VMS_V6_SOURCE 1
 */
/* Compaq says using decc$stat instead of stat will give the
   correct behaviour as well, but I can't make it link
#define stat decc$stat
 */
#include <stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main (int argc, char **argv) {
stat_t file_info;
int iter8;
for (iter8 = argc > 1 ? 1 : 0; iter8 < argc; iter8++) {
    if (!stat (argv[iter8], &file_info)) {
        printf ("File %s modified %s\n",
                argv[iter8], ctime (&file_info.st_mtime));
        }
    }
}


Reply via email to