public inbox for cygwin-apps-cvs@sourceware.org
help / color / mirror / Atom feed
* [setup - the official Cygwin setup program] branch master, updated. release_2.922
@ 2022-09-20 16:07 Jon TURNEY
  0 siblings, 0 replies; only message in thread
From: Jon TURNEY @ 2022-09-20 16:07 UTC (permalink / raw)
  To: cygwin-apps-cvs




https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/setup.git;h=4bf4dd68da0344a18f6e603a5fb60df0d9231ab7

commit 4bf4dd68da0344a18f6e603a5fb60df0d9231ab7
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon Sep 12 19:43:47 2022 +0100

    Link with mingwex before libntll
    
    Link with mingwex (which gcc specs will cause us to link with anyhow)
    before ntll.
    
    Some versions of the MinGW ntdll implib contain a subset of crt
    functions (erroneously, they were later moved to ntllcrt).  This means
    that if the linker command specifies -lntdll, an application will use
    ntdll.dll for things like strnlen(), which is (a) unexpected, and (b)
    causes problems, as that specific export is not provided by ntll on XP.

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/setup.git;h=450d4db7bcc0c476b4fb8de003683d5e50c9aebb

commit 450d4db7bcc0c476b4fb8de003683d5e50c9aebb
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon Sep 12 14:40:59 2022 +0100

    Allow to run on Windows lacking CreateSymbolicLinkW()

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/setup.git;h=f540161b77b24366f99fc6f596b57b78fafb0268

commit f540161b77b24366f99fc6f596b57b78fafb0268
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon Sep 12 14:46:40 2022 +0100

    Allow to run on Windows lacking SHMessageBoxCheckW()


Diff:
---
 Makefile.am |  1 +
 main.cc     |  7 +++++++
 mklink2.cc  | 14 +++++++++++++-
 msg.cc      | 22 +++++++++++++---------
 4 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index bf8b52ec..d8300e8d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -95,6 +95,7 @@ inilint_SOURCES = \
 	$(BZ2_LIBS) \
 	$(ZLIB_LIBS) \
 	$(LIBSOLV_LIBS) -lregex \
+	-lmingwex \
 	-lshlwapi -lcomctl32 -lole32 -lpsapi -luuid -lntdll -lwininet -lws2_32 \
 	-lmingw32 -lssp
 @SETUP@_LDFLAGS = -mwindows -Wc,-static -static-libtool-libs
diff --git a/main.cc b/main.cc
index 1cc8a0c1..ca5639cf 100644
--- a/main.cc
+++ b/main.cc
@@ -414,6 +414,13 @@ WinMain (HINSTANCE h,
       }
     else if (symlinkType == SymlinkTypeNative)
       {
+        VersionInfo v = GetVer();
+        if (v.major() < 6)
+          {
+            fprintf (stderr, "*** --symlink-type native requires Windows 6.0 or later\n");
+            exit(1);
+          }
+
         if (!(elevate || is_developer_mode() || nt_sec.hasSymlinkCreationRights()))
           {
             fprintf (stderr, "*** --symlink-type native requires SeCreateSymbolicLink privilege or 'Developer Mode'\n");
diff --git a/mklink2.cc b/mklink2.cc
index cf4df8b1..098f3be2 100644
--- a/mklink2.cc
+++ b/mklink2.cc
@@ -302,7 +302,19 @@ mknativesymlink (const char *from, const char *to)
       ((v.major() == 10) && (v.buildNumber() >= 15063)))
     flags |= SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE;
 
-  status = CreateSymbolicLinkW (wfrom, wto, flags);
+  typedef BOOLEAN (WINAPI *PFNCREATESYMBOLICLINKW)(LPCWSTR, LPCWSTR, DWORD);
+  static PFNCREATESYMBOLICLINKW pfnCreateSymbolicLinkW = 0;
+  static bool doOnce = FALSE;
+
+  if (!doOnce)
+    {
+      doOnce = TRUE;
+      pfnCreateSymbolicLinkW = (PFNCREATESYMBOLICLINKW)GetProcAddress(GetModuleHandle("kernel32"), "CreateSymbolicLinkW");
+    }
+
+  status = 0;
+  if (pfnCreateSymbolicLinkW)
+      status = pfnCreateSymbolicLinkW (wfrom, wto, flags);
 
   if (!status)
     Log (LOG_PLAIN) << "Linking " << from << " to " << to << " failed " << std::hex << GetLastError() << endLog;
diff --git a/msg.cc b/msg.cc
index bcb32660..8e344ff8 100644
--- a/msg.cc
+++ b/msg.cc
@@ -20,7 +20,6 @@
 
 #include "LogFile.h"
 #include "win32.h"
-#include <shlwapi.h>
 
 #include <stdio.h>
 #include <stdarg.h>
@@ -29,11 +28,6 @@
 #include "String++.h"
 #include "resource.h"
 
-// no prototype in shlwapi.h until MinGW64 headers 9.0.0
-#if __MINGW64_VERSION_MAJOR < 9
-extern "C" int WINAPI SHMessageBoxCheckW(HWND hwnd, LPCWSTR pszText, LPCWSTR pszCaption, UINT uType, int iDefault, LPCWSTR pszRegVal);
-#endif
-
 static int
 unattended_result(int mb_type)
 {
@@ -172,14 +166,24 @@ mbox(HWND owner, unsigned int format_id, int mb_type, ...)
     hMsgBoxHook = SetWindowsHookEx(WH_CBT, CBTProc, NULL, GetCurrentThreadId());
   }
 
+  typedef int (WINAPI *PFNSHMESSAGEBOXCHECKW)(HWND, LPCWSTR, LPCWSTR, UINT, int, LPCWSTR);
+  static PFNSHMESSAGEBOXCHECKW pfnSHMessageBoxCheckW = 0;
+  static bool doOnce = FALSE;
+
+  if (!doOnce)
+    {
+      doOnce = TRUE;
+      pfnSHMessageBoxCheckW = (PFNSHMESSAGEBOXCHECKW)GetProcAddress(GetModuleHandle("shlwapi.dll"), "SHMessageBoxCheckW");
+    }
+
   std::wstring caption = LoadStringW(IDS_MBOX_CAPTION);
   int retval;
-  if (mb_type & MB_DSA_CHECKBOX)
+  if (pfnSHMessageBoxCheckW && (mb_type & MB_DSA_CHECKBOX))
     {
       mb_type &= ~MB_DSA_CHECKBOX;
       std::wstring regkey_msg = format(L"%s-%d", regkey, format_id);
-      retval = SHMessageBoxCheckW(owner, buf.c_str(), caption.c_str(), mb_type,
-                                  unattended_result(mb_type), regkey_msg.c_str());
+      retval = pfnSHMessageBoxCheckW(owner, buf.c_str(), caption.c_str(), mb_type,
+                                     unattended_result(mb_type), regkey_msg.c_str());
     }
   else
     retval = MessageBoxW(owner, buf.c_str(), caption.c_str(), mb_type);


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-09-20 16:07 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-20 16:07 [setup - the official Cygwin setup program] branch master, updated. release_2.922 Jon TURNEY

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).