Rsync cross-compilation problem

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


On Wed, 19 Jan 2005, Florian Fainelli <florian at 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 at umn.edu>



More information about the rsync mailing list