compile samba-2.2.4 on Solaris 7

Juergen Hasch Hasch at t-online.de
Thu May 30 11:33:02 GMT 2002


Hi Eric,

Am Donnerstag, 30. Mai 2002 16:45 schrieb Eric Boehm:
> On Thu, May 30, 2002 at 10:55:45PM +1000, Andrew Bartlett wrote:
> >>>>> "Tian"   == Tian-xiong Lu <tianl at agrecon.canberra.edu.au> writes:
> >>>>> "Jerry"  == Gerald Carter <jerry at samba.org> writes:
> >>>>> "Andrew" == Andrew Bartlett <abartlet at pcug.org.au> writes:
>
>     Tian> Just tried compling samba-2.2.4 on a Solaris 7 box with two
>     Tian> configure options: --with-libsmbclient --with-acl-support
>
>     Tian> When compiling I got a warning message like this: In
>     Tian> function "sys_readdir" lib/system.c 331 Warning: return from
>     Tian> incompatible pointer type.
>
>     Jerry> Am looking into it.
>
>     Andrew> BTW, this is one of the things currently blocking us from
>     Andrew> building on the Cray.  (Now that just means that we will
>     Andrew> find the next one, but anyway...)
>
> I've seen the following behavior on Solaris 8.
>
> 1. compiling 32-bit with Sun Workshop, configure checks for and finds
>    readdir64... yes
>    dirent64... yes
>
> 2. compiling 32-bit with Sun Workshop, configure checks for and finds
>    readdir64... no
>    dirent64... yes
>
> I believe that this is because the test program for readdir64 is
> incorrect.

I believe the test program isn't that wrong. Wouldn't it be correct simply not 
to use dirent64 at all if readdir64 isn't defined ?

For the 32 bit case (which I am using anyway), the warning comes from the 
declaration of readdir64 as:
 struct dirent *readdir64(DIR *);
instead of 
 struct dirent64 *readdir64(DIR *);
which might be expected.

Looking at sys/dirent.h:

typedef struct dirent {
	ino_t		d_ino;
	off_t		d_off;
	unsigned short	d_reclen;
	char		d_name[1];
} dirent_t;

typedef struct dirent64 {
	ino64_t		d_ino;
	off64_t		d_off;
	unsigned short	d_reclen;
	char		d_name[1];
} dirent64_t;

A small test program reveals:
hasch@/home/hasch/solaris/test> gcc -o test test.c
hasch@/home/hasch/solaris/test> ./test
sizeof(ino_t)=4
sizeof(off_t)=4
sizeof(ino64_t)=8
sizeof(off64_t)=8
hasch@/home/hasch/solaris/test> gcc -D_FILE_OFFSET_BITS=64 -o test test.c
hasch@/home/hasch/solaris/test> ./test
sizeof(ino_t)=8
sizeof(off_t)=8
sizeof(ino64_t)=8
sizeof(off64_t)=8

So (at least for Solaris 8 which is what I am using) SMB_STRUCT_DIRENT can 
always be defined as dirent.

...Juergen






More information about the samba-technical mailing list