[Box Backup] Cygwin build
Ben Summers
boxbackup@fluffy.co.uk
Fri, 16 Apr 2004 09:27:22 +0100
On 16 Apr 2004, at 02:34, Paul Arch wrote:
>>
>> That's possibly me making a tiny mistake. Try changing the function to
>> read
>>
>> box_time_t GetCurrentBoxTime()
>> {
>> ASSERT(sizeof(uint32_t) == sizeof(time_t));
>> return SecondsToBoxTime((uint32_t)time(0));
>> }
>>
> Yep that worked. But I also had another problem, I added this to
> BoxTime.h
> to resolve ( please advise ? )
> typedef unsigned int int32;
> inline box_time_t SecondsToBoxTime(int32 Seconds)
> {
> return ((box_time_t)Seconds * MICRO_SEC_IN_SEC_LL);
> }
What problems did this resolve? If it's a compile error in another
file, it's best done by casting, for example if this doesn't work:
SecondsToBoxTime(value)
do
SecondsToBoxTime((uint32_t)value)
>
>>
>> Looks promising!
>>
>
> With the above changes, and some more includes etc, I have compiled
> successfully :
> bbackupctl
> bbackupd
>
> I am currently tracking down issues in:
> bbackupquery
> bbstored
> bbstoreaccounts
> I seem to be having this problem (which relates to LinuxWorkaround
> somehow
> ? )
> RaidFileRead.cpp: In static member function `static bool
> RaidFileRead::ReadDirectoryContents(int, const std::string&, int,
> std::vector<std::string, std::allocator<std::string> >&)':
> RaidFileRead.cpp:1597: error: 'struct dirent' has no member named
> 'd_type'
> RaidFileRead.cpp:1597: error: `DT_REG' undeclared (first use this
> function)
> RaidFileRead.cpp:1597: error: (Each undeclared identifier is reported
> only
> once
>
> for each function it appears in.)
> RaidFileRead.cpp:1625: error: 'struct dirent' has no member named
> 'd_type'
> RaidFileRead.cpp:1625: error: `DT_DIR' undeclared (first use this
> function)
> make[1]: *** [../../debug/lib/raidfile/RaidFileRead.o] Error 1
> make[1]: Leaving directory `/boxbackup-0.05/lib/raidfile'
> make: *** [dep_modules] Error 2
>
>
> Urgh ! Something to do with Cygwin and it determining difference
> between DIR
> and FILEs.
Linux has a "bug" where it doesn't conform to standards, and omits to
actually fill in the dirent structure. The Linux types implementing
Cygwyn obviously took this a step further, and omitted the field
entirely.
The LinuxWorkaround_FinishDirentStruct finishes the structure by doing
a stat(), and adjusting this field accordingly. This obviously won't
work if the field is there.
> Anyway, I added a definition for "d_type" ( ** WARNING - I DONT KNOW
> WHAT I
> AM DOING ;) )for my dirent structure in /usr/include/sys/dirent.h,
> since it
> didnt seem to exist, and LinuxWorkaround_FinishDirentStruct was
> attempting
> to set it.
You must never alter system headers. Programs compiled with them won't
work.
> I do believe this is correct, I have read elsewhere you need to
> use 'stat' within cygwin for DIR/FILE type.
> struct dirent
> {
> long d_version;
> ino_t d_ino;
> long d_fd;
> unsigned long __ino32;
> char d_name[256];
> int d_type;
> };
You should actually just alter the code in bbackupquery to use stat to
work out which is which. As a #define with PLATFORM_CYGWYN, of course,
wouldn't want to spoil it for the other platforms.
>
>
> So, it looks like **EVERYTHING** seems to compile **OK**.
> I do get these warnings :
> warning: ISO C requires whitespace after the macro name
> warning: extra tokens at end of #ifdef directive
Which line and file?
>
> I will now setup server on linux box (actually upgrade to v0.05 from
> 0.03PLUS2), and try running the backup client. If this works, I have
> achieved what I have
> set out to do. I am reluctant to try running the server, especially
> because
> of the DIR/FILE issue. Shall keep you posted ;)
In the other message, you said it didn't, but as you've identified from
the logs, you're having problems with 64 bit network byte order
swapping -- in that it isn't swapping the order, so the server gets
spurious values to work with. Other swaps seem to work though. You'll
need to make sure that the hton64 and ntoh64 defines do actually swap
stuff. It looks like the __cpu_to_be64 and __be64_to_cpu functions
don't do anything on Cygwin.
Ben