about summary refs log tree commit diff
path: root/crypt/crypt_util.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-07-22 23:25:40 -0400
committerUlrich Drepper <drepper@gmail.com>2011-07-22 23:25:40 -0400
commit8e2045f55574da097d4fee54aaf1496546e8950c (patch)
tree27e21e3ada767c5c440bd5528ba7b2c787b22ab1 /crypt/crypt_util.c
parent90f139ddd0cfbb1f0b0ebd1fb73d4e2a2765f83b (diff)
downloadglibc-8e2045f55574da097d4fee54aaf1496546e8950c.tar.gz
glibc-8e2045f55574da097d4fee54aaf1496546e8950c.tar.xz
glibc-8e2045f55574da097d4fee54aaf1496546e8950c.zip
Optimize __init_des_r
Diffstat (limited to 'crypt/crypt_util.c')
-rw-r--r--crypt/crypt_util.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/crypt/crypt_util.c b/crypt/crypt_util.c
index 2576ccbce5..04b262d9c8 100644
--- a/crypt/crypt_util.c
+++ b/crypt/crypt_util.c
@@ -492,10 +492,20 @@ small_tables_done:
    *
    */
 
-  _ufc_clearmem((char*)__data->sb0, (int)sizeof(__data->sb0));
-  _ufc_clearmem((char*)__data->sb1, (int)sizeof(__data->sb1));
-  _ufc_clearmem((char*)__data->sb2, (int)sizeof(__data->sb2));
-  _ufc_clearmem((char*)__data->sb3, (int)sizeof(__data->sb3));
+  if (__data->sb0 + sizeof (__data->sb0) == __data->sb1
+      && __data->sb1 + sizeof (__data->sb1) == __data->sb2
+      && __data->sb2 + sizeof (__data->sb2) == __data->sb3)
+    _ufc_clearmem(__data->sb0,
+		  (int)sizeof(__data->sb0)
+		  + (int)sizeof(__data->sb1)
+		  + (int)sizeof(__data->sb2)
+		  + (int)sizeof(__data->sb3));
+  else {
+    _ufc_clearmem(__data->sb0, (int)sizeof(__data->sb0));
+    _ufc_clearmem(__data->sb1, (int)sizeof(__data->sb1));
+    _ufc_clearmem(__data->sb2, (int)sizeof(__data->sb2));
+    _ufc_clearmem(__data->sb3, (int)sizeof(__data->sb3));
+  }
 
   for(sg = 0; sg < 4; sg++) {
     int j1, j2;