mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-08 16:11:18 +00:00
Use mg_snprintf()
This commit is contained in:
1 parent
9e634310b4
commit
f64c86d23f
22 files changed
+659
-458
No files matched your search
+37
-1
@@ -3,6 +3,42 @@
|
||||
#if MG_ENABLE_FATFS
|
||||
#include <ff.h>
|
||||
|
||||
static int mg_days_from_epoch(int y, int m, int d) {
|
||||
y -= m <= 2;
|
||||
int era = y / 400;
|
||||
int yoe = y - era * 400;
|
||||
int doy = (153 * (m + (m > 2 ? -3 : 9)) + 2) / 5 + d - 1;
|
||||
int doe = yoe * 365 + yoe / 4 - yoe / 100 + doy;
|
||||
return era * 146097 + doe - 719468;
|
||||
}
|
||||
|
||||
static time_t mg_timegm(struct tm const *t) {
|
||||
int year = t->tm_year + 1900;
|
||||
int month = t->tm_mon; // 0-11
|
||||
if (month > 11) {
|
||||
year += month / 12;
|
||||
month %= 12;
|
||||
} else if (month < 0) {
|
||||
int years_diff = (11 - month) / 12;
|
||||
year -= years_diff;
|
||||
month += 12 * years_diff;
|
||||
}
|
||||
int x = mg_days_from_epoch(year, month + 1, t->tm_mday);
|
||||
return 60 * (60 * (24L * x + t->tm_hour) + t->tm_min) + t->tm_sec;
|
||||
}
|
||||
|
||||
static time_t ff_time_to_epoch(uint16_t fdate, uint16_t ftime) {
|
||||
struct tm tm;
|
||||
memset(&tm, 0, sizeof(struct tm));
|
||||
tm.tm_sec = (ftime << 1) & 0x3e;
|
||||
tm.tm_min = ((ftime >> 5) & 0x3f);
|
||||
tm.tm_hour = ((ftime >> 11) & 0x1f);
|
||||
tm.tm_mday = (fdate & 0x1f);
|
||||
tm.tm_mon = ((fdate >> 5) & 0x0f) - 1;
|
||||
tm.tm_year = ((fdate >> 9) & 0x7f) + 80;
|
||||
return mg_timegm(&tm);
|
||||
}
|
||||
|
||||
static int ff_stat(const char *path, size_t *size, time_t *mtime) {
|
||||
FILINFO fi;
|
||||
if (path[0] == '\0' || strcmp(path, MG_FATFS_ROOT) == 0) {
|
||||
@@ -11,7 +47,7 @@ static int ff_stat(const char *path, size_t *size, time_t *mtime) {
|
||||
return MG_FS_DIR;
|
||||
} else if (f_stat(path, &fi) == 0) {
|
||||
if (size) *size = (size_t) fi.fsize;
|
||||
if (mtime) *mtime = (fi.fdate << 16) | fi.ftime;
|
||||
if (mtime) *mtime = ff_time_to_epoch(fi.fdate, fi.ftime);
|
||||
return MG_FS_READ | MG_FS_WRITE | ((fi.fattrib & AM_DIR) ? MG_FS_DIR : 0);
|
||||
} else {
|
||||
return 0;
|
||||
|
||||
Reference in new issue
Block a user