X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=reentr.pl;h=339529fcdb1f083454e2b077129405bbc9624984;hb=41be1fbddbbc49a5c34acad74f2905b11dd0ced0;hp=1f4e6ac402d6a5b1eaadc40e6272be7ab57a5910;hpb=af685957336d0a37645ff959496386c489e0b52a;p=p5sagit%2Fp5-mst-13.2.git diff --git a/reentr.pl b/reentr.pl index 1f4e6ac..339529f 100644 --- a/reentr.pl +++ b/reentr.pl @@ -41,7 +41,7 @@ print <) { # Read in the protypes. @@ -188,7 +189,7 @@ while () { # Read in the protypes. print <_${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, <_${func}_struct_buffer); #endif EOF pushssif $endif; @@ -472,6 +478,18 @@ EOF push @struct, <_${genfunc}_size = 1024; -EOF - } else { - push @struct, <_${genfunc}_fptr = NULL; # endif EOF - my $sc = $genfunc eq 'getgrent' ? + my $sc = $genfunc eq 'grent' ? '_SC_GETGR_R_SIZE_MAX' : '_SC_GETPW_R_SIZE_MAX'; - my $sz = $genfunc eq 'getgrent' ? - '_grent_size' : '_pwent_size'; - push @size, <_${genfunc}_size = sysconf($sc); + PL_reentrant_buffer->$sz = sysconf($sc); if (PL_reentrant_buffer->$sz == -1) PL_reentrant_buffer->$sz = REENTRANTUSUALSIZE; # else # if defined(__osf__) && defined(__alpha) && defined(SIABUFSIZ) - PL_reentrant_buffer->_${genfunc}_size = SIABUFSIZ; + PL_reentrant_buffer->$sz = SIABUFSIZ; # else # ifdef __sgi - PL_reentrant_buffer->_${genfunc}_size = BUFSIZ; + PL_reentrant_buffer->$sz = BUFSIZ; # else - PL_reentrant_buffer->_${genfunc}_size = REENTRANTUSUALSIZE; + PL_reentrant_buffer->$sz = REENTRANTUSUALSIZE; # endif # endif # endif EOF - } pushinitfree $genfunc; pushssif $endif; } @@ -623,7 +634,9 @@ EOF my $b = $a; my $w = ''; substr($b, 0, $seenu{$func}) = ''; - if ($b =~ /R/) { + if ($func =~ /^random$/) { + $true = "PL_reentrant_buffer->_random_retval"; + } elsif ($b =~ /R/) { $true = "PL_reentrant_buffer->_${genfunc}_ptr"; } elsif ($b =~ /T/ && $func eq 'drand48') { $true = "PL_reentrant_buffer->_${genfunc}_double"; @@ -652,17 +665,21 @@ EOF $_ 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' ? + "&PL_reentrant_buffer->_random_retval" : $_ } split '', $b; $w = ", $w" if length $v; } my $call = "${func}_r($v$w)"; - $call = "((errno = $call))" if $r eq 'I'; + $call = "((PL_reentrant_retint = $call))" if $r eq 'I' && $func ne 'random'; push @wrap, < 0 && PL_reentrant_retint == ERANGE) || (errno == ERANGE)) ? Perl_reentrant_retry("$func"$rv) : 0)) EOF + } else { + push @wrap, <