From e98bad5b386d58a6add0b7db31ea7090cb791b55 Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Tue, 18 Mar 2003 00:39:57 +0000 Subject: Added the filesize() function git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3473 a1c6a512-1295-4272-9138-f99709370657 --- firmware/common/file.c | 12 ++++++++++++ firmware/include/file.h | 1 + uisimulator/win32/file.h | 3 +++ uisimulator/win32/io.c | 9 +++++++++ uisimulator/x11/file.h | 2 ++ uisimulator/x11/io.c | 9 +++++++++ 6 files changed, 36 insertions(+) diff --git a/firmware/common/file.c b/firmware/common/file.c index d2cad7c647..8c0f9a8951 100644 --- a/firmware/common/file.c +++ b/firmware/common/file.c @@ -591,3 +591,15 @@ int lseek(int fd, int offset, int whence) return pos; } + +int filesize(int fd) +{ + struct filedesc* file = &openfiles[fd]; + + if ( !file->busy ) { + errno = EBADF; + return -1; + } + + return file->size; +} diff --git a/firmware/include/file.h b/firmware/include/file.h index 75c55bbac9..1a2f8e55be 100644 --- a/firmware/include/file.h +++ b/firmware/include/file.h @@ -64,6 +64,7 @@ extern int write(int fd, void* buf, int count); extern int remove(const char* pathname); extern int rename(const char* path, const char* newname); extern int ftruncate(int fd, unsigned int size); +extern int filesize(int fd); #endif /* SIMULATOR */ #endif /* __MINGW32__ */ diff --git a/uisimulator/win32/file.h b/uisimulator/win32/file.h index 3cda3b9d8c..7dd7c8e94c 100644 --- a/uisimulator/win32/file.h +++ b/uisimulator/win32/file.h @@ -23,11 +23,14 @@ #include int win32_rename(char *oldpath, char *newpath); +int win32_filesize(int fd); #define rename(x,y) win32_rename(x,y) +#define filesize(x,y) win32_filesize(x,y) #include "../../firmware/include/file.h" #undef rename +#undef filesize #endif diff --git a/uisimulator/win32/io.c b/uisimulator/win32/io.c index 974fdadbbd..ac85bb193e 100644 --- a/uisimulator/win32/io.c +++ b/uisimulator/win32/io.c @@ -36,3 +36,12 @@ int win32_rename(char *oldpath, char* newpath) } return -1; } + +int win32_filesize(int fd) +{ + int old = lseek(fd, 0, SEEK_CUR); + int size = lseek(fd, 0, SEEK_END); + lseek(fd, old, SEEK_SET); + + return(size); +} diff --git a/uisimulator/x11/file.h b/uisimulator/x11/file.h index cf77eea4ba..f11f5056c9 100644 --- a/uisimulator/x11/file.h +++ b/uisimulator/x11/file.h @@ -25,12 +25,14 @@ int x11_open(char *name, int opts); int x11_close(int fd); +int x11_filesize(int fd); int x11_creat(char *name, int mode); int x11_remove(char *name); int x11_rename(char *oldpath, char *newpath); #define open(x,y) x11_open(x,y) #define close(x) x11_close(x) +#define filesize(x) x11_filesize(x) #define creat(x,y) x11_creat(x,y) #define remove(x) x11_remove(x) #define rename(x,y) x11_rename(x,y) diff --git a/uisimulator/x11/io.c b/uisimulator/x11/io.c index bc9c99fa10..c33a42d636 100644 --- a/uisimulator/x11/io.c +++ b/uisimulator/x11/io.c @@ -156,6 +156,15 @@ int x11_rename(char *oldpath, char* newpath) return -1; } +int x11_filesize(int fd) +{ + int old = lseek(fd, 0, SEEK_CUR); + int size = lseek(fd, 0, SEEK_END); + lseek(fd, old, SEEK_SET); + + return(size); +} + void fat_size(unsigned int* size, unsigned int* free) { struct statfs fs; -- cgit v1.2.3