[oe] [meta-browser][PATCH] chromium: Add workarounds for compiler errors
Carlos Rafael Giani
dv at pseudoterminal.org
Fri May 20 11:41:47 UTC 2016
Signed-off-by: Carlos Rafael Giani <dv at pseudoterminal.org>
---
.../0011-Replace-readdir_r-with-readdir.patch | 237 +++++++++++++++++++++
...for-unused-variable-error-in-ui-gfx-color.patch | 86 ++++++++
recipes-browser/chromium/chromium_48.0.2548.0.bb | 2 +
3 files changed, 325 insertions(+)
create mode 100644 recipes-browser/chromium/chromium/chromium-48/0011-Replace-readdir_r-with-readdir.patch
create mode 100644 recipes-browser/chromium/chromium/chromium-48/0012-Workaround-for-unused-variable-error-in-ui-gfx-color.patch
diff --git a/recipes-browser/chromium/chromium/chromium-48/0011-Replace-readdir_r-with-readdir.patch b/recipes-browser/chromium/chromium/chromium-48/0011-Replace-readdir_r-with-readdir.patch
new file mode 100644
index 0000000..36c7ec2
--- /dev/null
+++ b/recipes-browser/chromium/chromium/chromium-48/0011-Replace-readdir_r-with-readdir.patch
@@ -0,0 +1,237 @@
+From feb645ae0259582e2075691047e27b5e064ec160 Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv at pseudoterminal.org>
+Date: Thu, 19 May 2016 21:12:05 +0200
+Subject: [PATCH] Replace readdir_r with readdir
+
+readdir_r is deprecated in newer glibc version. Documented at:
+https://sourceware.org/bugzilla/show_bug.cgi?id=19056
+
+Signed-off-by: Carlos Rafael Giani <dv at pseudoterminal.org>
+---
+ base/files/file_enumerator_posix.cc | 15 ++++++++++---
+ net/disk_cache/simple/simple_index_file_posix.cc | 10 ++++++---
+ sandbox/linux/services/proc_util.cc | 24 +++++++++++++--------
+ third_party/boringssl/src/crypto/directory_posix.c | 25 +++-------------------
+ .../crashpad/crashpad/util/posix/close_multiple.cc | 8 +++++--
+ third_party/leveldatabase/env_chromium.cc | 13 ++++++++---
+ 6 files changed, 53 insertions(+), 42 deletions(-)
+
+diff --git a/base/files/file_enumerator_posix.cc b/base/files/file_enumerator_posix.cc
+index 7533a24..637b8cd 100644
+--- a/base/files/file_enumerator_posix.cc
++++ b/base/files/file_enumerator_posix.cc
+@@ -7,6 +7,7 @@
+ #include <dirent.h>
+ #include <errno.h>
+ #include <fnmatch.h>
++#include <string.h>
+
+ #include "base/logging.h"
+ #include "base/threading/thread_restrictions.h"
+@@ -129,9 +130,17 @@ bool FileEnumerator::ReadDirectory(std::vector<FileInfo>* entries,
+ additional space for pathname may be needed
+ #endif
+
+- struct dirent dent_buf;
+- struct dirent* dent;
+- while (readdir_r(dir, &dent_buf, &dent) == 0 && dent) {
++ while (true) {
++ struct dirent* dent;
++ errno = 0;
++ dent = readdir(dir);
++ if (errno != 0) {
++ DPLOG(ERROR) << "Couldn't read directory entry: " << strerror(errno);
++ break;
++ }
++ if (dent == NULL)
++ break;
++
+ FileInfo info;
+ info.filename_ = FilePath(dent->d_name);
+
+diff --git a/net/disk_cache/simple/simple_index_file_posix.cc b/net/disk_cache/simple/simple_index_file_posix.cc
+index 586699d..bbe81fc 100644
+--- a/net/disk_cache/simple/simple_index_file_posix.cc
++++ b/net/disk_cache/simple/simple_index_file_posix.cc
+@@ -34,8 +34,12 @@ bool SimpleIndexFile::TraverseCacheDirectory(
+ PLOG(ERROR) << "opendir " << cache_path.value();
+ return false;
+ }
+- dirent entry, *result;
+- while (readdir_r(dir.get(), &entry, &result) == 0) {
++ dirent *result;
++ while (true) {
++ errno = 0;
++ result = readdir(dir.get());
++ if (errno != 0)
++ break;
+ if (!result)
+ return true; // The traversal completed successfully.
+ const std::string file_name(result->d_name);
+@@ -45,7 +49,7 @@ bool SimpleIndexFile::TraverseCacheDirectory(
+ base::FilePath(file_name));
+ entry_file_callback.Run(file_path);
+ }
+- PLOG(ERROR) << "readdir_r " << cache_path.value();
++ PLOG(ERROR) << "readdir " << cache_path.value();
+ return false;
+ }
+
+diff --git a/sandbox/linux/services/proc_util.cc b/sandbox/linux/services/proc_util.cc
+index 8341b4a..1603415 100644
+--- a/sandbox/linux/services/proc_util.cc
++++ b/sandbox/linux/services/proc_util.cc
+@@ -50,15 +50,18 @@ int ProcUtil::CountOpenFds(int proc_fd) {
+ CHECK(dir);
+
+ int count = 0;
+- struct dirent e;
+ struct dirent* de;
+- while (!readdir_r(dir.get(), &e, &de) && de) {
+- if (strcmp(e.d_name, ".") == 0 || strcmp(e.d_name, "..") == 0) {
++ while (true) {
++ errno = 0;
++ de = readdir(dir.get());
++ if (de == NULL || errno != 0)
++ break;
++ if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0) {
+ continue;
+ }
+
+ int fd_num;
+- CHECK(base::StringToInt(e.d_name, &fd_num));
++ CHECK(base::StringToInt(de->d_name, &fd_num));
+ if (fd_num == proc_fd || fd_num == proc_self_fd) {
+ continue;
+ }
+@@ -80,22 +83,25 @@ bool ProcUtil::HasOpenDirectory(int proc_fd) {
+ ScopedDIR dir(fdopendir(proc_self_fd));
+ CHECK(dir);
+
+- struct dirent e;
+ struct dirent* de;
+- while (!readdir_r(dir.get(), &e, &de) && de) {
+- if (strcmp(e.d_name, ".") == 0 || strcmp(e.d_name, "..") == 0) {
++ while (true) {
++ errno = 0;
++ de = readdir(dir.get());
++ if (de == NULL || errno != 0)
++ break;
++ if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0) {
+ continue;
+ }
+
+ int fd_num;
+- CHECK(base::StringToInt(e.d_name, &fd_num));
++ CHECK(base::StringToInt(de->d_name, &fd_num));
+ if (fd_num == proc_fd || fd_num == proc_self_fd) {
+ continue;
+ }
+
+ struct stat s;
+ // It's OK to use proc_self_fd here, fstatat won't modify it.
+- CHECK(fstatat(proc_self_fd, e.d_name, &s, 0) == 0);
++ CHECK(fstatat(proc_self_fd, de->d_name, &s, 0) == 0);
+ if (S_ISDIR(s.st_mode)) {
+ return true;
+ }
+diff --git a/third_party/boringssl/src/crypto/directory_posix.c b/third_party/boringssl/src/crypto/directory_posix.c
+index b944b69..17143a7 100644
+--- a/third_party/boringssl/src/crypto/directory_posix.c
++++ b/third_party/boringssl/src/crypto/directory_posix.c
+@@ -24,10 +24,6 @@
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
+
+-#if !defined(_POSIX_C_SOURCE)
+-#define _POSIX_C_SOURCE 201409 /* for readdir_r */
+-#endif
+-
+ #include "directory.h"
+
+
+@@ -38,21 +34,6 @@
+ #include <stdlib.h>
+ #include <string.h>
+
+-#if defined(OPENSSL_PNACL)
+-/* pnacl doesn't include readdir_r! So we do the best we can. */
+-int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result) {
+- errno = 0;
+- *result = readdir(dirp);
+- if (*result != NULL) {
+- return 0;
+- }
+- if (errno) {
+- return 1;
+- }
+- return 0;
+-}
+-#endif
+-
+ struct OPENSSL_dir_context_st {
+ DIR *dir;
+ struct dirent dirent;
+@@ -85,10 +66,10 @@ const char *OPENSSL_DIR_read(OPENSSL_DIR_CTX **ctx, const char *directory) {
+ }
+ }
+
+- if (readdir_r((*ctx)->dir, &(*ctx)->dirent, &dirent) != 0 ||
+- dirent == NULL) {
++ errno = 0;
++ dirent = readdir((*ctx)->dir);
++ if (dirent == NULL || errno != 0)
+ return 0;
+- }
+
+ return (*ctx)->dirent.d_name;
+ }
+diff --git a/third_party/crashpad/crashpad/util/posix/close_multiple.cc b/third_party/crashpad/crashpad/util/posix/close_multiple.cc
+index d94d575..4c1287a 100644
+--- a/third_party/crashpad/crashpad/util/posix/close_multiple.cc
++++ b/third_party/crashpad/crashpad/util/posix/close_multiple.cc
+@@ -100,10 +100,14 @@ bool CloseMultipleNowOrOnExecUsingFDDir(int fd, int preserve_fd) {
+ return false;
+ }
+
+- dirent entry;
+ dirent* result;
+ int rv;
+- while ((rv = readdir_r(dir, &entry, &result)) == 0 && result != nullptr) {
++ while (true) {
++ errno = 0;
++ result = readdir(dir);
++ if (errno != 0 || result == nullptr)
++ break;
++
+ const char* entry_name = &(*result->d_name);
+ if (strcmp(entry_name, ".") == 0 || strcmp(entry_name, "..") == 0) {
+ continue;
+diff --git a/third_party/leveldatabase/env_chromium.cc b/third_party/leveldatabase/env_chromium.cc
+index 939534c..f23142e 100644
+--- a/third_party/leveldatabase/env_chromium.cc
++++ b/third_party/leveldatabase/env_chromium.cc
+@@ -79,10 +79,17 @@ static base::File::Error GetDirectoryEntries(const FilePath& dir_param,
+ DIR* dir = opendir(dir_string.c_str());
+ if (!dir)
+ return base::File::OSErrorToFileError(errno);
+- struct dirent dent_buf;
+ struct dirent* dent;
+- int readdir_result;
+- while ((readdir_result = readdir_r(dir, &dent_buf, &dent)) == 0 && dent) {
++ int readdir_result = 0;
++ while (true) {
++ errno = 0;
++ dent = readdir(dir);
++ if (errno != 0) {
++ readdir_result = 1;
++ break;
++ }
++ if (dent == NULL)
++ break;
+ if (strcmp(dent->d_name, ".") == 0 || strcmp(dent->d_name, "..") == 0)
+ continue;
+ result->push_back(FilePath::FromUTF8Unsafe(dent->d_name));
+--
+2.7.4
+
diff --git a/recipes-browser/chromium/chromium/chromium-48/0012-Workaround-for-unused-variable-error-in-ui-gfx-color.patch b/recipes-browser/chromium/chromium/chromium-48/0012-Workaround-for-unused-variable-error-in-ui-gfx-color.patch
new file mode 100644
index 0000000..e3f20ef
--- /dev/null
+++ b/recipes-browser/chromium/chromium/chromium-48/0012-Workaround-for-unused-variable-error-in-ui-gfx-color.patch
@@ -0,0 +1,86 @@
+From 41cb20a99eb12443f649051a608c7dfe28661d85 Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv at pseudoterminal.org>
+Date: Thu, 19 May 2016 22:38:32 +0200
+Subject: [PATCH] Workaround for unused-variable error in
+ ui/gfx/color_palette.h
+
+Signed-off-by: Carlos Rafael Giani <dv at pseudoterminal.org>
+---
+ ui/gfx/BUILD.gn | 1 +
+ ui/gfx/color_palette.cc | 12 ++++++++++++
+ ui/gfx/color_palette.h | 12 ++++++------
+ ui/gfx/gfx.gyp | 1 +
+ 4 files changed, 20 insertions(+), 6 deletions(-)
+ create mode 100644 ui/gfx/color_palette.cc
+
+diff --git a/ui/gfx/BUILD.gn b/ui/gfx/BUILD.gn
+index dcd15b0..bf1455c 100644
+--- a/ui/gfx/BUILD.gn
++++ b/ui/gfx/BUILD.gn
+@@ -61,6 +61,7 @@ component("gfx") {
+ "codec/png_codec.h",
+ "color_analysis.cc",
+ "color_analysis.h",
++ "color_palette.cc",
+ "color_palette.h",
+ "color_profile.cc",
+ "color_profile.h",
+diff --git a/ui/gfx/color_palette.cc b/ui/gfx/color_palette.cc
+new file mode 100644
+index 0000000..a8e6280
+--- /dev/null
++++ b/ui/gfx/color_palette.cc
+@@ -0,0 +1,12 @@
++#include "color_palette.h"
++
++namespace gfx {
++
++const SkColor kChromeIconGrey = SkColorSetRGB(0x5A, 0x5A, 0x5A);
++const SkColor kGoogleBlue300 = SkColorSetRGB(0x7B, 0xAA, 0xF7);
++const SkColor kGoogleBlue500 = SkColorSetRGB(0x42, 0x85, 0xF4);
++const SkColor kGoogleRed700 = SkColorSetRGB(0xC5, 0x39, 0x29);
++const SkColor kGoogleGreen700 = SkColorSetRGB(0x0B, 0x80, 0x43);
++const SkColor kGoogleYellow700 = SkColorSetRGB(0xF0, 0x93, 0x00);
++
++} // namespace gfx
+diff --git a/ui/gfx/color_palette.h b/ui/gfx/color_palette.h
+index 372f52c..63fa8af 100644
+--- a/ui/gfx/color_palette.h
++++ b/ui/gfx/color_palette.h
+@@ -9,15 +9,15 @@
+
+ namespace gfx {
+
+-const SkColor kChromeIconGrey = SkColorSetRGB(0x5A, 0x5A, 0x5A);
++extern const SkColor kChromeIconGrey;
+
+ // The number refers to the shade of darkness. Each color in the MD
+ // palette ranges from 100-900.
+-const SkColor kGoogleBlue300 = SkColorSetRGB(0x7B, 0xAA, 0xF7);
+-const SkColor kGoogleBlue500 = SkColorSetRGB(0x42, 0x85, 0xF4);
+-const SkColor kGoogleRed700 = SkColorSetRGB(0xC5, 0x39, 0x29);
+-const SkColor kGoogleGreen700 = SkColorSetRGB(0x0B, 0x80, 0x43);
+-const SkColor kGoogleYellow700 = SkColorSetRGB(0xF0, 0x93, 0x00);
++extern const SkColor kGoogleBlue300;
++extern const SkColor kGoogleBlue500;
++extern const SkColor kGoogleRed700;
++extern const SkColor kGoogleGreen700;
++extern const SkColor kGoogleYellow700;
+
+ } // namespace gfx
+
+diff --git a/ui/gfx/gfx.gyp b/ui/gfx/gfx.gyp
+index 8067bee..98b6312 100644
+--- a/ui/gfx/gfx.gyp
++++ b/ui/gfx/gfx.gyp
+@@ -142,6 +142,7 @@
+ 'codec/png_codec.h',
+ 'color_analysis.cc',
+ 'color_analysis.h',
++ 'color_palette.cc',
+ 'color_palette.h',
+ 'color_profile.cc',
+ 'color_profile.h',
+--
+2.7.4
+
diff --git a/recipes-browser/chromium/chromium_48.0.2548.0.bb b/recipes-browser/chromium/chromium_48.0.2548.0.bb
index 369d6fa..976ec51 100644
--- a/recipes-browser/chromium/chromium_48.0.2548.0.bb
+++ b/recipes-browser/chromium/chromium_48.0.2548.0.bb
@@ -10,6 +10,8 @@ SRC_URI += "\
file://chromium-48/0008-Fix-GCC-uninitialized-warning.patch \
file://chromium-48/0009-Fix-build-errors-with-GCC-in-Debug-mode.patch \
file://chromium-48/0010-Fix-rv-may-be-used-uninitialized-in-this-function-wa.patch \
+ file://chromium-48/0011-Replace-readdir_r-with-readdir.patch \
+ file://chromium-48/0012-Workaround-for-unused-variable-error-in-ui-gfx-color.patch \
${@bb.utils.contains('PACKAGECONFIG', 'ignore-lost-context', 'file://chromium-48/0001-Remove-accelerated-Canvas-support-from-blacklist.patch', '', d)} \
${@bb.utils.contains('PACKAGECONFIG', 'disable-api-keys-info-bar', 'file://chromium-48/0002-Disable-API-keys-info-bar.patch', '', d)} \
"
--
2.7.4
More information about the Openembedded-devel
mailing list