regex: also remove dependency on HAVE_WCSCOLL
[gnulib.git] / lib / md4.c
index 6307b46..e1079b6 100644 (file)
--- a/lib/md4.c
+++ b/lib/md4.c
@@ -1,6 +1,6 @@
 /* Functions to compute MD4 message digest of files or memory blocks.
    according to the definition of MD4 in RFC 1320 from April 1992.
-   Copyright (C) 1995-1997, 1999-2003, 2005-2006, 2008-2012 Free Software
+   Copyright (C) 1995-1997, 1999-2003, 2005-2006, 2008-2013 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
@@ -67,7 +67,7 @@ md4_init_ctx (struct md4_ctx *ctx)
 /* Copy the 4 byte value from v into the memory location pointed to by *cp,
    If your architecture allows unaligned access this is equivalent to
    * (uint32_t *) cp = v  */
-static inline void
+static void
 set_uint32 (char *cp, uint32_t v)
 {
   memcpy (cp, &v, sizeof v);
@@ -301,13 +301,13 @@ md4_process_block (const void *buffer, size_t len, struct md4_ctx *ctx)
   uint32_t B = ctx->B;
   uint32_t C = ctx->C;
   uint32_t D = ctx->D;
+  uint32_t lolen = len;
 
   /* First increment the byte count.  RFC 1320 specifies the possible
      length of the file up to 2^64 bits.  Here we only compute the
      number of bytes.  Do a double word increment.  */
-  ctx->total[0] += len;
-  if (ctx->total[0] < len)
-    ++ctx->total[1];
+  ctx->total[0] += lolen;
+  ctx->total[1] += (len >> 31 >> 1) + (ctx->total[0] < lolen);
 
   /* Process all bytes in the buffer with 64 bytes in each round of
      the loop.  */