#include <time.h>
#include "f00f.h"
struct tm maaktm(int sec, int min, int hour, int mday, int mon, int year, int wday, int yday, int isdst) {
struct tm tm;
tm.tm_sec = sec;
tm.tm_min = min;
tm.tm_hour = hour;
tm.tm_mday = mday;
tm.tm_mon = mon;
tm.tm_year = year;
tm.tm_wday = wday;
tm.tm_yday = yday;
tm.tm_isdst = isdst;
return tm;
}
struct tm samentm(struct tm a, struct tm b) {
struct tm tm;
tm = a;
if(b.tm_sec != -1)
tm.tm_sec = b.tm_sec;
if(b.tm_min != -1)
tm.tm_min = b.tm_min;
if(b.tm_hour != -1)
tm.tm_hour = b.tm_hour;
if(b.tm_mday != -1)
tm.tm_mday = b.tm_mday;
if(b.tm_mon != -1)
tm.tm_mon = b.tm_mon;
if(b.tm_year != -1)
tm.tm_year = b.tm_year;
if(b.tm_wday != -1)
tm.tm_wday = b.tm_wday;
if(b.tm_yday != -1)
tm.tm_yday = b.tm_yday;
if(b.tm_isdst != -1)
tm.tm_isdst = b.tm_isdst;
return tm;
}
time_t fixtm(struct tm tm, time_t nu) {
struct tm nutm, tmp;
time_t t;
localtime_r(&nu, &nutm);
tmp = samentm(nutm, tm);
t = mktime(&tmp);
localtime_r(&t, &tmp);
if(tm.tm_wday != -1) {
if(tm.tm_mday != -1) {
if(tmp.tm_wday != tm.tm_wday)
return -1;
} else {
tmp.tm_mday += tm.tm_wday - tmp.tm_wday + (tm.tm_wday <= tmp.tm_wday ? 7 : 0);
}
} else {
if(tm.tm_mday != -1 && tmp.tm_mday != tm.tm_mday)
return -1;
}
return mktime(&tmp);
}