From 27dfc7c14ea181d538446138801537a713601ee6 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 7 May 2002 12:06:32 +0000 Subject: extended the wrapper layer, we can't depend on much in the "real" dirent struct since it differs too much between unixes. d_name is there, the rest we get with stat() calls to simulate the target dirent properly git-svn-id: svn://svn.rockbox.org/rockbox/trunk@492 a1c6a512-1295-4272-9138-f99709370657 --- uisimulator/x11/io.c | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) (limited to 'uisimulator/x11/io.c') diff --git a/uisimulator/x11/io.c b/uisimulator/x11/io.c index 0452d65ae8..726bfa26a2 100644 --- a/uisimulator/x11/io.c +++ b/uisimulator/x11/io.c @@ -1,31 +1,55 @@ +#include #include "dir.h" -#define SIMULATOR_ARCHOS_ROOT "archos" +#undef DIR -DIR *x11_opendir(char *name) +MYDIR *x11_opendir(char *name) { char buffer[256]; /* sufficiently big */ + MYDIR *my = (MYDIR *)malloc(sizeof(MYDIR)); if(name[0] == '/') { sprintf(buffer, "%s%s", SIMULATOR_ARCHOS_ROOT, name); - return opendir(buffer); + my->dir=(DIR *)opendir(buffer); } - return opendir(name); + else + my->dir=(DIR *)opendir(name); + + my->name = (char *)strdup(name); + + return my; } -struct dirent *x11_readdir(DIR *dir) +struct dirent *x11_readdir(MYDIR *dir) { + char buffer[512]; /* sufficiently big */ static struct dirent secret; + struct stat s; - struct x11_dirent *x11 = (readdir)(dir); + struct x11_dirent *x11 = (readdir)(dir->dir); strcpy(secret.d_name, x11->d_name); - secret.attribute = (x11->d_type == DT_DIR)?ATTR_DIRECTORY:0; + + /* build file name */ + sprintf(buffer, SIMULATOR_ARCHOS_ROOT "%s/%s", + dir->name, x11->d_name); + stat(buffer, &s); /* get info */ + + secret.attribute = S_ISDIR(s.st_mode)?ATTR_DIRECTORY:0; + secret.size = s.st_size; return &secret; } +void x11_closedir(MYDIR *dir) +{ + free(dir->name); + (closedir)(dir->dir); + + free(dir); +} + int x11_open(char *name, int opts) { -- cgit v1.2.3