[Fwd: [Patch] Configure broken for Solaris 2.6 (PR#12014)]
Daniel Eischen
eischen at vigrid.com
Thu Dec 17 17:03:55 GMT 1998
David Collier-Brown wrote:
> Daniel Eischen wrote:
> > Yes, we are using gcc. Hmm, but now that you mention it, the
> > gcc we were using was built for Solaris 2.5, not Solaris 2.6.
> > And the Solaris 2.6 system is also patched a recent Sun
> > recommended 2.6 patch cluster thingy.
> >
> > Subsequent to reporting this problem, I have rebuilt GCC
> > (2.8.1) for Solaris 2.6.
> >
> > Looking at the Sun include files, it still looks like we
> > should be using LARGEFILE64_x instead of LARGEFILE_x.
>
> Righto: I think I see what's happening...
>
> Samba explicitly calls statvfs64() function, and
> the sun implementation triggered by
> -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
> only makes statvfs() visible, using the 64-bit
> sizes of the various variables.
>
> I **think** this means we should check for
> a native statvfs with -D_LARGEFILE_SOURCE
> and -D_FILE_OFFSET_BITS=64, and see if it
> exists.
At a quick glance...
But, at least with Solaris 2.6 include files, if you provide
_FILE_OFFSET_BITS=64, then /usr/include/sys/statvfs.h redefines
[f]statvfs to [f]statvfs64. And the following check also fails:
/* transitional large file interface versions */
#if defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
!defined(__PRAGMA_REDEFINE_EXTNAME))
int statvfs64(const char *, struct statvfs64 *);
int fstatvfs64(int, struct statvfs64 *);
#endif /* _LARGEFILE64_SOURCE... */
because _FILE_OFFSET_BITS is 64 and __PRAGMA_REDEFINE_EXTNAME isn't
defined. So the prototypes for [f]statvfs and [f]statvfs64 are never
found. Perhaps adding -D__PRAGMA_REDEFINE_EXTNAME would make it
work for Solaris 2.6 if you didn't want to use LARGEFILE64_SOURCE.
>
> [explanation:
> _LARGEFILE_SOURCE really means "migrate all
> 32-bit calls to 64-bit,. without changing the
> function names or data structure names, just
> as if you were running on a machine with
> longs and pointers of 64 bits"
>
>
> _LARGEFILE64_SOURCE means "provide xxx64()
> functions and structs, so you can mix standard
> 32-bit calls with 64-bit calls".
>
> The latter is, in my considered (ie, not humble at all)
> opinion, a usefull kludge, suitable for a quick
> hack around a problem. Not for real code!]
>
> I loked at my 2.7 system, it ends with a sucessful
> compile-check of statfvs:
> ----
[ Config log snipped ]
It seems they've changed the Solaris include files somewhat for
Solaris 2.7. We've still got Solaris 2.7 in a box and can't
upgrade just yet.
Dan Eischen
eischen at vigrid.com
More information about the samba-technical
mailing list