[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Another daylight savings time fix
From: |
John Fowler |
Subject: |
Another daylight savings time fix |
Date: |
Mon, 29 Oct 2001 08:13:47 -0700 (MST) |
I am using GNU Make version 3.79.1.
The last fix I sent in was when daylight savings time started. It was
a fix for VMS to arscan.c in the VMS_get_member_info() function, as follows:
#ifdef __DECC
val = decc$fix_time (&mhd->mhd$l_datim) + timezone - daylight*3600;
#endif
I added the "daylight" variable to this line. Unfortunately, I hadn't
realized that the daylight variable always has the value 1 if your time zone
ever goes to daylight savings time, whether or not you are currently in it.
So now it's not working again. Grrrrr.
I've made another fix that will hopefully work whether or not we are in
daylight savings time. Here is the new function in its entirety:
static int
VMS_get_member_info (module, rfa)
struct dsc$descriptor_s *module;
unsigned long *rfa;
{
int status, i;
long int fnval;
time_t val;
static struct dsc$descriptor_s bufdesc =
{ 0, DSC$K_DTYPE_T, DSC$K_CLASS_S, NULL };
struct mhddef *mhd;
char filename[128];
#ifdef __DECC
int isdst;
#endif
bufdesc.dsc$a_pointer = filename;
bufdesc.dsc$w_length = sizeof (filename);
status = lbr$set_module (&VMS_lib_idx, rfa, &bufdesc,
&bufdesc.dsc$w_length, 0);
if (! (status & 1))
{
error (NILF, _("lbr$set_module failed to extract module info, status = %d^
status);
lbr$close (&VMS_lib_idx);
return 0;
}
mhd = (struct mhddef *) filename;
#ifdef __DECC
val = time(NULL);
if (localtime(&val)->tm_isdst > 0)
isdst = 1;
else
isdst = 0;
val = decc$fix_time (&mhd->mhd$l_datim) + timezone - isdst*3600;
#endif
for (i = 0; i < module->dsc$w_length; i++)
filename[i] = _tolower ((unsigned char)module->dsc$a_pointer[i]);
filename[i] = '\0';
VMS_member_date = (time_t) -1;
fnval =
(*VMS_function) (-1, filename, 0, 0, 0, 0, val, 0, 0, 0,
VMS_saved_memname);
if (fnval)
{
VMS_member_date = fnval;
return 0;
}
else
return 1;
}
The changes are the isdst variable declared near the top, and the new
code inside the #ifdef __DECC block.
I'll let you know in April if this still doesn't work....
John Fowler
address@hidden
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Another daylight savings time fix,
John Fowler <=