* Commit for 2.1.0.
[BackupPC.git] / bin / BackupPC_zipCreate
index c91d208..bebea7a 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/perl -T
+#!/bin/perl
 #============================================================= -*-perl-*-
 #
 # BackupPC_zipCreate: create a zip archive of an existing dump
@@ -33,7 +33,7 @@
 #   Based on Backup_tarCreate by Craig Barratt <cbarratt@users.sourceforge.net>
 #
 # COPYRIGHT
-#   Copyright (C) 2002  Craig Barratt and Guillaume Filion
+#   Copyright (C) 2002-2003  Craig Barratt and Guillaume Filion
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
 #
 #========================================================================
 #
-# Version 2.0.0_CVS, released 18 Jan 2003.
+# Version 2.1.0, released 20 Jun 2004.
 #
 # See http://backuppc.sourceforge.net.
 #
 #========================================================================
 
 use strict;
+no  utf8;
 use lib "/usr/local/BackupPC/lib";
 use Archive::Zip qw(:ERROR_CODES);
 use File::Path;
@@ -75,16 +76,15 @@ my $BinDir = $bpc->BinDir();
 my %Conf   = $bpc->Conf();
 
 my %opts;
-getopts("th:n:p:r:s:c:", \%opts);
 
-if ( @ARGV < 1 ) {
+if ( !getopts("th:n:p:r:s:c:", \%opts) || @ARGV < 1 ) {
     print(STDERR "usage: $0 [-t] [-h host] [-n dumpNum] [-s shareName]"
                . " [-r pathRemove] [-p pathAdd] [-c compressionLevel]"
                . " files/directories...\n");
     exit(1);
 }
 
-if ( $opts{h} !~ /^([\w\.-]+)$/ ) {
+if ( $opts{h} !~ /^([\w\.\s-]+)$/ ) {
     print(STDERR "$0: bad host name '$opts{h}'\n");
     exit(1);
 }
@@ -133,6 +133,7 @@ my $fh = new IO::Handle;
 $fh->fdopen(fileno(STDOUT),"w");
 my $zipfh = Archive::Zip->new();
 
+binmode(STDOUT);
 foreach my $dir ( @ARGV ) {
     archiveWrite($zipfh, $dir);
 }
@@ -270,8 +271,14 @@ sub ZipWriteFile
     }
     return if ( !$zipmember );
     
-    # Set the attributes and permissions
-    $zipmember->setLastModFileDateTimeFromUnix($hdr->{mtime});
+    #
+    # Set the attributes and permissions.  The standard zip file
+    # header cannot handle dates prior to 1/1/1980, or 315561600
+    # unix seconds, so we round up the mtime.
+    #
+    my $mtime = $hdr->{mtime};
+    $mtime = 315561600 if ( $mtime < 315561600 );
+    $zipmember->setLastModFileDateTimeFromUnix($mtime);
     $zipmember->unixFileAttributes($hdr->{mode});
     # Zip files don't accept uid and gid, so we put them in the comment field.
     $zipmember->fileComment("uid=".$hdr->{uid}." gid=".$hdr->{gid})