Commit 4ecd1df6f2ecb98d388082b154497ed61aa11e18

Authored by Jay Berkenbilt
1 parent d24a120c

Add configure option AVOID_WINDOWS_HANDLE

If set, we avoid using Windows I/O HANDLE, which is disallowed in some
versions of the Windows SDK, such as for Windows phones.
QUtil::same_file will always return false in this case. Only applies
to Windows builds.
ChangeLog
1 2019-01-10 Jay Berkenbilt <ejb@ql.org> 1 2019-01-10 Jay Berkenbilt <ejb@ql.org>
2 2
  3 + * Add new configure option --enable-avoid-windows-handle, which
  4 + causes the symbol AVOID_WINDOWS_HANDLE to be defined. If set, we
  5 + avoid using Windows I/O HANDLE, which is disallowed in some
  6 + versions of the Windows SDK, such as for Windows phones.
  7 + QUtil::same_file will always return false in this case. Only
  8 + applies to Windows builds.
  9 +
3 * Add new method QPDF::setImmediateCopyFrom. When called on a 10 * Add new method QPDF::setImmediateCopyFrom. When called on a
4 source QPDF object, streams can be copied FROM that object to 11 source QPDF object, streams can be copied FROM that object to
5 other ones without having to keep the source QPDF or its input 12 other ones without having to keep the source QPDF or its input
autofiles.sums
1 -b544741ebe32e6bf555703b4cbedcaef62553da29e3230df4ccb8351900e2378 configure.ac 1 +8e191dc63d2709fcd089ff62dd022589d12892129616a6036fa7e39833dd5443 configure.ac
2 35bc5c645dc42d47f2daeea06f8f3e767c8a1aee6a35eb2b4854fd2ce66c3413 m4/ax_random_device.m4 2 35bc5c645dc42d47f2daeea06f8f3e767c8a1aee6a35eb2b4854fd2ce66c3413 m4/ax_random_device.m4
3 37f8897d5f68d7d484e5457832a8f190ddb7507fa2a467cb7ee2be40a4364643 m4/libtool.m4 3 37f8897d5f68d7d484e5457832a8f190ddb7507fa2a467cb7ee2be40a4364643 m4/libtool.m4
4 e77ebba8361b36f14b4d0927173a034b98c5d05049697a9ded84d85eb99a7990 m4/ltoptions.m4 4 e77ebba8361b36f14b4d0927173a034b98c5d05049697a9ded84d85eb99a7990 m4/ltoptions.m4
configure
@@ -756,6 +756,7 @@ enable_libtool_lock @@ -756,6 +756,7 @@ enable_libtool_lock
756 enable_insecure_random 756 enable_insecure_random
757 enable_os_secure_random 757 enable_os_secure_random
758 with_random 758 with_random
  759 +enable_avoid_windows_handle
759 enable_external_libs 760 enable_external_libs
760 with_windows_wordsize 761 with_windows_wordsize
761 with_large_file_test_path 762 with_large_file_test_path
@@ -1425,6 +1426,9 @@ Optional Features: @@ -1425,6 +1426,9 @@ Optional Features:
1425 --enable-os-secure-random 1426 --enable-os-secure-random
1426 whether to try to use OS-provided secure random 1427 whether to try to use OS-provided secure random
1427 numbers (default is yes) 1428 numbers (default is yes)
  1429 + --enable-avoid-windows-handle
  1430 + whether to avoid use of HANDLE, useful for some
  1431 + embedded Windows builds (default is no)
1428 --enable-external-libs whether to use external libraries distribution 1432 --enable-external-libs whether to use external libraries distribution
1429 --disable-largefile omit support for large files 1433 --disable-largefile omit support for large files
1430 --enable-ld-version-script 1434 --enable-ld-version-script
@@ -15780,6 +15784,28 @@ _ACEOF @@ -15780,6 +15784,28 @@ _ACEOF
15780 fi 15784 fi
15781 15785
15782 15786
  15787 +# Check whether --enable-avoid-windows-handle was given.
  15788 +if test "${enable_avoid_windows_handle+set}" = set; then :
  15789 + enableval=$enable_avoid_windows_handle; if test "$enableval" = "yes"; then
  15790 + qpdf_AVOID_HANDLE=1;
  15791 + else
  15792 + qpdf_AVOID_HANDLE=0;
  15793 + fi
  15794 +else
  15795 + qpdf_AVOID_HANDLE=0
  15796 +fi
  15797 +
  15798 +if test "$qpdf_AVOID_HANDLE" = "1"; then
  15799 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
  15800 +$as_echo "yes" >&6; }
  15801 +
  15802 +$as_echo "#define AVOID_WINDOWS_HANDLE 1" >>confdefs.h
  15803 +
  15804 +else
  15805 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  15806 +$as_echo "no" >&6; }
  15807 +fi
  15808 +
15783 USE_EXTERNAL_LIBS=0 15809 USE_EXTERNAL_LIBS=0
15784 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for whether to use external libraries distribution" >&5 15810 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for whether to use external libraries distribution" >&5
15785 $as_echo_n "checking for whether to use external libraries distribution... " >&6; } 15811 $as_echo_n "checking for whether to use external libraries distribution... " >&6; }
configure.ac
@@ -92,6 +92,21 @@ fi @@ -92,6 +92,21 @@ fi
92 92
93 AX_RANDOM_DEVICE 93 AX_RANDOM_DEVICE
94 94
  95 +AC_ARG_ENABLE(avoid-windows-handle,
  96 + AS_HELP_STRING([--enable-avoid-windows-handle],
  97 + [whether to avoid use of HANDLE, useful for some embedded Windows builds (default is no)]),
  98 + [if test "$enableval" = "yes"; then
  99 + qpdf_AVOID_HANDLE=1;
  100 + else
  101 + qpdf_AVOID_HANDLE=0;
  102 + fi], [qpdf_AVOID_HANDLE=0])
  103 +if test "$qpdf_AVOID_HANDLE" = "1"; then
  104 + AC_MSG_RESULT(yes)
  105 + AC_DEFINE([AVOID_WINDOWS_HANDLE], [1], [Whether to avoid use of HANDLE in Windows])
  106 +else
  107 + AC_MSG_RESULT(no)
  108 +fi
  109 +
95 USE_EXTERNAL_LIBS=0 110 USE_EXTERNAL_LIBS=0
96 AC_MSG_CHECKING(for whether to use external libraries distribution) 111 AC_MSG_CHECKING(for whether to use external libraries distribution)
97 AC_ARG_ENABLE(external-libs, 112 AC_ARG_ENABLE(external-libs,
libqpdf/QUtil.cc
@@ -214,13 +214,14 @@ QUtil::same_file(char const* name1, char const* name2) @@ -214,13 +214,14 @@ QUtil::same_file(char const* name1, char const* name2)
214 return false; 214 return false;
215 } 215 }
216 #ifdef _WIN32 216 #ifdef _WIN32
  217 + bool same = false;
  218 +# ifndef AVOID_WINDOWS_HANDLE
217 HANDLE fh1 = CreateFile(name1, GENERIC_READ, FILE_SHARE_READ, 219 HANDLE fh1 = CreateFile(name1, GENERIC_READ, FILE_SHARE_READ,
218 NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 220 NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
219 HANDLE fh2 = CreateFile(name2, GENERIC_READ, FILE_SHARE_READ, 221 HANDLE fh2 = CreateFile(name2, GENERIC_READ, FILE_SHARE_READ,
220 NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 222 NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
221 BY_HANDLE_FILE_INFORMATION fi1; 223 BY_HANDLE_FILE_INFORMATION fi1;
222 BY_HANDLE_FILE_INFORMATION fi2; 224 BY_HANDLE_FILE_INFORMATION fi2;
223 - bool same = false;  
224 if ((fh1 != INVALID_HANDLE_VALUE) && 225 if ((fh1 != INVALID_HANDLE_VALUE) &&
225 (fh2 != INVALID_HANDLE_VALUE) && 226 (fh2 != INVALID_HANDLE_VALUE) &&
226 GetFileInformationByHandle(fh1, &fi1) && 227 GetFileInformationByHandle(fh1, &fi1) &&
@@ -239,6 +240,7 @@ QUtil::same_file(char const* name1, char const* name2) @@ -239,6 +240,7 @@ QUtil::same_file(char const* name1, char const* name2)
239 { 240 {
240 CloseHandle(fh2); 241 CloseHandle(fh2);
241 } 242 }
  243 +# endif
242 return same; 244 return same;
243 #else 245 #else
244 struct stat st1; 246 struct stat st1;
libqpdf/qpdf/qpdf-config.h.in
1 /* libqpdf/qpdf/qpdf-config.h.in. Generated from configure.ac by autoheader. */ 1 /* libqpdf/qpdf/qpdf-config.h.in. Generated from configure.ac by autoheader. */
2 2
  3 +/* Whether to avoid use of HANDLE in Windows */
  4 +#undef AVOID_WINDOWS_HANDLE
  5 +
3 /* Define to 1 if you have the <dlfcn.h> header file. */ 6 /* Define to 1 if you have the <dlfcn.h> header file. */
4 #undef HAVE_DLFCN_H 7 #undef HAVE_DLFCN_H
5 8