diff --git a/base64-decode.c b/base64-decode.c
index 74ca0afedaafc12db3417272d2809e82c3ad1e52..c332aa22c3582c398deba52626ca8e7b25afc521 100644
--- a/base64-decode.c
+++ b/base64-decode.c
@@ -31,6 +31,8 @@
 #define TABLE_SPACE -2
 #define TABLE_END -3
 
+/* FIXME: Make sure that all whitespace characters, SPC, HT, VT, FF,
+ * CR and LF are ignored. */
 static const signed char
 decode_table[0x100] =
 {
@@ -74,42 +76,39 @@ base64_decode_single(struct base64_decode_ctx *ctx,
   switch(data)
     {
     default:
-      {
-	unsigned done = 0;
-	
-	assert(data >= 0 && data < 0x40);
+      assert(data >= 0 && data < 0x40);
 	  
-	if (ctx->status != BASE64_DECODE_OK)
-	  goto invalid;
-	
-	ctx->word = ctx->word << 6 | data;
-	ctx->bits += 6;
-	
-	if (ctx->bits >= 8)
-	  {
-	    ctx->bits -= 8;
-	    dst[done++] = ctx->word >> ctx->bits;
-	  }
-	return done;
-      }
+      if (ctx->status != BASE64_DECODE_OK)
+	goto invalid;
+	  
+      ctx->word = ctx->word << 6 | data;
+      ctx->bits += 6;
+
+      if (ctx->bits >= 8)
+	{
+	  ctx->bits -= 8;
+	  dst[0] = ctx->word >> ctx->bits;
+	  return 1;
+	}
+      else return 0;
+
     case TABLE_INVALID:
     invalid:
       ctx->status = BASE64_DECODE_ERROR;
+      /* Fall through */
+      
+    case TABLE_SPACE:
       return 0;
-
+      
     case TABLE_END:
       if (!ctx->bits)
 	goto invalid;
       if (ctx->word & ( (1<<ctx->bits) - 1))
 	/* We shouldn't have any leftover bits */
 	goto invalid;
-	  
+      
       ctx->status = BASE64_DECODE_END;
       ctx->bits -= 2;
-      /* Fall through */
-      
-    case TABLE_SPACE:
-      /* Ignore */
       return 0;
     }
 }
@@ -120,13 +119,13 @@ base64_decode_update(struct base64_decode_ctx *ctx,
 		     unsigned length,
 		     const uint8_t *src)
 {
-  unsigned done = 0;
+  unsigned done;
   unsigned i;
   
   if (ctx->status == BASE64_DECODE_ERROR)
     return 0;
 
-  for (i = 0; i<length; i++)
+  for (i = 0, done = 0; i<length; i++)
     done += base64_decode_single(ctx, dst + done, src[i]);
 
   assert(done <= BASE64_DECODE_LENGTH(length));