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
Received on 2013-06-20 20:42:01 CEST