git: 6c1a174e4c0a - stable/14 - w(1): fix libxo output being locale dependant

From: Baptiste Daroussin <bapt_at_FreeBSD.org>
Date: Wed, 23 Oct 2024 07:25:57 UTC
The branch stable/14 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=6c1a174e4c0a01a40aa1c06dfc07a37a31cabe33

commit 6c1a174e4c0a01a40aa1c06dfc07a37a31cabe33
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2024-10-14 07:37:46 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2024-10-23 07:25:50 +0000

    w(1): fix libxo output being locale dependant
    
    by being locale dependant the json export is invalid in locales where
    the separator for float is a comma.
    The Json and the XML are invalid for login-time when days contains
    contains characters which are not unicode.
    
    Forcing locale to be C, makes this json and xml output valid and also
    identical accross locales, so reliable for parsers
    
    PR:             276304
    Reported by:    Vedran Miletic <vedran@miletic.net>
    
    (cherry picked from commit bd490be57438a82c22d1274bc58d51142b63f4a0)
---
 usr.bin/w/w.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/usr.bin/w/w.c b/usr.bin/w/w.c
index 93f17b0f4ae3..69ff8c33cbbf 100644
--- a/usr.bin/w/w.c
+++ b/usr.bin/w/w.c
@@ -144,14 +144,16 @@ main(int argc, char *argv[])
 	char buf[MAXHOSTNAMELEN], fn[MAXHOSTNAMELEN];
 	char *dot;
 
-	(void)setlocale(LC_ALL, "");
-	use_ampm = (*nl_langinfo(T_FMT_AMPM) != '\0');
-	use_comma = (*nl_langinfo(RADIXCHAR) != ',');
 
 	argc = xo_parse_args(argc, argv);
 	if (argc < 0)
 		exit(1);
 
+	if (xo_get_style(NULL) == XO_STYLE_TEXT) {
+		setlocale(LC_ALL, "");
+	}
+	use_ampm = (*nl_langinfo(T_FMT_AMPM) != '\0');
+	use_comma = (*nl_langinfo(RADIXCHAR) != ',');
 	/* Are we w(1) or uptime(1)? */
 	if (strcmp(basename(argv[0]), "uptime") == 0) {
 		wcmd = 0;