-
- if (week_kind == WEEK_V) {
- t.tm_mday = 7 * week_number + wday - off - 3;
- } else {
- if(off == 0) off = 7;
- t.tm_mday = 7 * week_number + wday - off + 1;
+ /* Advance the relevant number of weeks */
+ tmpyday += (week_number - 1) * 7;
+ /* And go to the right day of week */
+ tmpyday += (tm->tm_wday - day_offset + 7) % 7;
+
+ /* Impossible yday for incomplete week (week 0). */
+ if (tmpyday < 0) {
+ if (flags & FLAG_WDAY)
+ return (NULL);
+ tmpyday = 0;