From e580fd501b67b9e0a56a712ffb24ec3c244a135b Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Tue, 24 Jan 2012 19:41:04 +0200 Subject: Fill in more struct stat fields in lo_apk_lstat() Set uid and gid to that of the process, atime to current time, mtime and ctime to the modification timestamp of the archive entry. --- sal/android/lo-bootstrap.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'sal/android') diff --git a/sal/android/lo-bootstrap.c b/sal/android/lo-bootstrap.c index aaf823703231..d28c8e999a1b 100644 --- a/sal/android/lo-bootstrap.c +++ b/sal/android/lo-bootstrap.c @@ -1076,9 +1076,15 @@ new_stat(const char *path, int mode, int fake_ino) { + struct tm tm; + memset(statp, 0, sizeof(*statp)); statp->st_mode = mode | S_IRUSR | S_IRGRP | S_IROTH; statp->st_nlink = 1; + + statp->st_uid = getuid(); + statp->st_gid = getgid(); + if (entry != NULL) statp->st_size = entry->uncompressed_size; else @@ -1088,11 +1094,26 @@ new_stat(const char *path, statp->st_blocks = 0; else statp->st_blocks = (statp->st_size - 1) / statp->st_blksize + 1; - /* Leave timestamps at zero for now? */ + + statp->st_atime = time(NULL); + + memset(&tm, 0, sizeof(tm)); + tm.tm_sec = (letoh16(entry->lastmod_time) & 0x1F) * 2; + tm.tm_min = (letoh16(entry->lastmod_time) >> 5) & 0x3F; + tm.tm_hour = (letoh16(entry->lastmod_time) >> 11) & 0x1F; + tm.tm_mday = letoh16(entry->lastmod_date) & 0x1F; + tm.tm_mon = ((letoh16(entry->lastmod_date) >> 5) & 0x0F) - 1; + tm.tm_year = ((letoh16(entry->lastmod_date) >> 9) & 0x7F) + 80; + + statp->st_mtime = mktime(&tm); + statp->st_ctime = statp->st_mtime; + statp->st_ino = fake_ino; (void) path; - /* LOGI("lo_apk_lstat(%s) = { st_mode=%o, st_size=%lld, st_ino=%lld }", path, statp->st_mode, statp->st_size, statp->st_ino); */ + /* LOGI("lo_apk_lstat(%s) = { mode=%o, size=%lld, ino=%lld mtime=%.24s }", + path, statp->st_mode, statp->st_size, statp->st_ino, + ctime((const time_t *) &statp->st_mtime)); */ return 0; } -- cgit