Rsync cross-compilation problem

John Van Essen vanes002 at
Thu Jan 20 07:54:20 GMT 2005

On Wed, 19 Jan 2005, Florian Fainelli <florian at> 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
#define uint64 unsigned long long
/* As long as it gets... */
#define uint64 unsigned off_t

(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 at>

More information about the rsync mailing list