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 <beh...@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@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@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@1394,0|y@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@1394,0|x@1923,0|x@2452,0|y@2981,0|y@3491,0|y@4001,0] commit 8eb53b853dcc4b0cc8e240cff6bfc5acb92182b0 Author: Ebrahim Byagowi <ebra...@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 <ebra...@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 <ebra...@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 (); } _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/harfbuzz