Viewing file: foomatic-gswrapper (2.23 KB) -rwxr-xr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/perl # -*- perl -*- # $Revision: 3.4.2.5 $
# This is a little Ghostscript regularization script. It massages # arguments to make Ghostscript execute properly as a filter, with # output on stdout and errors etc on stderr.
# Arbitrary other option processing could happen here, too.
# IT WOULD BE WRONG to have this file do any processing of the input # or output data. Such job transforms belong in actual filters, or # inside Ghostscript itself.
my $prefix = "/usr"; my $configpath = "/etc/foomatic"; # Read config file if present %conf = readConfFile("$configpath/filter.conf");
# Set GhostScript path my $gspath = "gs"; $gspath = $conf{gspath} if defined(%conf) and defined $conf{gspath}; my $execpath = "/usr/bin:/usr/local/bin:/usr/bin:/bin"; # Get execution path from config file $execpath = $conf{execpath} if defined(%conf) and defined $conf{execpath}; $ENV{'PATH'} = $execpath;
grep (m!\-sOutputFile=\-! && do { # Send the job to fd 3; errors will be on 2(stderr) and job # ps program interpreter output on 1(stdout). $_ = '-sOutputFile=/dev/fd/3'; # quoted properly below... }, @ARGV);
grep (((m!^\-$!) || (m!^\-_$!)) && do { # Get the input from fd 0. $_ = "/dev/fd/0"; }, @ARGV);
# Turn *off* -q (quiet!); now that stderr is useful! :) my @myargs = grep (! m!^\-q$!, @ARGV);
# Escape any quotes, and then quote everything just to be sure...
# Escaping a single quote inside single quotes is a bit complex as the shell # takes everything literal there. So we have to assemble it by concatinating # different quoted strings. # Finally we get e.g.: 'x'"'"'y' or ''"'"'xy' or 'xy'"'"'' or ... grep (s/\'/\'\"\'\"\'/g, @myargs); my $args = "'" . join("' '", @myargs) . "'";
# Execute Ghostscript, with both job and gs errors on stderr, and job # output on stdout...
$ENV{'GS_FONTPATH'} = '/usr/share/fonts'; print STDERR "foomatic-gswrapper: $gspath $args 3>&1 1>&2\n"; exec "$gspath $args 3>&1 1>&2";
die "Failed to execute Ghostscript?!";
# Read the config file
sub readConfFile { my ($file) = @_;
my %conf; # Read config file if present if (open CONF, "< $file") { while (<CONF>) { $conf{$1}="$2" if (m/^\s*([^\#\s]\S*)\s*:\s*(.*?)\s*$/); } close CONF; }
return %conf; }
|