On 20.06.2013 18:54, Rainer Jung wrote: > One correction see below. > > On 20.06.2013 18:02, Mattias Engdegård wrote: >> 20 jun 2013 kl. 16.54 skrev Ivan Zhakov: >> >>> It seems the code is missing #ifdef SVN_UNALIGNED_ACCESS_IS_OK . The >>> attached patch should fix problem, but I'm not sure that this is right >>> solution for the problem. >> >> Assuming the hash function does not need to be portable (which appears >> likely from a cursory look at the code), that fix is basically correct, >> if you move out the assignment i=0 to right before the section you made >> conditional. The following loop will complete the hash. >> In other words, something like: >> >> Index: subversion/libsvn_fs_fs/tree.c >> =================================================================== >> --- subversion/libsvn_fs_fs/tree.c (revision 1494562) >> +++ subversion/libsvn_fs_fs/tree.c (working copy) >> @@ -353,8 +353,11 @@ >> >> /* need to do a full lookup. Calculate the hash value >> (HASH_VALUE has been initialized to REVISION). */ >> + i = 0; >> +#ifdef SVN_UNALIGNED_ACCESS_IS_OK > > ^^^^^^ #if please. The macro is always "0" or "1". > >> - for (i = 0; i + 4 <= path_len; i += 4) >> + for (; i + 4 <= path_len; i += 4) >> hash_value = hash_value * 0xd1f3da69 + *(const apr_uint32_t*)(path >> + i); >> +#endif >> >> for (; i < path_len; ++i) >> hash_value = hash_value * 33 + path[i]; >> >> (By the way, that code violates C's aliasing rules, but we probably get >> away with it in this case.)
Tested with the above "#ifdef" -> "#if" correction: "make check" now succeeds. It also succeeds with the initial patch http://svn.apache.org/r1495063. Thanks for your high-speed patching! Much appreciated. Regards, Rainer