#!/usr/bin/perl -w use strict; use ExtUtils::MakeMaker qw(prompt); use File::Find; my $just_check = @ARGV ? $ARGV[0] eq '-c' : 0; shift if $just_check; my $dir = shift || '.'; my %names; my $prefix = 'fspr_'; while () { chomp; my($old, $new) = grep { s/^$prefix//o } split; next unless $old and $new; $names{$old} = $new; } my $pattern = join '|', keys %names; #print "replacement pattern=$pattern\n"; find sub { chomp; return unless /\.[ch]$/; my $file = "$File::Find::dir/$_"; print "looking in $file\n"; replace($_, !$just_check); }, $dir; sub replace { my($file, $replace) = @_; local *IN, *OUT; my @lines; my $found = 0; open IN, $file or die "open $file: $!"; while () { for (m/[^_\"]*$prefix($pattern)\b/og) { $found++; print " $file:$. fspr_$_ -> fspr_$names{$_}\n"; } push @lines, $_ if $replace; } close IN; return unless $found and $replace; # my $ans = prompt("replace?", 'y'); # return unless $ans =~ /^y/i; open OUT, ">$file" or die "open $file: $!"; for (@lines) { unless (/^\#include/) { s/([^_\"]*$prefix)($pattern)\b/$1$names{$2}/og; } print OUT $_; } close OUT; } __DATA__ fspr_time_t: fspr_implode_gmt fspr_time_exp_gmt_get fspr_socket_t: fspr_close_socket fspr_socket_close fspr_create_socket fspr_socket_create fspr_get_sockaddr fspr_socket_addr_get fspr_get_socketdata fspr_socket_data_get fspr_set_socketdata fspr_socket_data_set fspr_shutdown fspr_socket_shutdown fspr_bind fspr_socket_bind fspr_listen fspr_socket_listen fspr_accept fspr_socket_accept fspr_connect fspr_socket_connect fspr_send fspr_socket_send fspr_sendv fspr_socket_sendv fspr_sendto fspr_socket_sendto fspr_recvfrom fspr_socket_recvfrom fspr_sendfile fspr_socket_sendfile fspr_recv fspr_socket_recv fspr_filepath_*: fspr_filename_of_pathname fspr_filepath_name_get fspr_gid_t: fspr_get_groupid fspr_gid_get fspr_get_groupname fspr_gid_name_get fspr_group_name_get fspr_gid_name_get fspr_compare_groups fspr_gid_compare fspr_uid_t: fspr_get_home_directory fspr_uid_homepath_get fspr_get_userid fspr_uid_get fspr_current_userid fspr_uid_current fspr_compare_users fspr_uid_compare fspr_get_username fspr_uid_name_get fspr_compare_users fspr_uid_compare