1#!/usr/bin/perl -w 2use strict; 3use ExtUtils::MakeMaker qw(prompt); 4use File::Find; 5 6my $just_check = @ARGV ? $ARGV[0] eq '-c' : 0; 7shift if $just_check; 8my $dir = shift || '.'; 9my %names; 10 11my $prefix = 'apr_'; 12 13while (<DATA>) { 14 chomp; 15 my($old, $new) = grep { s/^$prefix//o } split; 16 next unless $old and $new; 17 $names{$old} = $new; 18} 19 20my $pattern = join '|', keys %names; 21#print "replacement pattern=$pattern\n"; 22 23find sub { 24 chomp; 25 return unless /\.[ch]$/; 26 my $file = "$File::Find::dir/$_"; 27 print "looking in $file\n"; 28 29 replace($_, !$just_check); 30 31}, $dir; 32 33sub replace { 34 my($file, $replace) = @_; 35 local *IN, *OUT; 36 my @lines; 37 my $found = 0; 38 39 open IN, $file or die "open $file: $!"; 40 41 while (<IN>) { 42 for (m/[^_\"]*$prefix($pattern)\b/og) { 43 $found++; 44 print " $file:$. apr_$_ -> apr_$names{$_}\n"; 45 } 46 push @lines, $_ if $replace; 47 } 48 49 close IN; 50 51 return unless $found and $replace; 52 53# my $ans = prompt("replace?", 'y'); 54# return unless $ans =~ /^y/i; 55 56 open OUT, ">$file" or die "open $file: $!"; 57 58 for (@lines) { 59 unless (/^\#include/) { 60 s/([^_\"]*$prefix)($pattern)\b/$1$names{$2}/og; 61 } 62 print OUT $_; 63 } 64 65 close OUT; 66} 67 68__DATA__ 69apr_time_t: 70apr_implode_gmt apr_time_exp_gmt_get 71 72apr_socket_t: 73apr_close_socket apr_socket_close 74apr_create_socket apr_socket_create 75apr_get_sockaddr apr_socket_addr_get 76apr_get_socketdata apr_socket_data_get 77apr_set_socketdata apr_socket_data_set 78apr_shutdown apr_socket_shutdown 79apr_bind apr_socket_bind 80apr_listen apr_socket_listen 81apr_accept apr_socket_accept 82apr_connect apr_socket_connect 83apr_send apr_socket_send 84apr_sendv apr_socket_sendv 85apr_sendto apr_socket_sendto 86apr_recvfrom apr_socket_recvfrom 87apr_sendfile apr_socket_sendfile 88apr_recv apr_socket_recv 89 90apr_filepath_*: 91apr_filename_of_pathname apr_filepath_name_get 92 93apr_gid_t: 94apr_get_groupid apr_gid_get 95apr_get_groupname apr_gid_name_get 96apr_group_name_get apr_gid_name_get 97apr_compare_groups apr_gid_compare 98 99apr_uid_t: 100apr_get_home_directory apr_uid_homepath_get 101apr_get_userid apr_uid_get 102apr_current_userid apr_uid_current 103apr_compare_users apr_uid_compare 104apr_get_username apr_uid_name_get 105apr_compare_users apr_uid_compare 106 107