From 5422ef0015b4bffd7ef78b2a3331ad22a0330b0f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20Degros?= <fdegros@chromium.org>
Date: Tue, 17 Nov 2020 14:26:09 +1100
Subject: [PATCH] Link and initialize chrome-icu

Make fuse-zip work with the ChromeOS-specific version of
ICU (chrome-icu) on ChromeOS.
---
 Makefile            |   4 +-
 lib/Makefile        |   4 +-
 lib/fuseZipData.cpp | 110 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 115 insertions(+), 3 deletions(-)

diff --git a/Makefile b/Makefile
index e72ce52..1406e73 100644
--- a/Makefile
+++ b/Makefile
@@ -8,9 +8,9 @@ mandir=$(datarootdir)/man
 man1dir=$(mandir)/man1
 manext=.1
 PKG_CONFIG ?= pkg-config
-PC_DEPS = fuse libzip icu-uc icu-i18n
+PC_DEPS = fuse libzip
 PC_CFLAGS := $(shell $(PKG_CONFIG) --cflags $(PC_DEPS))
-LIBS := -Llib -lfusezip $(shell $(PKG_CONFIG) --libs $(PC_DEPS))
+LIBS := -Llib -lfusezip -licui18n-chrome -licuuc-chrome $(shell $(PKG_CONFIG) --libs $(PC_DEPS))
 COMMON_CXXFLAGS = -Wall -Wextra -Wconversion -Wno-sign-compare -Wlogical-op -Wshadow -pedantic -std=c++17
 CXXFLAGS = -g -O0 $(COMMON_CXXFLAGS)
 RELEASE_CXXFLAGS = -O2 $(COMMON_CXXFLAGS)
diff --git a/lib/Makefile b/lib/Makefile
index 4e4b23a..8c2d098 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -1,7 +1,9 @@
 DEST=libfusezip.a
 PKG_CONFIG ?= pkg-config
-PC_DEPS = fuse libzip icu-uc icu-i18n
+PC_DEPS = fuse libzip
 PC_CFLAGS := $(shell $(PKG_CONFIG) --cflags $(PC_DEPS))
+PC_CFLAGS += -I"$(SYSROOT)/usr/include/icu-chrome/common"
+PC_CFLAGS += -I"$(SYSROOT)/usr/include/icu-chrome/i18n"
 COMMON_CXXFLAGS = -Wall -Wextra -Wconversion -Wno-sign-compare -Wlogical-op -Wshadow -pedantic -std=c++17
 CXXFLAGS = -g -O0 $(COMMON_CXXFLAGS)
 RELEASE_CXXFLAGS = -O2 $(COMMON_CXXFLAGS)
diff --git a/lib/fuseZipData.cpp b/lib/fuseZipData.cpp
index f8b4cbe..9ed7bbb 100644
--- a/lib/fuseZipData.cpp
+++ b/lib/fuseZipData.cpp
@@ -26,11 +26,19 @@
 #include <stdexcept>
 #include <functional>
 #include <memory>
+#include <system_error>
 #include <vector>
 
+#include <fcntl.h>
 #include <syslog.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unicode/putil.h>
+#include <unicode/uclean.h>
 #include <unicode/ucnv.h>
 #include <unicode/ucsdet.h>
+#include <unicode/udata.h>
 
 #include "fuseZipData.h"
 #include "extraField.h"
@@ -62,6 +70,105 @@ static void SetPassword(zip_t *const archive) {
 
 namespace {
 
+[[noreturn]] void ThrowSystemError(const char *const reason) {
+    throw std::system_error(errno, std::system_category(), reason);
+}
+
+// A scoped file handle.
+class ScopedFile {
+  public:
+    // Closes the file.
+    ~ScopedFile() {
+        if (close(fd_) < 0)
+            perror("Cannot close file");
+    }
+
+    explicit ScopedFile(int fd) : fd_(fd) {}
+
+    // No copy.
+    ScopedFile(const ScopedFile &) = delete;
+    ScopedFile &operator=(const ScopedFile &) = delete;
+
+  private:
+    const int fd_;
+};
+
+// A file mapping to memory.
+class FileMapping {
+  public:
+    // Removes the memory mapping.
+    ~FileMapping() {
+        if (munmap(data_, size_) < 0)
+            perror("Cannot unmap file");
+    }
+
+    // Maps a file to memory in read-only mode.
+    // Throws a runtime_error in case of error.
+    explicit FileMapping(const char *const path) {
+        // Open file in read-only mode.
+        const int fd = open(path, O_RDONLY);
+        if (fd < 0)
+            ThrowSystemError("Cannot open file");
+
+        // Ensure file will be closed.
+        const ScopedFile guard(fd);
+
+        // Get file size.
+        struct stat st;
+        if (fstat(fd, &st) < 0)
+            ThrowSystemError("Cannot fstat file");
+
+        size_ = static_cast<size_t>(st.st_size);
+        if (size_ != st.st_size)
+            throw std::runtime_error("File too big to be memory-mapped");
+
+        // Map file to memory.
+        data_ = mmap(nullptr, size_, PROT_READ, MAP_PRIVATE, fd, 0);
+        if (data_ == MAP_FAILED)
+            ThrowSystemError("Cannot mmap file");
+    }
+
+    // No copy.
+    FileMapping(const FileMapping &) = delete;
+    FileMapping &operator=(const FileMapping &) = delete;
+
+    // Start of the memory mapping.
+    const void *data() const { return data_; }
+
+  private:
+    void *data_;
+    size_t size_;
+};
+
+// Initializes and cleans up the ICU library.
+class IcuGuard {
+  public:
+    // Initializes the ICU library.
+    // Throws an runtime_error in case of error.
+    IcuGuard() {
+        UErrorCode error = U_ZERO_ERROR;
+        udata_setCommonData(mappedDataFile.data(), &error);
+        // Never try to load ICU data from files.
+        udata_setFileAccess(UDATA_ONLY_PACKAGES, &error);
+        u_init(&error);
+        if (U_FAILURE(error)) {
+            std::string msg = "Cannot initialize ICU: ";
+            msg += u_errorName(error);
+            throw std::runtime_error(std::move(msg));
+        }
+    }
+
+    // Cleans up the ICU library.
+    ~IcuGuard() { u_cleanup(); }
+
+    // No copy.
+    IcuGuard(const IcuGuard &) = delete;
+    IcuGuard &operator=(const IcuGuard &) = delete;
+
+  private:
+    const FileMapping mappedDataFile{"/opt/google/chrome/icudtl.dat"};
+};
+
 struct Closer {
     void operator()(UConverter *const conv) const { ucnv_close(conv); }
     void operator()(UCharsetDetector *const csd) const { ucsdet_close(csd); }
@@ -236,6 +343,9 @@ void FuseZipData::build_tree(bool readonly) {
         }
     }
 
+    // Initialize ICU library and ensure it will be cleaned up.
+    const IcuGuard guard;
+
     // Detect filename encoding.
     const std::string encoding = DetectEncoding(allNames);
     allNames.clear();
-- 
2.33.0.464.g1972c5931b-goog

