Incorrect checksum computation on 64-bit systems

This is an alternative to #540 to fix #539.

shouldn't this be something like:
```
case 6:
case 4:
case 2:
   csum += *cbuf++;
```

I mean there is no break, in the "6" case the "csum += *cbuf++;" instruction will be executed three times (that seems correct). I'm wondering if a loop isn't better (some compilers might give warnings if there is a missing break)