From 1911d483e552a6ec73b2c107b968268e7e9111e5 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 8 Feb 2011 14:43:07 -0800 Subject: Add fdopendir(). --- source3/configure.in | 1 + source3/include/proto.h | 1 + source3/lib/system.c | 16 ++++++++++++++++ 3 files changed, 18 insertions(+) diff --git a/source3/configure.in b/source3/configure.in index f0d8de7ddb..363fbac352 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -1099,6 +1099,7 @@ AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt lseek64 ftruncate64 posix_fallocat AC_CHECK_FUNCS(fallocate fallocate64) AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam) AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64) +AC_CHECK_FUNCS(fdopendir fdopendir64) AC_CHECK_FUNCS(getpwent_r) AC_CHECK_FUNCS(getdents64) AC_CHECK_FUNCS(setenv strcasecmp fcvt fcvtl) diff --git a/source3/include/proto.h b/source3/include/proto.h index 2f2c62747d..77a7a4055a 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -890,6 +890,7 @@ int sys_open(const char *path, int oflag, mode_t mode); FILE *sys_fopen(const char *path, const char *type); void kernel_flock(int fd, uint32 share_mode, uint32 access_mask); SMB_STRUCT_DIR *sys_opendir(const char *name); +SMB_STRUCT_DIR *sys_fdopendir(int fd); SMB_STRUCT_DIRENT *sys_readdir(SMB_STRUCT_DIR *dirp); void sys_seekdir(SMB_STRUCT_DIR *dirp, long offset); long sys_telldir(SMB_STRUCT_DIR *dirp); diff --git a/source3/lib/system.c b/source3/lib/system.c index 4cf6a299da..57434f2d42 100644 --- a/source3/lib/system.c +++ b/source3/lib/system.c @@ -866,6 +866,22 @@ SMB_STRUCT_DIR *sys_opendir(const char *name) #endif } +/******************************************************************* + An fdopendir wrapper that will deal with 64 bit filesizes. +********************************************************************/ + +SMB_STRUCT_DIR *sys_fdopendir(int fd) +{ +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_FDOPENDIR64) + return fdopendir64(fd); +#elif defined(HAVE_FDOPENDIR) + return fdopendir(fd); +#else + errno = ENOSYS; + return NULL; +#endif +} + /******************************************************************* A readdir wrapper that will deal with 64 bit filesizes. ********************************************************************/ -- cgit