diff --git a/library/base64.c b/library/base64.c
index 1a05226..f78a29b 100644
--- a/library/base64.c
+++ b/library/base64.c
@@ -171,7 +171,7 @@
     if( slen == 0 )
     {
         *olen = 0;
-        return( 0 );
+        return 0 ;
     }
 
     n = slen / 3 + ( slen % 3 != 0 );
@@ -179,7 +179,7 @@
     if( n > ( BASE64_SIZE_T_MAX - 1 ) / 4 )
     {
         *olen = BASE64_SIZE_T_MAX;
-        return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL );
+        return MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ;
     }
 
     n *= 4;
@@ -187,7 +187,7 @@
     if( ( dlen < n + 1 ) || ( NULL == dst ) )
     {
         *olen = n + 1;
-        return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL );
+        return MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ;
     }
 
     n = ( slen / 3 ) * 3;
@@ -233,7 +233,7 @@
     *olen = p - dst;
     *p = 0;
 
-    return( 0 );
+    return 0 ;
 }
 
 /*
@@ -271,18 +271,18 @@
 
         /* Space inside a line is an error */
         if( x != 0 )
-            return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER );
+            return MBEDTLS_ERR_BASE64_INVALID_CHARACTER ;
 
         if( src[i] == '=' && ++j > 2 )
-            return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER );
+            return MBEDTLS_ERR_BASE64_INVALID_CHARACTER ;
 
         dec_map_lookup = mbedtls_base64_table_lookup( base64_dec_map, sizeof( base64_dec_map ), src[i] );
 
         if( src[i] > 127 || dec_map_lookup == 127 )
-            return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER );
+            return MBEDTLS_ERR_BASE64_INVALID_CHARACTER ;
 
         if( dec_map_lookup < 64 && j != 0 )
-            return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER );
+            return MBEDTLS_ERR_BASE64_INVALID_CHARACTER ;
 
         n++;
     }
@@ -290,7 +290,7 @@
     if( n == 0 )
     {
         *olen = 0;
-        return( 0 );
+        return 0 ;
     }
 
     /* The following expression is to calculate the following formula without
@@ -303,7 +303,7 @@
     if( dst == NULL || dlen < n )
     {
         *olen = n;
-        return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL );
+        return MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ;
     }
 
    for( j = 3, n = x = 0, p = dst; i > 0; i--, src++ )
@@ -327,7 +327,7 @@
 
     *olen = p - dst;
 
-    return( 0 );
+    return 0 ;
 }
 
 #if defined(MBEDTLS_SELF_TEST)
@@ -368,7 +368,7 @@
         if( verbose != 0 )
             mbedtls_printf( "failed\n" );
 
-        return( 1 );
+        return 1 ;
     }
 
     if( verbose != 0 )
@@ -382,13 +382,13 @@
         if( verbose != 0 )
             mbedtls_printf( "failed\n" );
 
-        return( 1 );
+        return 1 ;
     }
 
     if( verbose != 0 )
         mbedtls_printf( "passed\n\n" );
 
-    return( 0 );
+    return 0 ;
 }
 
 #endif /* MBEDTLS_SELF_TEST */
