From 75eb2d0e850352bef1afe052315de63817b2070b Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 29 Jan 2021 13:52:31 +0200 Subject: Support 'operating-system-release' on MS-Windows * src/w32fns.c (w32_version_string) [WINDOWSNT]: New function. * src/w32common.h (w32_version_string) [WINDOWSNT]: Add prototype. * src/editfns.c (init_editfns) [WINDOWSNT]: Produce a non-nil string with the OS version. --- src/editfns.c | 7 ++++++- src/w32common.h | 5 +++++ src/w32fns.c | 12 ++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/editfns.c b/src/editfns.c index 3c2a858b46e..e3285494c14 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -52,6 +52,9 @@ along with GNU Emacs. If not, see . */ #include "window.h" #include "blockinput.h" +#ifdef WINDOWSNT +# include "w32common.h" +#endif static void update_buffer_properties (ptrdiff_t, ptrdiff_t); static Lisp_Object styled_format (ptrdiff_t, Lisp_Object *, bool); @@ -121,12 +124,14 @@ init_editfns (void) else if (NILP (Vuser_full_name)) Vuser_full_name = build_string ("unknown"); -#ifdef HAVE_SYS_UTSNAME_H +#if defined HAVE_SYS_UTSNAME_H { struct utsname uts; uname (&uts); Voperating_system_release = build_string (uts.release); } +#elif defined WINDOWSNT + Voperating_system_release = build_string (w32_version_string ()); #else Voperating_system_release = Qnil; #endif diff --git a/src/w32common.h b/src/w32common.h index 94bb457e59d..714a2386a68 100644 --- a/src/w32common.h +++ b/src/w32common.h @@ -50,6 +50,11 @@ extern int os_subtype; /* Cache system info, e.g., the NT page size. */ extern void cache_system_info (void); +#ifdef WINDOWSNT +/* Return a static buffer with the MS-Windows version string. */ +extern char * w32_version_string (void); +#endif + typedef void (* VOIDFNPTR) (void); /* Load a function address from a DLL. Cast the result via VOIDFNPTR diff --git a/src/w32fns.c b/src/w32fns.c index 7519c752b68..e93a0b85d93 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -9480,6 +9480,18 @@ cache_system_info (void) w32_num_mouse_buttons = GetSystemMetrics (SM_CMOUSEBUTTONS); } +#ifdef WINDOWSNT +char * +w32_version_string (void) +{ + /* NNN.NNN.NNNNNNNNNN */ + static char version_string[3 + 1 + 3 + 1 + 10 + 1]; + _snprintf (version_string, sizeof version_string, "%d.%d.%d", + w32_major_version, w32_minor_version, w32_build_number); + return version_string; +} +#endif + #ifdef EMACSDEBUG void _DebPrint (const char *fmt, ...) -- cgit v1.2.3