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