local $drv = "$cups_ppd_dir/$_[0]->{'name'}.ppd";
undef($cups_driver_options);
if ($_[1]->{'mode'} == 0) {
- &system_logged("rm -f \"$drv\"");
+ &unlink_file($drv);
return undef;
}
elsif ($_[1]->{'mode'} == 2) {
- &system_logged("rm -f \"$drv\"");
+ &unlink_file($drv);
return $_[1]->{'file'};
}
else {
# Copy the driver into place
if ($_[1]->{'ppd'} =~ /\.gz$/) {
- &system_logged("gunzip -c '$_[1]->{'ppd'}' >$drv");
+ &system_logged("gunzip -c ".quotemeta($_[1]->{'ppd'}).
+ " >".quotemeta($drv));
}
else {
- &system_logged("cp $_[1]->{'ppd'} $drv");
+ ©_source_dest($_[1]->{'ppd'}, $drv);
}
chmod(0777, $drv);
$cups_driver_options = $_[1]->{'opts'}; # for modify_printer
# delete_driver(name)
sub delete_driver
{
-&system_logged("rm -f \"$cups_ppd_dir/$_[0].ppd\"");
+&unlink_file("$cups_ppd_dir/$_[0].ppd");
}
# driver_input(&printer, &driver)
" -type f -print", 1, 1);
while(<FIND>) {
chop;
+ next if (/\.xml$/); # Ignore XML PPD sources
/([^\/]+)$/;
next if ($donefile{$1}++);
push(@files, $_);
{
local ($file) = @_;
local %ppd;
-if ($file =~ /\/([^\/+])\.xml$/) {
- # XML format PPD
- $ppd{'NickName'} = $1;
- open(PPD, $file);
- while(<PPD>) {
- if (/<make>(\S+)<\/make>/) {
- $ppd{'Manufacturer'} = $1;
- }
- if (/<model>(\S+)<\/model>/) {
- $ppd{'ModelName'} = $1;
- }
- }
- close(PPD);
+if ($file =~ /\.gz$/) {
+ open(PPD, "gunzip -c ".quotemeta($file)." |");
}
else {
- # Old text format PPD
- if ($file =~ /\.gz$/) {
- open(PPD, "gunzip -c ".quotemeta($file)." |");
- }
- else {
- open(PPD, $file);
+ open(PPD, $file);
+ }
+while(<PPD>) {
+ if (/^\s*\*(\S+):\s*"(.*)"/ || /^\s*\*(\S+):\s*(\S+)/) {
+ $ppd{$1} = $2;
}
- while(<PPD>) {
- if (/^\s*\*(\S+):\s*"(.*)"/ || /^\s*\*(\S+):\s*(\S+)/) {
- $ppd{$1} = $2;
- }
- elsif (/^\s*\*(\S+)\s+(\S+)\/([^:]+):/) {
- $ppd{$1}->{$2} = $3 if (!defined($ppd{$1}->{$2}));
- }
+ elsif (/^\s*\*(\S+)\s+(\S+)\/([^:]+):/) {
+ $ppd{$1}->{$2} = $3 if (!defined($ppd{$1}->{$2}));
}
- close(PPD);
}
+close(PPD);
return \%ppd;
}