/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #include #include #include #include struct ZipEntry; class ZipFile { public: ZipFile( osl::File& rFile ); ~ZipFile(); bool addFile( osl::File& rFile, const rtl::OString& rName ); bool close(); private: void writeShort( sal_Int16 s); void writeLong( sal_Int32 l ); void copyAndCRC( ZipEntry *e, osl::File& rFile ); void writeDummyLocalHeader(ZipEntry *e); void writeLocalHeader(ZipEntry *e); void writeCentralDir(ZipEntry *e); void writeEndCentralDir(sal_Int32 nCdOffset, sal_Int32 nCdSize); private: bool isError() const { return osl::File::E_None != mnRC; } osl::File& mrFile; /* file we're writing to */ bool mbOpen; osl::File::RC mnRC; std::vector maEntries; };