On Wed, 19 Jan 2005, Florian Fainelli <florian@alphacore.net>
wrote:>
> And when using the cross compiler, I get the following message :
>
> In file included from rsync.c:23:
> rsync.h:360: warning: no semicolon at end of struct or union
> rsync.h:360: error: parse error before "inode"
> rsync.h:361: error: parse error before "dev"
> rsync.h:361: warning: type defaults to `int' in declaration of
`dev'
> rsync.h:361: warning: data definition has no type or storage class
The problem code is:
struct idev {
uint64 inode;
uint64 dev;
};
uint64 is defined by this code earlier in rsync.h:
#if (SIZEOF_LONG == 8)
#define uint64 unsigned long
#elif (SIZEOF_INT == 8)
#define uint64 unsigned int
#elif HAVE_LONGLONG
#define uint64 unsigned long long
#else
/* As long as it gets... */
#define uint64 unsigned off_t
#endif
(Note to Wayne - isn't it dangerous to assume that off_t is 64 bits?
I don't see any diagnostic test for uint64 less than 64 bits, like
there is for int64 in io.c.)
What values are used by rsync for these tests? Find out via:
egrep "SIZEOF|LONGLONG" config.h
Please copy the output into your reply.
If the sizes are not 8 and HAVE_LONGLONG is 0 then it is using
"unsigned off_t" for uint64, and if off_t is a typedef, a modifier
such as unsigned is not allowed. That could be the source of your
compilation errors.
If HAVE_LONGLONG is 0, look in config.log for long long to see why
the test for it failed. Does your cross compiler really not have it?
--
John Van Essen Univ of MN Alumnus <vanes002@umn.edu>