The branch, v3-6-test has been updated via 03c7777 dirfd doesn't exist in some platforms. from 88b192f s3: Fix a 64-bit warning in vfs_gpfs.c
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test - Log ----------------------------------------------------------------- commit 03c7777fa9c4454c5c69aaba937f665dde253d3e Author: Jeremy Allison <j...@samba.org> Date: Fri Feb 25 17:25:36 2011 -0800 dirfd doesn't exist in some platforms. Hack that should get the buildfarm back to green. Ensure dirfd() needs to be defined before we properly return fdopendir. This will do until we get a proper dirfd() defined in libreplace. From http://www.gnu.org/software/hello/manual/gnulib/dirfd.html This function is missing on some platforms: AIX 7.1, HP-UX 11, OSF/1 5.1, Solaris 10, mingw. Jeremy. Autobuild-User: Jeremy Allison <j...@samba.org> Autobuild-Date: Sat Feb 26 04:19:55 CET 2011 on sn-devel-104 (cherry picked from commit c8a242d9fcb16df41a36b67ce2a8d43a3853b103) ----------------------------------------------------------------------- Summary of changes: source3/lib/system.c | 6 ++++-- source3/smbd/dir.c | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/lib/system.c b/source3/lib/system.c index 24d3c09..092287a 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 5c502f7..b9791e9 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; } -- Samba Shared Repository