char * xceasctime (const struct tm *tb) { static char buf[_ASCBUFSIZE]; char *p = buf; int day, mon; int i; p = buf; day = tb->tm_wday * 3; mon = tb->tm_mon * 3; for (i=0; i < 3; i++,p++) { *p = *(__dnames + day + i); *(p+4) = *(__mnames + mon + i); } *p = ' '; p += 4; *p++ = ' '; p = store_dt(p, tb->tm_mday); *p++ = ' '; p = store_dt(p, tb->tm_hour); *p++ = ':'; p = store_dt(p, tb->tm_min); *p++ = ':'; p = store_dt(p, tb->tm_sec); *p++ = ' '; p = store_dt(p, 19 + (tb->tm_year/100)); p = store_dt(p, tb->tm_year%100); *p++ = '\n'; *p = '\0'; return buf; }
errno_t __cdecl _tasctime_s ( _TSCHAR *buffer, size_t sizeInChars, const struct tm *tb ) { _TSCHAR *p = buffer; int day, mon; int i; _VALIDATE_RETURN_ERRCODE( ( buffer != NULL ) && ( sizeInChars > 0 ), EINVAL ) _RESET_STRING(buffer, sizeInChars); _VALIDATE_RETURN_ERRCODE( ( sizeInChars >= _ASCBUFSIZE ), EINVAL ) _VALIDATE_RETURN_ERRCODE( ( tb != NULL ), EINVAL ) _VALIDATE_RETURN_ERRCODE( ( tb->tm_year >= 0 ), EINVAL ) // month 0 based _VALIDATE_RETURN_ERRCODE( ( ( tb->tm_mon >= 0 ) && ( tb->tm_mon <= 11 ) ), EINVAL ) // hour/min/sec 0 based _VALIDATE_RETURN_ERRCODE( ( ( tb->tm_hour >= 0 ) && ( tb->tm_hour <= 23 ) ), EINVAL ) _VALIDATE_RETURN_ERRCODE( ( ( tb->tm_min >= 0 ) && ( tb->tm_min <= 59 ) ), EINVAL ) _VALIDATE_RETURN_ERRCODE( ( ( tb->tm_sec >= 0 ) && ( tb->tm_sec <= 59 ) ), EINVAL ) // day 1 based _VALIDATE_RETURN_ERRCODE( ( ( tb->tm_mday >= 1 ) && ( // Day is in valid range for the month ( ( _days[ tb->tm_mon + 1 ] - _days[ tb->tm_mon ] ) >= tb->tm_mday ) || // Special case for Feb in a leap year ( ( IS_LEAP_YEAR( tb->tm_year + 1900 ) ) && ( tb->tm_mon == 1 ) && ( tb->tm_mday <= 29 ) ) ) ), EINVAL ) // week day 0 based _VALIDATE_RETURN_ERRCODE( ( ( tb->tm_wday >= 0 ) && ( tb->tm_wday <= 6 ) ), EINVAL ) /* copy day and month names into the buffer */ day = tb->tm_wday * 3; /* index to correct day string */ mon = tb->tm_mon * 3; /* index to correct month string */ for (i=0; i < 3; i++,p++) { *p = *(__dnames + day + i); *(p+4) = *(__mnames + mon + i); } *p = _T(' '); /* blank between day and month */ p += 4; *p++ = _T(' '); p = store_dt(p, tb->tm_mday); /* day of the month (1-31) */ *p++ = _T(' '); p = store_dt(p, tb->tm_hour); /* hours (0-23) */ *p++ = _T(':'); p = store_dt(p, tb->tm_min); /* minutes (0-59) */ *p++ = _T(':'); p = store_dt(p, tb->tm_sec); /* seconds (0-59) */ *p++ = _T(' '); p = store_dt(p, 19 + (tb->tm_year/100)); /* year (after 1900) */ p = store_dt(p, tb->tm_year%100); *p++ = _T('\n'); *p = _T('\0'); return 0; }