xref: /aoo41x/main/solenv/bin/cleanzip.pl (revision cdf0e10c)
1#!/usr/bin/perl -w
2#*************************************************************************
3#
4# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5#
6# Copyright 2000, 2010 Oracle and/or its affiliates.
7#
8# OpenOffice.org - a multi-platform office productivity suite
9#
10# This file is part of OpenOffice.org.
11#
12# OpenOffice.org is free software: you can redistribute it and/or modify
13# it under the terms of the GNU Lesser General Public License version 3
14# only, as published by the Free Software Foundation.
15#
16# OpenOffice.org is distributed in the hope that it will be useful,
17# but WITHOUT ANY WARRANTY; without even the implied warranty of
18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19# GNU Lesser General Public License version 3 for more details
20# (a copy is included in the LICENSE file that accompanied this code).
21#
22# You should have received a copy of the GNU Lesser General Public License
23# version 3 along with OpenOffice.org.  If not, see
24# <http://www.openoffice.org/license.html>
25# for a copy of the LGPLv3 License.
26#
27#*************************************************************************
28
29sub usage
30{
31	print "Cleanup unwanted unix attributes in zip archives\n\n";
32	print "Usage:\n";
33	print "$0 archive\n\n";
34    exit(1);
35}
36
37usage() if ! defined $ARGV[0];
38
39my $filename = $ARGV[0];
40use Archive::Zip qw(:ERROR_CODES :CONSTANTS);
41my $zip = Archive::Zip->new();
42
43unless ( $zip->read( $filename ) == AZ_OK ) {
44	die "$0: ERROR reading $filename\n";
45}
46my @members = $zip ->members();
47
48foreach my $member ( @members ) {
49#	printf ( "%o\n",$member->unixFileAttributes());
50#	printf ( "%o\n",$member->unixFileAttributes() & 0b111111111111);
51	my $attribs = $member->unixFileAttributes();
52	if ( $member->isDirectory ) {
53		$attribs = $attribs & 0b101111111111;
54		$member->unixFileAttributes($attribs)
55	}
56#	printf ( "%o\n",$member->unixFileAttributes());
57#	printf ( "%o\n",$member->unixFileAttributes() & 0b111111111111);
58#	print ( $member->fileName()."\n");
59}
60unless ( $zip->writeToFileNamed( ${filename}."_new" ) == AZ_OK ) {
61	die "$0: ERROR reading ${filename}_new\n";
62}
63rename($filename."_new", $filename);
64
65