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