void __tmValidate( struct tm *pTime ) { struct tm t; int jday; int mon; /* Set local structure */ t = *pTime; /* Normalize */ __tmNormalize(&t.tm_min, &t.tm_sec, SECSPERMIN); __tmNormalize(&t.tm_hour, &t.tm_min, MINSPERHOUR); __tmNormalize(&t.tm_mday, &t.tm_hour, HOURSPERDAY); __tmNormalize(&t.tm_year, &t.tm_mon, MONSPERYEAR); /* Calulcate julian day */ jday = __julday(t.tm_year, t.tm_mon, t.tm_mday); /* Calulcate month and day */ for (mon = 0; (jday > __julday(t.tm_year, mon + 1, 0)) && (mon < 11); mon++); t.tm_mon = mon; t.tm_mday = jday - __julday(t.tm_year, mon, 0); t.tm_wday = 0; t.tm_yday = 0; *pTime = t; }
/******************************************************************************* * * __tmValidate - validate the broken-down structure, tmptr. * * RETURNS: the validated structure. * NOMANUAL */ LOCAL void __tmValidate ( struct tm * tmptr /* pointer to broken-down structure */ ) { struct tm tmStruct; int jday; int mon; /* Adjust timeptr to reflect a legal time * Is it within range 1970-2038? */ tmStruct = *tmptr; __tmNormalize (&tmStruct.tm_min, &tmStruct.tm_sec, SECSPERMIN); __tmNormalize (&tmStruct.tm_hour, &tmStruct.tm_min, MINSPERHOUR); __tmNormalize (&tmStruct.tm_mday, &tmStruct.tm_hour, HOURSPERDAY); __tmNormalize (&tmStruct.tm_year, &tmStruct.tm_mon, MONSPERYEAR); /* tm_mday may not be in the correct range - check */ jday = __julday (tmStruct.tm_year, tmStruct.tm_mon , tmStruct.tm_mday); if (jday < 0) { tmStruct.tm_year--; jday += DAYSPERYEAR; } /* Calulate month and day */ for (mon = 0; (jday > __julday (tmStruct.tm_year, mon+1, 0)) && (mon < 11); mon++ ) ; tmStruct.tm_mon = mon; tmStruct.tm_mday = jday - __julday (tmStruct.tm_year, mon, 0); tmStruct.tm_wday = 0; tmStruct.tm_yday = 0; *tmptr = tmStruct; }