diff --git a/src/registry/registerRecordDeviceDriver.pl b/src/registry/registerRecordDeviceDriver.pl index 17adeee81..3fa64cbe3 100755 --- a/src/registry/registerRecordDeviceDriver.pl +++ b/src/registry/registerRecordDeviceDriver.pl @@ -9,6 +9,10 @@ eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*- # in file LICENSE that is included with this distribution. #************************************************************************* +use FindBin qw($Bin); +use lib "$Bin/../../lib/perl"; +use EPICS::Path; + ($file, $subname, $bldTop) = @ARGV; $numberRecordType = 0; $numberDeviceSupport = 0; @@ -18,8 +22,9 @@ $numberDriverSupport = 0; $c_bad_ident_chars = '[^0-9A-Za-z_]'; $subname =~ s/$c_bad_ident_chars/_/g; -# Escape back-slashes in Windows path -$bldTop =~ s(\\)(\\\\)g if $^O eq 'MSWin32'; +# Process bldTop like convertRelease.pl does +$bldTop = LocalPath(UnixPath($bldTop)); +$bldTop =~ s/([\\"])/\\\1/g; # escape back-slashes and double-quotes open(INP,"$file") or die "$! opening file"; while() { diff --git a/src/tools/convertRelease.pl b/src/tools/convertRelease.pl index ac02802bd..fbdcf0606 100644 --- a/src/tools/convertRelease.pl +++ b/src/tools/convertRelease.pl @@ -144,6 +144,7 @@ sub cdCommands { my $startup = $cwd; $startup =~ s/^$root/$iocroot/o if ($opt_t); + $startup =~ s/([\\"])/\\\1/g; # escape back-slashes and double-quotes print OUT "startup = \"$startup\"\n"; @@ -156,6 +157,7 @@ sub cdCommands { foreach my $app (@includes) { my $iocpath = my $path = $macros{$app}; $iocpath =~ s/^$root/$iocroot/o if ($opt_t); + $iocpath =~ s/([\\"])/\\\1/g; # escape back-slashes and double-quotes my $app_lc = lc($app); print OUT "$app_lc = \"$iocpath\"\n" if (-d $path); @@ -187,6 +189,7 @@ sub envPaths { foreach my $app (@includes) { my $iocpath = my $path = $macros{$app}; $iocpath =~ s/^$root/$iocroot/o if ($opt_t); + $iocpath =~ s/([\\"])/\\\1/g; # escape back-slashes and double-quotes print OUT "epicsEnvSet(\"$app\",\"$iocpath\")\n" if (-d $path); } close OUT; diff --git a/src/tools/fullPathName.pl b/src/tools/fullPathName.pl index 15a614885..da921f6dc 100644 --- a/src/tools/fullPathName.pl +++ b/src/tools/fullPathName.pl @@ -28,6 +28,9 @@ $Getopt::Std::OUTPUT_HELP_VERSION = 1; my $path = AbsPath(shift); +# Escape shell special characters unless on Windows, which doesn't allow them. +$path =~ s/([!"\$&'\(\)*,:;<=>?\[\\\]^`{|}])/\\\1/g unless $^O eq 'MSWin32'; + print "$path\n";