From 48c56024aaca34cff701cf13df96527e049b7809 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Fri, 4 Sep 2020 14:33:32 +0200 Subject: [PATCH] tools/systemd/tm_editor: add setter/getter for months/years/days add_* are modeled after add_days subtract one for set_mon to have a consistent interface for all fields (i.e. getter/setter return/expect the 'real' number, not the ones in the tm struct) Signed-off-by: Dominik Csapak --- src/tools/systemd/tm_editor.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/tools/systemd/tm_editor.rs b/src/tools/systemd/tm_editor.rs index 677e0520..770bb280 100644 --- a/src/tools/systemd/tm_editor.rs +++ b/src/tools/systemd/tm_editor.rs @@ -19,6 +19,29 @@ impl TmEditor { Ok(epoch) } + /// increases the year by 'years' and resets all smaller fields to their minimum + pub fn add_years(&mut self, years: libc::c_int) -> Result<(), Error> { + if years == 0 { return Ok(()); } + self.t.tm_mon = 0; + self.t.tm_mday = 1; + self.t.tm_hour = 0; + self.t.tm_min = 0; + self.t.tm_sec = 0; + self.t.tm_year += years; + self.normalize_time() + } + + /// increases the month by 'months' and resets all smaller fields to their minimum + pub fn add_months(&mut self, months: libc::c_int) -> Result<(), Error> { + if months == 0 { return Ok(()); } + self.t.tm_mday = 1; + self.t.tm_hour = 0; + self.t.tm_min = 0; + self.t.tm_sec = 0; + self.t.tm_mon += months; + self.normalize_time() + } + /// increases the day by 'days' and resets all smaller fields to their minimum pub fn add_days(&mut self, days: libc::c_int) -> Result<(), Error> { if days == 0 { return Ok(()); } @@ -30,6 +53,8 @@ impl TmEditor { } pub fn year(&self) -> libc::c_int { self.t.tm_year + 1900 } // see man mktime + pub fn month(&self) -> libc::c_int { self.t.tm_mon + 1 } + pub fn day(&self) -> libc::c_int { self.t.tm_mday } pub fn hour(&self) -> libc::c_int { self.t.tm_hour } pub fn min(&self) -> libc::c_int { self.t.tm_min } pub fn sec(&self) -> libc::c_int { self.t.tm_sec } @@ -83,7 +108,7 @@ impl TmEditor { } pub fn set_mon(&mut self, v: libc::c_int) -> Result<(), Error> { - self.t.tm_mon = v; + self.t.tm_mon = v - 1; self.normalize_time() }