summaryrefslogtreecommitdiff
path: root/shell/inc/internal/zipfile.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'shell/inc/internal/zipfile.hxx')
-rw-r--r--shell/inc/internal/zipfile.hxx165
1 files changed, 165 insertions, 0 deletions
diff --git a/shell/inc/internal/zipfile.hxx b/shell/inc/internal/zipfile.hxx
new file mode 100644
index 000000000000..2a860bb4c6cd
--- /dev/null
+++ b/shell/inc/internal/zipfile.hxx
@@ -0,0 +1,165 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: zipfile.hxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ZIPFILE_HXX_INCLUDED
+#define ZIPFILE_HXX_INCLUDED
+
+#ifndef _WINDOWS
+#define _WINDOWS
+#endif
+
+
+#include <external/zlib/unzip.h>
+
+
+#include <string>
+#include <vector>
+#include <memory>
+
+/** A simple zip content provider based on the zlib
+*/
+
+class ZipFile
+{
+public:
+
+ typedef std::vector<std::string> Directory_t;
+ typedef std::auto_ptr<Directory_t> DirectoryPtr_t;
+ typedef std::vector<char> ZipContentBuffer_t;
+
+public:
+
+ /** Checks whether a file is a zip file or not
+
+ @precond The given parameter must be a string with length > 0
+ The file must exist
+ The file must be readable for the current user
+
+ @returns true if the file is a zip file
+ false if the file is not a zip file
+
+ @throws ParameterException if the given file name is empty
+ IOException if the specified file doesn't exist
+ AccessViolationException if read access to the file is denied
+ */
+ static bool IsZipFile(const std::string& FileName);
+
+ static bool IsZipFile(void* stream);
+
+
+ /** Returns wheter the version of the specified zip file may be uncompressed with the
+ currently used zlib version or not
+
+ @precond The given parameter must be a string with length > 0
+ The file must exist
+ The file must be readable for the current user
+ The file must be a valid zip file
+
+ @returns true if the file may be uncompressed with the currently used zlib
+ false if the file may not be uncompressed with the currently used zlib
+
+ @throws ParameterException if the given file name is empty
+ IOException if the specified file doesn't exist or is no zip file
+ AccessViolationException if read access to the file is denied
+ */
+ static bool IsValidZipFileVersionNumber(const std::string& FileName);
+
+ static bool IsValidZipFileVersionNumber(void* stream);
+
+public:
+
+ /** Constructs a zip file from a zip file
+
+ @precond The given parameter must be a string with length > 0
+ The file must exist
+ The file must be readable for the current user
+
+ @throws ParameterException if the given file name is empty
+ IOException if the specified file doesn't exist or is no valid zip file
+ AccessViolationException if read access to the file is denied
+ WrongZipVersionException if the zip file cannot be uncompressed
+ with the used zlib version
+ */
+ ZipFile(const std::string& FileName);
+
+ ZipFile(void* stream, zlib_filefunc_def* fa);
+
+
+ /** Destroys a zip file
+ */
+ ~ZipFile();
+
+ /** Provides an interface to read the uncompressed data of a content of the zip file
+
+ @param ContentName
+ The name of the content in the zip file
+
+ @param ppstm
+ Pointer to pointer, will receive an interface pointer
+ to IUnknown on success
+
+ @precond The specified content must exist in this file
+ ppstm must not be NULL
+
+ @throws std::bad_alloc if the necessary buffer could not be
+ allocated
+ ZipException if an zip error occurs
+ ZipContentMissException if the specified zip content
+ does not exist in this zip file
+ */
+ void GetUncompressedContent(const std::string& ContentName, /*inout*/ ZipContentBuffer_t& ContentBuffer);
+
+ /** Returns a list with the content names contained within this file
+
+ @throws ZipException if an error in the zlib happens
+ */
+ DirectoryPtr_t GetDirectory() const;
+
+ /** Convinience query function may even realized with
+ iterating over a ZipFileDirectory returned by
+ GetDirectory
+ */
+ bool HasContent(const std::string& ContentName) const;
+
+private:
+
+ /** Returns the length of the longest file name
+ in the current zip file
+
+ @throws ZipException if an zip error occurs
+ */
+ long GetFileLongestFileNameLength() const;
+
+private:
+ unzFile m_uzFile;
+};
+
+#endif
+