/* * Copyright 2015 (c) Anna Schumaker. */ #include #include #include #include void date_set(struct date *date, unsigned int year, unsigned int month, unsigned int day) { if (date) { date->d_year = year; date->d_month = month; date->d_day = day; } } void date_today(struct date *date) { time_t rawtime = time(NULL); struct tm *now = localtime(&rawtime); date_set(date, now->tm_year + 1900, now->tm_mon + 1, now->tm_mday); } void date_read(struct file *f, struct date *date) { date->d_year = file_readu(f); date->d_month = file_readu(f); date->d_day = file_readu(f); } void date_read_stamp(struct file *f, struct date *date) { date->d_stamp = be32toh(file_readu(f)); } void date_write(struct file *f, struct date *date) { file_writef(f, "%u %u %u", date->d_year, date->d_month, date->d_day); } void date_write_stamp(struct file *f, struct date *date) { file_writef(f, "%u", htobe32(date->d_stamp)); } gchar *date_string(const struct date *date) { struct tm tm = { .tm_year = date->d_year - 1900, .tm_mon = date->d_month - 1, .tm_mday = date->d_day, }; return string_tm2str(&tm); } int date_compare(const struct date *lhs, const struct date *rhs) { int ret = lhs->d_year - rhs->d_year; if (ret != 0) return ret; ret = lhs->d_month - rhs->d_month; if (ret != 0) return ret; return lhs->d_day - rhs->d_day; }