]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
perl refactor: use modern semantics of 'open'
authorStefano Lattarini <stefano.lattarini@gmail.com>
Wed, 28 Mar 2012 22:31:47 +0000 (00:31 +0200)
committerStefano Lattarini <stefano.lattarini@gmail.com>
Wed, 28 Mar 2012 23:05:45 +0000 (01:05 +0200)
* lib/Automake/XFile.pm: Update comments and POD documentation to
suggest a more idiomatic/modern usage.
(open): Be more robust in detecting whether the created file handle
is being opened for writing.
* lib/Automake/FileUtils.pm (update_file, contents): Call the
'Automake::XFile' and 'File::IO' constructors with two arguments
rather than one; this change obsoletes ...
(open_quote): ... this subroutine, which has thus been removed.
(@EXPORT): Drop '&open_quote'.

Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
lib/Automake/FileUtils.pm
lib/Automake/XFile.pm

index 17d8a49905dc2b28229470cae0c1388562c254d8..fc2347b7ce374954815a499045a0a78ac06421b7 100644 (file)
@@ -45,40 +45,13 @@ use Automake::ChannelDefs;
 use vars qw (@ISA @EXPORT);
 
 @ISA = qw (Exporter);
-@EXPORT = qw (&open_quote &contents
+@EXPORT = qw (&contents
              &find_file &mtime
              &update_file &up_to_date_p
              &xsystem &xsystem_hint &xqx
              &dir_has_case_matching_file &reset_dir_cache
              &set_dir_cache_file);
 
-
-=item C<open_quote ($file_name)>
-
-Quote C<$file_name> for open.
-
-=cut
-
-# $FILE_NAME
-# open_quote ($FILE_NAME)
-# -----------------------
-# If the string $S is a well-behaved file name, simply return it.
-# If it starts with white space, prepend './', if it ends with
-# white space, add '\0'.  Return the new string.
-sub open_quote($)
-{
-  my ($s) = @_;
-  if ($s =~ m/^\s/)
-    {
-      $s = "./$s";
-    }
-  if ($s =~ m/\s$/)
-    {
-      $s = "$s\0";
-    }
-  return $s;
-}
-
 =item C<find_file ($file_name, @include)>
 
 Return the first path for a C<$file_name> in the C<include>s.
@@ -168,7 +141,7 @@ sub update_file ($$;$)
 
   if ($to eq '-')
     {
-      my $in = new IO::File ("< " . open_quote ($from));
+      my $in = new IO::File $from, "<";
       my $out = new IO::File (">-");
       while ($_ = $in->getline)
        {
@@ -360,7 +333,7 @@ sub contents ($)
   my ($file) = @_;
   verb "reading $file";
   local $/;                    # Turn on slurp-mode.
-  my $f = new Automake::XFile "< " . open_quote ($file);
+  my $f = new Automake::XFile $file, "<";
   my $contents = $f->getline;
   $f->close;
   return $contents;
index 82edb2358b74cef13586ad93cd859a06968dc1e0..177dad9d3334bbf414b416482fb5dd1c2d32b6b2 100644 (file)
@@ -31,13 +31,13 @@ Automake::XFile - supply object methods for filehandles with error handling
     use Automake::XFile;
 
     $fh = new Automake::XFile;
-    $fh->open ("< file");
+    $fh->open ("file", "<");
     # No need to check $FH: we died if open failed.
     print <$fh>;
     $fh->close;
     # No need to check the return value of close: we died if it failed.
 
-    $fh = new Automake::XFile "> file";
+    $fh = new Automake::XFile "file", ">";
     # No need to check $FH: we died if new failed.
     print $fh "bar\n";
     $fh->close;
@@ -130,7 +130,7 @@ Die if opening fails.  Store the name of the file.  Use binmode for writing.
 sub open
 {
   my $fh = shift;
-  my ($file) = @_;
+  my ($file, $mode) = @_;
 
   # WARNING: Gross hack: $FH is a typeglob: use its hash slot to store
   # the 'name' of the file we are opening.  See the example with
@@ -147,7 +147,12 @@ sub open
   # (This circumvents a bug in at least Cygwin bash where the shell
   # parsing fails on lines ending with the continuation character '\'
   # and CRLF).
-  binmode $fh if $file =~ /^\s*>/;
+  # Correctly recognize usages like:
+  #  - open ($file, "w")
+  #  - open ($file, "+<")
+  #  - open (" >$file")
+  binmode $fh
+    if (defined $mode && $mode =~ /^[+>wa]/ or $file =~ /^\s*>/);
 }
 
 =item C<$fh-E<gt>close>