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