summaryrefslogtreecommitdiffstatshomepage
path: root/src/tools/imgtool/modules/prodos.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/imgtool/modules/prodos.cpp')
-rw-r--r--src/tools/imgtool/modules/prodos.cpp35
1 files changed, 15 insertions, 20 deletions
diff --git a/src/tools/imgtool/modules/prodos.cpp b/src/tools/imgtool/modules/prodos.cpp
index 4c01612283f..f5b27537671 100644
--- a/src/tools/imgtool/modules/prodos.cpp
+++ b/src/tools/imgtool/modules/prodos.cpp
@@ -186,24 +186,19 @@ enum creation_policy_t
-static time_t prodos_crack_time(uint32_t prodos_time)
-{
- struct tm t;
- time_t now;
-
- time(&now);
- t = *localtime(&now);
-
- t.tm_sec = 0;
- t.tm_min = (prodos_time >> 16) & 0x3F;
- t.tm_hour = (prodos_time >> 24) & 0x1F;
- t.tm_mday = (prodos_time >> 0) & 0x1F;
- t.tm_mon = (prodos_time >> 5) & 0x0F;
- t.tm_year = (prodos_time >> 9) & 0x7F;
-
- if (t.tm_year <= 49)
- t.tm_year += 100;
- return mktime(&t);
+static imgtool::datetime prodos_crack_time(uint32_t prodos_time)
+{
+ util::arbitrary_datetime dt;
+ dt.second = 0;
+ dt.minute = ((prodos_time >> 16) & 0x3F);
+ dt.hour = ((prodos_time >> 24) & 0x1F);
+ dt.day_of_month = ((prodos_time >> 0) & 0x1F);
+ dt.month = ((prodos_time >> 5) & 0x0F) + 1;
+ dt.year = ((prodos_time >> 9) & 0x7F) + 1900;
+ if (dt.year <= 1949)
+ dt.year += 100;
+
+ return imgtool::datetime(imgtool::datetime::datetime_type::LOCAL, dt);
}
@@ -2039,10 +2034,10 @@ static imgtoolerr_t prodos_diskimage_getattrs(imgtool::partition &partition, con
break;
case IMGTOOLATTR_TIME_CREATED:
- values[i].t = prodos_crack_time(ent.creation_time);
+ values[i].t = prodos_crack_time(ent.creation_time).to_time_t();
break;
case IMGTOOLATTR_TIME_LASTMODIFIED:
- values[i].t = prodos_crack_time(ent.lastmodified_time);
+ values[i].t = prodos_crack_time(ent.lastmodified_time).to_time_t();
break;
}
}