[pbs-devel] [PATCH proxmox-backup 09/10] tools/systemd/tm_editor: add setter/getter for months/years/days
Dominik Csapak
d.csapak at proxmox.com
Thu Sep 3 13:39:59 CEST 2020
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 <d.csapak at proxmox.com>
---
src/tools/systemd/tm_editor.rs | 29 ++++++++++++++++++++++++++++-
1 file changed, 28 insertions(+), 1 deletion(-)
diff --git a/src/tools/systemd/tm_editor.rs b/src/tools/systemd/tm_editor.rs
index 529e17f6..871e4c4c 100644
--- a/src/tools/systemd/tm_editor.rs
+++ b/src/tools/systemd/tm_editor.rs
@@ -34,6 +34,31 @@ 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.changes = TMChanges::all();
+ 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.changes = TMChanges::all(); // adding a month can wrap the year
+ 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(()); }
@@ -46,6 +71,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 }
@@ -105,7 +132,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.changes.insert(TMChanges::MON);
self.normalize_time()
}
--
2.20.1
More information about the pbs-devel
mailing list