Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Unified Diff: third_party/zlib/google/zip_internal.h

Issue 179963002: New Zip::ZipFromMemory API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressing comments Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/zlib/google/zip_internal.h
diff --git a/third_party/zlib/google/zip_internal.h b/third_party/zlib/google/zip_internal.h
index 57894bebd6459390504e49a05cda92788d9301ba..693b9a36301ed230ea4dfd4f71383804c0bbee13 100644
--- a/third_party/zlib/google/zip_internal.h
+++ b/third_party/zlib/google/zip_internal.h
@@ -9,8 +9,11 @@
#include <windows.h>
#endif
+#include <map>
#include <string>
+#include "base/strings/string_piece.h"
+
#if defined(USE_SYSTEM_MINIZIP)
#include <minizip/unzip.h>
#include <minizip/zip.h>
@@ -19,6 +22,11 @@
#include "third_party/zlib/contrib/minizip/zip.h"
#endif
+namespace base {
+class FilePath;
+class Time;
+}
+
// Utility functions and constants used internally for the zip file
// library in the directory. Don't use them outside of the library.
namespace zip {
@@ -41,7 +49,7 @@ unzFile OpenHandleForUnzipping(HANDLE zip_handle);
// Creates a custom unzFile object which reads data from the specified string.
// This custom unzFile object overrides the I/O API functions of zlib so it can
// read data from the specified string.
-unzFile PreprareMemoryForUnzipping(const std::string& data);
+unzFile PrepareMemoryForUnzipping(const std::string& data);
// Opens the given file name in UTF-8 for zipping, with some setup for
// Windows. |append_flag| will be passed to zipOpen2().
@@ -53,6 +61,41 @@ zipFile OpenForZipping(const std::string& file_name_utf8, int append_flag);
zipFile OpenFdForZipping(int zip_fd, int append_flag);
#endif
+// Returns a zip_fileinfo with the last modification date of |path| set.
+zip_fileinfo GetFileInfoForZipping(const base::FilePath& path);
+
+// Wrapper around zipOpenNewFileInZip4 which passes most common options.
+bool ZipOpenNewFileInZipWrapper(zipFile zip_file,
+ const std::string& str_path,
+ const zip_fileinfo* file_info);
+
+// Adds to |zip_file| files using contents from memory. |zip_file| is created if
+// it does not exist. |files| contains a map with the file path to
+// be stored in the zip file plus its contents. The FilePath in |files| may not
+// be empty, absolute or contain a '..' component, else the function fails.
+// The paths must therefore be relative and preferably canonicalized.
+// Calling this with an empty |files| has no effect.
+//
+// If |append| is true, the new files are appended to an already existing file,
+// if any. Else, the file is recreated from scratch, meaning, all previous
+// contents are deleted without the possibility of recovery.
+//
+// If the StringPiece in |files| is NULL, the file is removed from the zip
+// archive. If the StringPiece in |files| is not NULL, a file will be
+// created with those contents. The contents can have a size of 0 bytes.
+// Note: the data passed in |files| is copied to the file. This function does
+// not keep any references to the original data after it returns.
+//
+// If the FilePath ends with a path separator (a slash), a folder is created.
+// Note: the contents for a folder must be either NULL or 0-byte big, so the
+// folder will be removed or added, respectively.
+
+typedef std::map<const base::FilePath, base::StringPiece> ZipContents;
+
+bool ZipFromMemory(const base::FilePath& zip_path,
+ const ZipContents& files,
+ bool append);
+
satorux1 2014/03/24 06:16:07 Could you create a separate patch for this?
const int kZipMaxPath = 256;
const int kZipBufSize = 8192;

Powered by Google App Engine
This is Rietveld 408576698