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