int mru_seconds = timep - cached_minute_start[mru];
int lru_seconds = timep - cached_minute_start[lru];
int new_seconds;
- if (mru_seconds >= 0 && mru_seconds <= 59) {
+ if (cached_minute_start[mru]==0 && cached_minute_start[lru]==0) {
+ localtime_r(&timep, &cached_local_tm[lru]);
+ /* Subtract seconds to get back to the start of the minute. */
+ new_seconds = cached_local_tm[lru].tm_sec;
+ cached_minute_start[lru] = timep - new_seconds;
+ mru = lru;
+ mru_tm_slot = mru;
+ } else if (lru_seconds > 0 && (mru_seconds >= 0 && mru_seconds <= 59)) {
/* Use most-recently cached time, adjusting the seconds. */
new_seconds = mru_seconds;
- } else if (lru_seconds >= 0 && lru_seconds <= 59) {
+ } else if (mru_seconds > 0 && (lru_seconds >= 0 && lru_seconds <= 59)) {
/* Use least-recently cached time, update to most recently used. */
new_seconds = lru_seconds;
mru = lru;
/* Update least-recent cached time. */
if (localtime_r(&timep, &cached_local_tm[lru]) == NULL)
return NULL;
-
/* Subtract seconds to get back to the start of the minute. */
new_seconds = cached_local_tm[lru].tm_sec;
cached_minute_start[lru] = timep - new_seconds;
int lru = 1 - mru;
int mru_seconds = time - last_local_time[mru];
int lru_seconds = time - last_local_time[lru];
- if (mru_seconds >= 0 && mru_seconds <= 59) {
+ if (last_local_time[mru]==0 && last_local_time[lru]==0) {
+ /* First time here, update both caches */
+ UpdateCachedTime(mru, time);
+ seconds = UpdateCachedTime(lru, time);
+ } else if (mru_seconds >= 0 && mru_seconds <= 59) {
/* Use most-recently cached time. */
seconds = mru_seconds;
} else if (lru_seconds >= 0 && lru_seconds <= 59) {