From: Jeremy Drake <cyg...@jdrake.com>

If the Cygwin dll's architecture is different from the host system's
architecture, append an additional tag that indicates the host system
architecture (the Cygwin dll's architecture is already indicated in
machine).

Signed-off-by: Jeremy Drake <cyg...@jdrake.com>
---
v2: get rid of hardcoded string lengths, use wincap accessors
directly instead of caching their returns, actually add "n" variable as
intended

v3: inline append_host_suffix, remove unnecessary switch cases, fix typo
strcpy -> stpcpy in ARM64 case

 winsup/cygwin/uname.cc | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/winsup/cygwin/uname.cc b/winsup/cygwin/uname.cc
index dd4160189c..52c807ae54 100644
--- a/winsup/cygwin/uname.cc
+++ b/winsup/cygwin/uname.cc
@@ -33,11 +33,25 @@ uname_x (struct utsname *name)
   __try
     {
       char buf[NI_MAXHOST + 1] ATTRIBUTE_NONSTRING;
+      int n;

       memset (name, 0, sizeof (*name));
       /* sysname */
-      __small_sprintf (name->sysname, "CYGWIN_%s-%u",
-                      wincap.osname (), wincap.build_number ());
+      n = __small_sprintf (name->sysname, "CYGWIN_%s-%u",
+                          wincap.osname (), wincap.build_number ());
+      if (wincap.host_machine () != wincap.cygwin_machine ())
+       {
+         switch (wincap.host_machine ())
+           {
+             case IMAGE_FILE_MACHINE_ARM64:
+               n = stpcpy (name->sysname + n, "-ARM64") - name->sysname;
+               break;
+             default:
+               n += __small_sprintf (name->sysname + n, "-%04y",
+                                     (int) wincap.host_machine ());
+               break;
+           }
+       }
       /* nodename */
       memset (buf, 0, sizeof buf);
       cygwin_gethostname (buf, sizeof buf - 1);
-- 
2.47.0.windows.2

Reply via email to