Home | History | Annotate | Line # | Download | only in util
      1 #! /usr/bin/env perl
      2 # Copyright 2005-2018 The OpenSSL Project Authors. All Rights Reserved.
      3 #
      4 # Licensed under the Apache License 2.0 (the "License").  You may not use
      5 # this file except in compliance with the License.  You can obtain a copy
      6 # in the file LICENSE in the source distribution or at
      7 # https://www.openssl.org/source/license.html
      8 
      9 
     10 use Fcntl;
     11 
     12 
     13 # copy.pl
     14 
     15 # Perl script 'copy' comment. On Windows the built in "copy" command also
     16 # copies timestamps: this messes up Makefile dependencies.
     17 
     18 my $stripcr = 0;
     19 
     20 my $arg;
     21 my @excludes = ();
     22 
     23 foreach $arg (@ARGV) {
     24 	if ($arg eq "-stripcr")
     25 		{
     26 		$stripcr = 1;
     27 		next;
     28 		}
     29 	if ($arg =~ /^-exclude_re=(.*)$/)
     30 		{
     31 		push @excludes, $1;
     32 		next;
     33 		}
     34 	$arg =~ s|\\|/|g;	# compensate for bug/feature in cygwin glob...
     35 	$arg = qq("$arg") if ($arg =~ /\s/);	# compensate for bug in 5.10...
     36 	foreach my $f (glob $arg)
     37 		{
     38 		push @filelist, $f unless grep { $f =~ /$_/ } @excludes;
     39 		}
     40 }
     41 
     42 $fnum = @filelist;
     43 
     44 if ($fnum <= 1)
     45 	{
     46 	die "Need at least two filenames";
     47 	}
     48 
     49 $dest = pop @filelist;
     50 
     51 if ($fnum > 2 && ! -d $dest)
     52 	{
     53 	die "Destination must be a directory";
     54 	}
     55 
     56 foreach (@filelist)
     57 	{
     58 	if (-d $dest)
     59 		{
     60 		$dfile = $_;
     61 		$dfile =~ s|^.*[/\\]([^/\\]*)$|$1|;
     62 		$dfile = "$dest/$dfile";
     63 		}
     64 	else
     65 		{
     66 		$dfile = $dest;
     67 		}
     68 	sysopen(IN, $_, O_RDONLY|O_BINARY) || die "Can't Open $_";
     69 	sysopen(OUT, $dfile, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY)
     70 					|| die "Can't Open $dfile";
     71 	while (sysread IN, $buf, 10240)
     72 		{
     73 		if ($stripcr)
     74 			{
     75 			$buf =~ tr/\015//d;
     76 			}
     77 		syswrite(OUT, $buf, length($buf));
     78 		}
     79 	close(IN);
     80 	close(OUT);
     81 	print "Copying: $_ to $dfile\n";
     82 	}
     83 
     84 
     85