Well, as it turns out there is always just one more bug. After doing all that weird stuff to support Tru64 5.0 we just found one bug that appearently is in our Alpha port since ages. In some of the RPC calls we do transfer inode and device number as the ONC/RPC xdr type u_long, which is exactly 32 bits due to historic baggage. We did put the value in question into an u_long variable (there is no portable way to transfer dev_t or ino_t) and then did transfer that value. With the DEC specific ADVFS file system now device numbers (which are 32 bit signed ints) are negative, causing the u_long which is 64 bit as per argument passing to accumulate some extra 0xffffffff bits due to sign extension from the cast. The xdr_u_long routine now on Tru64 does check that the top 32 bits are indeed zero and fails the conversion, causing the whole RPC to fail mysteriously only on some file system types. Naturally our test machine had only UFS until recently...
