Some Solaris 8/Sun CC warnings with 2.0.7 pre 2

David Collier-Brown davecb at
Tue Mar 21 19:40:29 GMT 2000

These are also from a configuration including --with-smbwrapper, but 
nothing else, on SunOS 5.8 Generic,  sun4u sparc Ultra-60 using cc

Compiling param/loadparm.c with -Kpic
"param/loadparm.c", line 2025: warning: argument #2 is incompatible 
	with prototype:
        prototype: pointer to struct stat {ulong st_dev, array[3] of 
		long st_pad1, ulong st_ino, ulong st_mode, ulong st_nlink, 			long
st_uid, lo... : "/usr/include/sys/stat_impl.h", line 26
        argument : pointer to struct stat64 {ulong st_dev, array[3] of 
		long  st_pad1, ullong st_ino, ulong st_mode, ulong st_nlink,
		 long st_uid,...

I suspect we should have just stat, not stat64...
Looking at config.cache, we see:
$ grep stat64 config.cache

It's a warning for an identical struct with a "64" in its name.  

I wonder if I need a 5.8 case in configure... I'll try that as we
Nope!  Same effect.  The options selected by configure
(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64) are valid for Slolaris
Must be something else.

Hmmn: in a 64-bit, large-files-ok OS like Solaris 8, there should be
no "64" interfaces at all.  I'll try editing config.cache to make
them disappear and see what I get.

[Well, for one thing, I get overridden!  
Ok, I'll hand-edit them back out (;-)]

Yes, it compiles happily and finds the non-64 interfaces
if config.cache is changed.

	1) don't do anyhing for 2.0.7, it's just a warning
	2) for 2.0.8ff, amend the configure script to
	   use xxx() not xxx(64) in OSs supporting 64-bit
	   files by default.  This probably means a flag
	   native_largefiles, which is set for SunOS >= 5.8
	   and any other native 64bit OS (eg, Irix)

	The xxx64() interfaces are really only for 32-bit
	OSs which support 64-bit filesizes via structs and
	functions using "long long" parameters and members.
	Sun calls them "transitional", in the sense of "doomed".

Compiling lib/util_unistr.c with -Kpic
"lib/util_unistr.c", line 786: warning: statement not reached
 Compare the two strings s1 and s2. len is in ucs2 units.

int wstrcmp(const smb_ucs2_t *s1, const smb_ucs2_t *s2)
        smb_ucs2_t c1, c2;

        for (;;) {
                c1 = *s1++;
                c2 = *s2++;

                if (c1 != c2)
                        return c1 - c2;

                if (c1 == 0)
            return 0;
        return 0;   <-- line 786

The second return 0 is bogoid... I reccomend it disappear.

David Collier-Brown in Boston
Phone: (781) 442-0734, Room BUR03-3632

More information about the samba-technical mailing list