3-arg open: Mode für zu öffnende Pipes separat sichern
authorSven Schöling <s.schoeling@linet-services.de>
Mon, 19 Dec 2011 17:42:06 +0000 (18:42 +0100)
committerSven Schöling <s.schoeling@linet-services.de>
Mon, 19 Dec 2011 17:42:06 +0000 (18:42 +0100)
Druckvorlagen mit temporären Zwischenergebnissen werden erst mit mode ">" in
eine Temp-Datei geschrieben, und dann über die ursprüngliche Pipe ausgegeben.

Der Mode für die Datei muss dabei separat gehandhabt werden.

SL/Form.pm
bin/mozilla/io.pl

index eaee096..dc20d2c 100644 (file)
@@ -1237,7 +1237,7 @@ sub parse_template {
   $main::lxdebug->enter_sub();
 
   my ($self, $myconfig) = @_;
-  my $out;
+  my ($out, $out_mode);
 
   local (*IN, *OUT);
 
@@ -1319,13 +1319,15 @@ sub parse_template {
 
   if ($template->uses_temp_file() || $self->{media} eq 'email') {
     $out = $self->{OUT};
+    $out_mode = $self->{OUT_MODE} || '>';
     $self->{OUT} = "$self->{tmpfile}";
+    $self->{OUT_MODE} = '>';
   }
 
   my $result;
 
   if ($self->{OUT}) {
-    open(OUT, ">", $self->{OUT}) or $self->error("$self->{OUT} : $!");
+    open(OUT, $self->{OUT_MODE}, $self->{OUT}) or $self->error("error on opening $self->{OUT} with mode $self->{OUT_MODE} : $!");
   } else {
     *OUT = ($::dispatcher->get_standard_filehandles)[1];
     $self->header;
@@ -1398,7 +1400,8 @@ sub parse_template {
 
     } else {
 
-      $self->{OUT} = $out;
+      $self->{OUT}      = $out;
+      $self->{OUT_MODE} = $out_mode;
 
       my $numbytes = (-s $self->{tmpfile});
       open(IN, "<", $self->{tmpfile})
@@ -1412,7 +1415,7 @@ sub parse_template {
       #print(STDERR "OUT $self->{OUT}\n");
       for my $i (1 .. $self->{copies}) {
         if ($self->{OUT}) {
-          open OUT, '>', $self->{OUT} or $self->error($self->cleanup . "$self->{OUT} : $!");
+          open OUT, $self->{OUT_MODE}, $self->{OUT} or $self->error($self->cleanup . "$self->{OUT} : $!");
           print OUT $_ while <IN>;
           close OUT;
           seek IN, 0, 0;
index c34913a..940fec9 100644 (file)
@@ -1481,9 +1481,10 @@ sub print_form {
 
   if ($form->{media} eq 'printer') {
     #$form->{OUT} = "| $form->{printer_command} &>/dev/null";
-    $form->{OUT} = "| $form->{printer_command} ";
+    $form->{OUT}      = $form->{printer_command};
+    $form->{OUT_MODE} = '|-';
     $form->{printed} .= " $form->{formname}";
-    $form->{printed} =~ s/^ //;
+    $form->{printed}  =~ s/^ //;
   }
   my $printed = $form->{printed};
 
@@ -1510,7 +1511,8 @@ sub print_form {
     }
 
     $filename .= ($form->{postscript}) ? '.ps' : '.pdf';
-    $form->{OUT} = ">" . $::lx_office_conf{paths}->{spool} . "/$filename";
+    $form->{OUT} = $::lx_office_conf{paths}->{spool} . "/$filename";
+    $form->{OUT_MODE} = '>';
 
     # add type
     $form->{queued} .= " $form->{formname} $filename";