diff options
Diffstat (limited to 'src/tools/imgtool/modules/prodos.cpp')
-rw-r--r-- | src/tools/imgtool/modules/prodos.cpp | 35 |
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..6db41ae529b 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; } } |