[HarfBuzz] harfbuzz: Branch 'master' - 4 commits

Behdad Esfahbod behdad at kemper.freedesktop.org
Wed May 23 01:31:40 UTC 2018


 src/hb-blob.cc                                                       |   81 +++++-----
 test/shaping/data/text-rendering-tests/DISABLED                      |    2 
 test/shaping/data/text-rendering-tests/Makefile.sources              |    2 
 test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyeight.ttf |binary
 test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyseven.ttf |binary
 test/shaping/data/text-rendering-tests/fonts/TestShapeKndaV3.ttf     |binary
 test/shaping/data/text-rendering-tests/tests/MORX-27.tests           |    3 
 test/shaping/data/text-rendering-tests/tests/MORX-28.tests           |    5 
 8 files changed, 57 insertions(+), 36 deletions(-)

New commits:
commit 2eb9bbd986f6930f1b2594b8971ac677e9647c93
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue May 22 18:28:13 2018 -0700

    [test/text-rendering-tests] Update from upstream

diff --git a/test/shaping/data/text-rendering-tests/DISABLED b/test/shaping/data/text-rendering-tests/DISABLED
index dbe870f1..58de258f 100644
--- a/test/shaping/data/text-rendering-tests/DISABLED
+++ b/test/shaping/data/text-rendering-tests/DISABLED
@@ -26,6 +26,8 @@ tests/MORX-22.tests
 tests/MORX-23.tests
 tests/MORX-25.tests
 tests/MORX-26.tests
+tests/MORX-27.tests
+tests/MORX-28.tests
 
 # Rounding differences
 tests/SHARAN-1.tests
diff --git a/test/shaping/data/text-rendering-tests/Makefile.sources b/test/shaping/data/text-rendering-tests/Makefile.sources
index f77c1bce..4be9d05d 100644
--- a/test/shaping/data/text-rendering-tests/Makefile.sources
+++ b/test/shaping/data/text-rendering-tests/Makefile.sources
@@ -50,6 +50,8 @@ DISBALED_TESTS = \
 	tests/MORX-23.tests \
 	tests/MORX-25.tests \
 	tests/MORX-26.tests \
+	tests/MORX-27.tests \
+	tests/MORX-28.tests \
 	tests/MORX-2.tests \
 	tests/MORX-3.tests \
 	tests/MORX-4.tests \
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyeight.ttf b/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyeight.ttf
new file mode 100644
index 00000000..edabb439
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyeight.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyseven.ttf b/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyseven.ttf
new file mode 100644
index 00000000..960b4cff
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyseven.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestShapeKndaV3.ttf b/test/shaping/data/text-rendering-tests/fonts/TestShapeKndaV3.ttf
new file mode 100644
index 00000000..9f632c3f
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestShapeKndaV3.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-27.tests b/test/shaping/data/text-rendering-tests/tests/MORX-27.tests
new file mode 100644
index 00000000..1ec96a2a
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-27.tests
@@ -0,0 +1,3 @@
+../fonts/TestMORXTwentyseven.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0045,U+0042:[A_E_B]
+../fonts/TestMORXTwentyseven.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0045,U+0043:[A_E_C]
+../fonts/TestMORXTwentyseven.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0045,U+0044:[A_E_D]
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-28.tests b/test/shaping/data/text-rendering-tests/tests/MORX-28.tests
new file mode 100644
index 00000000..59f5d255
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-28.tests
@@ -0,0 +1,5 @@
+../fonts/TestMORXTwentyeight.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0045,U+0044:[A_E_D]
+../fonts/TestMORXTwentyeight.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0078,U+0045,U+0044:[A_E_D|x at 1394,0]
+../fonts/TestMORXTwentyeight.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0045,U+0079,U+0044:[A_E_D|y at 1394,0]
+../fonts/TestMORXTwentyeight.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0078,U+0045,U+0079,U+0044:[A_E_D|x at 1394,0|y at 1923,0]
+../fonts/TestMORXTwentyeight.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0078,U+0078,U+0078,U+0045,U+0079,U+0079,U+0079,U+0044:[A_E_D|x at 1394,0|x at 1923,0|x at 2452,0|y at 2981,0|y at 3491,0|y at 4001,0]
commit 8eb53b853dcc4b0cc8e240cff6bfc5acb92182b0
Author: Ebrahim Byagowi <ebrahim at gnu.org>
Date:   Fri May 11 22:44:44 2018 +0430

    Minor, make CreateFile compatible with the disabled writable flag
    
    "writable" is not in use and probably we can go in the reverse direction
    and remove the flags that are useful for enabled writable, this is just
    for the sake of completeness however.

diff --git a/src/hb-blob.cc b/src/hb-blob.cc
index 02e3826c..0beb024e 100644
--- a/src/hb-blob.cc
+++ b/src/hb-blob.cc
@@ -556,8 +556,9 @@ hb_blob_create_from_file (const char *file_name)
   if (unlikely (file->contents == MAP_FAILED)) goto fail;
 
 #elif defined(_WIN32) || defined(__CYGWIN__)
-  HANDLE fd = CreateFile (file_name, GENERIC_READ, FILE_SHARE_READ, nullptr,
-			  OPEN_EXISTING,
+  HANDLE fd = CreateFile (file_name,
+			  writable ? GENERIC_READ|GENERIC_WRITE : GENERIC_READ,
+			  FILE_SHARE_READ, nullptr, OPEN_EXISTING,
 			  FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, nullptr);
 # define CLOSE CloseHandle
 
commit 33eb1bd23b100a8e65a0e66621760368b5aecdaf
Author: Ebrahim Byagowi <ebrahim at gnu.org>
Date:   Fri May 11 14:36:41 2018 +0430

    Remove unnecessary headers and definitions of hb-blob (#1028)
    
    It removes io.h and other polyfills which we no longer need as 7e76d74

diff --git a/src/hb-blob.cc b/src/hb-blob.cc
index 67aede1d..02e3826c 100644
--- a/src/hb-blob.cc
+++ b/src/hb-blob.cc
@@ -482,33 +482,19 @@ hb_blob_t::try_make_writable (void)
  */
 
 #ifdef HAVE_MMAP
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
+# include <sys/types.h>
+# include <sys/stat.h>
+# include <fcntl.h>
 #endif
 
 #if defined(_WIN32) || defined(__CYGWIN__)
-#include <windows.h>
-#include <io.h>
-
-#undef fstat
-#define fstat(a,b) _fstati64(a,b)
-#undef stat
-#define stat _stati64
-
-#ifndef S_ISREG
-# define S_ISREG(m) (((m) & _S_IFMT) == _S_IFREG)
+# include <windows.h>
 #endif
-#endif // defined(_WIN32) || defined(__CYGWIN__)
 
 #ifndef _O_BINARY
 # define _O_BINARY 0
 #endif
 
-#ifndef MAP_FAILED
-# define MAP_FAILED ((void *) -1)
-#endif
-
 struct hb_mapped_file_t
 {
   char *contents;
commit 7e76d746e2555d5bba7f65d3958aa97a7f179d7b
Author: Ebrahim Byagowi <ebrahim at gnu.org>
Date:   Fri May 11 13:40:33 2018 +0430

    Make hb_blob_create_from_file more portable (#1027)
    
    This makes it compatible with ARMCC which I had access in
    a collaboration with @imgtec, thanks!
    
    Basically hb_blob_create_from_file features three code paths,
    mmap, Win32 and fallback.
    
    We had fallback implementation even before this but it was relied
    to "open" which is not available on some environments. This change
    improved the situtation by using only fopen and friends for
    fallback path.
    
    Interestingly we could use "open" on Windows but in fact it was
    emulated by MSVCRT so I've completely split that from Unix path
    now that we have a distinct path for fallback path also.

diff --git a/src/hb-blob.cc b/src/hb-blob.cc
index b1319701..67aede1d 100644
--- a/src/hb-blob.cc
+++ b/src/hb-blob.cc
@@ -1,5 +1,6 @@
 /*
  * Copyright © 2009  Red Hat, Inc.
+ * Copyright © 2018  Ebrahim Byagowi
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
@@ -43,10 +44,6 @@
 #include <stdio.h>
 #include <errno.h>
 #include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
 
 
 /**
@@ -484,6 +481,12 @@ hb_blob_t::try_make_writable (void)
  * Mmap
  */
 
+#ifdef HAVE_MMAP
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#endif
+
 #if defined(_WIN32) || defined(__CYGWIN__)
 #include <windows.h>
 #include <io.h>
@@ -542,31 +545,40 @@ hb_blob_t *
 hb_blob_create_from_file (const char *file_name)
 {
   // Adopted from glib's gmappedfile.c with Matthias Clasen and
-  // Allison Lortie permission but changed to suit our need.
+  // Allison Lortie permission but changed a lot to suit our need.
   bool writable = false;
   hb_memory_mode_t mm = HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE;
+  hb_mapped_file_t *file = (hb_mapped_file_t *) calloc (1, sizeof (hb_mapped_file_t));
+  if (unlikely (!file)) return hb_blob_get_empty ();
 
+#ifdef HAVE_MMAP
   int fd = open (file_name, (writable ? O_RDWR : O_RDONLY) | _O_BINARY, 0);
-  if (unlikely (fd == -1)) return hb_blob_get_empty ();
-
-  hb_mapped_file_t *file = (hb_mapped_file_t *) calloc (1, sizeof (hb_mapped_file_t));
+# define CLOSE close
+  if (unlikely (fd == -1)) goto fail_without_close;
 
   struct stat st;
   if (unlikely (fstat (fd, &st) == -1)) goto fail;
 
-  // If the file size is 0 and is a regular file, give up
   // See https://github.com/GNOME/glib/blob/f9faac7/glib/gmappedfile.c#L139-L142
   if (unlikely (st.st_size == 0 && S_ISREG (st.st_mode))) goto fail;
 
   file->length = (unsigned long) st.st_size;
-
-#ifdef HAVE_MMAP
   file->contents = (char *) mmap (nullptr, file->length,
 				  writable ? PROT_READ|PROT_WRITE : PROT_READ,
 				  MAP_PRIVATE, fd, 0);
+
   if (unlikely (file->contents == MAP_FAILED)) goto fail;
+
 #elif defined(_WIN32) || defined(__CYGWIN__)
-  file->mapping = CreateFileMapping ((HANDLE) _get_osfhandle (fd), nullptr,
+  HANDLE fd = CreateFile (file_name, GENERIC_READ, FILE_SHARE_READ, nullptr,
+			  OPEN_EXISTING,
+			  FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, nullptr);
+# define CLOSE CloseHandle
+
+  if (unlikely (fd == INVALID_HANDLE_VALUE)) goto fail_without_close;
+
+  file->length = (unsigned long) GetFileSize (fd, nullptr);
+  file->mapping = CreateFileMapping (fd, nullptr,
 				     writable ? PAGE_WRITECOPY : PAGE_READONLY,
 				     0, 0, nullptr);
   if (unlikely (file->mapping == nullptr)) goto fail;
@@ -574,24 +586,34 @@ hb_blob_create_from_file (const char *file_name)
   file->contents = (char *) MapViewOfFile (file->mapping,
 					   writable ? FILE_MAP_COPY : FILE_MAP_READ,
 					   0, 0, 0);
-  if (unlikely (file->contents == nullptr))
-  {
-    CloseHandle (file->mapping);
-    goto fail;
-  }
+  if (unlikely (file->contents == nullptr)) goto fail;
+
 #else
+  mm = HB_MEMORY_MODE_WRITABLE;
+
+  FILE *fd = fopen (file_name, "rb");
+# define CLOSE fclose
+  if (unlikely (!fd)) goto fail_without_close;
+
+  fseek (fd, 0, SEEK_END);
+  file->length = ftell (fd);
+  rewind (fd);
   file->contents = (char *) malloc (file->length);
   if (unlikely (!file->contents)) goto fail;
-  read (fd, file->contents, file->length);
-  mm = HB_MEMORY_MODE_WRITABLE;
+
+  if (unlikely (fread (file->contents, 1, file->length, fd) != file->length))
+    goto fail;
+
 #endif
 
-  close (fd);
+  CLOSE (fd);
   return hb_blob_create (file->contents, file->length, mm, (void *) file,
 			 (hb_destroy_func_t) _hb_mapped_file_destroy);
 
 fail:
-  close (fd);
+  CLOSE (fd);
+#undef CLOSE
+fail_without_close:
   free (file);
   return hb_blob_get_empty ();
 }


More information about the HarfBuzz mailing list