updated directory functions, not fully working and untested yet

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@300 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Felix Arends 2002-04-28 16:52:43 +00:00
parent 17947b7898
commit 66ff6214ae
2 changed files with 43 additions and 9 deletions

View file

@ -17,7 +17,8 @@
* *
****************************************************************************/ ****************************************************************************/
#include <windows.h> #include <io.h>
#include <malloc.h>
#include "file-win32.h" #include "file-win32.h"
#include "file.h" #include "file.h"
@ -30,11 +31,36 @@ DIR *opendir (
char *dirname // directory name char *dirname // directory name
) )
{ {
DIR *p = (DIR*)malloc(sizeof(DIR)); DIR *p = (DIR*)malloc(sizeof(DIR));
if (_findfirst (dirname, &p) == -1) struct _finddata_t fd;
if ((p->handle = _findfirst (dirname, &fd)) == -1)
{ {
free (p); free (p);
return NULL; return NULL;
} }
return p; return p;
} }
// closedir
// close directory
int closedir (
DIR *dir // previously opened dir search
)
{
free(dir);
return 0;
}
// read dir
// read next entry in directory
dirent *readdir (
DIR *dir
)
{
struct _finddata_t fd;
if (_findnext (dir->handle, &fd) == -1)
return NULL;
memcpy (dir->fd.d_name, fd.name, 256);
dir->fd.d_reclen = sizeof (dirent);
return &dir->fd;
}

View file

@ -22,13 +22,21 @@
#include <io.h> #include <io.h>
typedef _finddata_t DIR; struct direnttag
struct dirent
{ {
long __d_reserved[4]; long d_ino; /* inode number */
unsigned short d_ino; /* Just for compatibility, it's junk */ long d_off; /* offset to the next dirent */
char d_name[256]; /* FIXME: use NAME_MAX? */ unsigned short d_reclen;/* length of this record */
unsigned char d_type; /* type of file */
char d_name[256]; /* filename */
}; };
typedef struct direnttag dirent;
struct DIRtag
{
dirent fd;
intptr_t handle;
};
typedef struct DIRtag DIR;
#endif // #ifndef __FILE_WIN32_H__ #endif // #ifndef __FILE_WIN32_H__