-#!/usr/bin/perl -w
+#!/usr/bin/perl -ws
#
# findrfuncs: find reentrant variants of functions used in an executable.
+#
# Requires a functional "nm -u". Searches headers in /usr/include
# to find available *_r functions and looks for non-reentrant
# variants used in the supplied executable.
#
+# Requires debug info in the shared libraries/executables.
+#
# Gurusamy Sarathy
# gsar@ActiveState.com
#
if ($^O eq 'hpux') {
delete $rfuncs{crypt_r};
delete $rfuncs{drand48_r};
+ delete $rfuncs{endgrent_r};
+ delete $rfuncs{endpwent_r};
delete $rfuncs{getgrent_r};
delete $rfuncs{getpwent_r};
delete $rfuncs{setlocale_r};
for my $exe (@EXES) {
# warn "#--- $exe\n";
- for my $sym (`$NMU $exe`) {
+ for my $sym (`$NMU $exe 2>/dev/null`) {
chomp $sym;
$sym =~ s/^\s+//;
$sym =~ s/^([0-9A-Fa-f]+\s+)?[Uu]\s+//;
$sym =~ s/\s+[Uu]\s+-$//;
- next if /\s/;
+ next if $sym =~ /\s/;
$sym =~ s/\@.*\z//; # remove @@GLIBC_2.0 etc
# warn "#### $sym\n";
if (exists $rfuncs{"${sym}_r"} && ! $syms{"$sym:$exe"}++) {
}
@syms = ();
}
-