#if CRYPT_R_PROTO == REENTRANT_PROTO_B_CCD
$seend{$func} _${func}_data;
#else
- $seent{$func} _${func}_struct;
+ $seent{$func} *_${func}_struct_buffer;
#endif
EOF
push @init, <<EOF;
-#if defined(__GLIBC__) || defined(__EMX__)
- PL_reentrant_buffer->_${func}_struct.initialized = 0;
- /* work around glibc-2.2.5 bug */
- PL_reentrant_buffer->_${func}_struct.current_saltbits = 0;
+#if CRYPT_R_PROTO != REENTRANT_PROTO_B_CCD
+ PL_reentrant_buffer->_${func}_struct_buffer = 0;
+#endif
+EOF
+ push @free, <<EOF;
+#if CRYPT_R_PROTO != REENTRANT_PROTO_B_CCD
+ Safefree(PL_reentrant_buffer->_${func}_struct_buffer);
#endif
EOF
pushssif $endif;
$_ eq 'D' ?
"&PL_reentrant_buffer->_${genfunc}_data" :
$_ eq 'S' ?
- ($func =~ /^readdir/ ?
+ ($func =~ /^readdir\d*$/ ?
"PL_reentrant_buffer->_${genfunc}_struct" :
- "&PL_reentrant_buffer->_${genfunc}_struct" ) :
+ $func =~ /^crypt$/ ?
+ "PL_reentrant_buffer->_${genfunc}_struct_buffer" :
+ "&PL_reentrant_buffer->_${genfunc}_struct") :
$_ eq 'T' && $func eq 'drand48' ?
"&PL_reentrant_buffer->_${genfunc}_double" :
$_ =~ /^[ilt]$/ && $func eq 'random' ?