diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/lib/system.c | 6 | ||||
-rw-r--r-- | source3/smbd/dir.c | 6 |
2 files changed, 10 insertions, 2 deletions
diff --git a/source3/lib/system.c b/source3/lib/system.c index 24d3c09d58..092287a602 100644 --- a/source3/lib/system.c +++ b/source3/lib/system.c @@ -868,13 +868,15 @@ SMB_STRUCT_DIR *sys_opendir(const char *name) /******************************************************************* An fdopendir wrapper that will deal with 64 bit filesizes. + Ugly hack - we need dirfd for this to work correctly in the + calling code.. JRA. ********************************************************************/ SMB_STRUCT_DIR *sys_fdopendir(int fd) { -#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_FDOPENDIR64) +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_FDOPENDIR64) && defined(HAVE_DIRFD) return fdopendir64(fd); -#elif defined(HAVE_FDOPENDIR) +#elif defined(HAVE_FDOPENDIR) && defined(HAVE_DIRFD) return fdopendir(fd); #else errno = ENOSYS; diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c index 5c502f7706..b9791e9dab 100644 --- a/source3/smbd/dir.c +++ b/source3/smbd/dir.c @@ -570,10 +570,16 @@ NTSTATUS dptr_create(connection_struct *conn, files_struct *fsp, void dptr_CloseDir(files_struct *fsp) { if (fsp->dptr) { +/* + * Ugly hack. We have defined fdopendir to return ENOSYS if dirfd also isn't + * present. I hate Solaris. JRA. + */ +#ifdef HAVE_DIRFD if (fsp->fh->fd == dirfd(fsp->dptr->dir_hnd->dir)) { /* The call below closes the underlying fd. */ fsp->fh->fd = -1; } +#endif dptr_close_internal(fsp->dptr); fsp->dptr = NULL; } |