From 344e9dd33a936b429fefb67cd748ac009a1bab10 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 9 Nov 2004 22:49:28 +0000 Subject: r3642: Extend vfs to add seekdir/telldir/rewinddir. Yes I know I have to fix the modules too... First step in fixing out large directories problem. Jeremy. --- source/lib/system.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'source/lib/system.c') diff --git a/source/lib/system.c b/source/lib/system.c index b27ac5c00ad..f33d1ae7d57 100644 --- a/source/lib/system.c +++ b/source/lib/system.c @@ -361,6 +361,19 @@ FILE *sys_fopen(const char *path, const char *type) #endif } +/******************************************************************* + An opendir wrapper that will deal with 64 bit filesizes. +********************************************************************/ + +DIR *sys_opendir(const char *name) +{ +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OPENDIR64) + return opendir64(name); +#else + return opendir(name); +#endif +} + /******************************************************************* A readdir wrapper that will deal with 64 bit filesizes. ********************************************************************/ @@ -374,6 +387,58 @@ SMB_STRUCT_DIRENT *sys_readdir(DIR *dirp) #endif } +/******************************************************************* + A seekdir wrapper that will deal with 64 bit filesizes. +********************************************************************/ + +void sys_seekdir(DIR *dirp, long offset) +{ +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_SEEKDIR64) + seekdir64(dirp, offset); +#else + seekdir(dirp, offset); +#endif +} + +/******************************************************************* + A telldir wrapper that will deal with 64 bit filesizes. +********************************************************************/ + +long sys_telldir(DIR *dirp) +{ +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_TELLDIR64) + return (long)telldir64(dirp); +#else + return (long)telldir(dirp); +#endif +} + +/******************************************************************* + A rewinddir wrapper that will deal with 64 bit filesizes. +********************************************************************/ + +void sys_rewinddir(DIR *dirp) +{ +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_REWINDDIR64) + rewinddir64(dirp); +#else + rewinddir(dirp); +#endif +} + +/******************************************************************* + A close wrapper that will deal with 64 bit filesizes. +********************************************************************/ + +int sys_closedir(DIR *dirp) +{ +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_CLOSEDIR64) + return closedir64(dirp); +#else + return closedir(dirp); +#endif +} + /******************************************************************* An mknod() wrapper that will deal with 64 bit filesizes. ********************************************************************/ -- cgit