aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Pawel Stefaniak <pstef@FreeBSD.org>2021-10-10 06:37:36 +0000
committerPiotr Pawel Stefaniak <pstef@FreeBSD.org>2021-10-11 17:01:57 +0000
commit902cde5d0a620a502468a95f7eecf1098e96bdcc (patch)
tree37b06cda26d1890a76d28ae058f3253675843f03
parent4f556830dec19ec8821b2ff939ab181192ea4dfc (diff)
downloadsrc-902cde5d0a620a502468a95f7eecf1098e96bdcc.tar.gz
src-902cde5d0a620a502468a95f7eecf1098e96bdcc.zip
Revert "last(1): unbreak for 8-bit locales"
This reverts commits 8e67c427b5 (unbreak for 8-bit locales), 0ca58ca151 (correction after r351413), and f424ec1b80 (fix style after r351459). A simpler fix can be done by using the h modifier for strings that are encoded with the current locale. Reviewed by: eugen, philip Differential Revision: https://reviews.freebsd.org/D32437
-rw-r--r--usr.bin/last/last.c42
1 files changed, 5 insertions, 37 deletions
diff --git a/usr.bin/last/last.c b/usr.bin/last/last.c
index d197afe7eb0b..188f393ae3fc 100644
--- a/usr.bin/last/last.c
+++ b/usr.bin/last/last.c
@@ -92,7 +92,6 @@ static const char *crmsg; /* cause of last reboot */
static time_t currentout; /* current logout value */
static long maxrec; /* records to display */
static const char *file = NULL; /* utx.log file */
-static int noctfix = 0; /* locale is C or UTF-8 */
static int sflag = 0; /* show delta in seconds */
static int width = 5; /* show seconds in delta */
static int yflag; /* show year */
@@ -104,7 +103,6 @@ static time_t snaptime; /* if != 0, we will only
*/
static void addarg(int, char *);
-static const char *ctf(const char *);
static time_t dateconv(char *);
static void doentry(struct utmpx *);
static void hostconv(char *);
@@ -114,31 +112,6 @@ static int want(struct utmpx *);
static void usage(void);
static void wtmp(void);
-static const char*
-ctf(const char *fmt) {
- static char buf[31];
- const char *src, *end;
- char *dst;
-
- if (noctfix)
- return (fmt);
-
- end = buf + sizeof(buf);
- for (src = fmt, dst = buf; dst < end; *dst++ = *src++) {
- if (*src == '\0') {
- *dst = '\0';
- break;
- } else if (*src == '%' && *(src+1) == 's') {
- *dst++ = '%';
- *dst++ = 'h';
- *dst++ = 's';
- strlcpy(dst, src+2, end - dst);
- return (buf);
- }
- }
- return (buf);
-}
-
static void
usage(void)
{
@@ -157,11 +130,6 @@ main(int argc, char *argv[])
(void) setlocale(LC_TIME, "");
d_first = (*nl_langinfo(D_MD_ORDER) == 'd');
- (void) setlocale(LC_CTYPE, "");
- p = nl_langinfo(CODESET);
- if (strcmp(p, "UTF-8") == 0 || strcmp(p, "US-ASCII") == 0)
- noctfix = 1;
-
argc = xo_parse_args(argc, argv);
if (argc < 0)
exit(1);
@@ -294,7 +262,7 @@ wtmp(void)
(void) strftime(ct, sizeof(ct), "%+", tm);
xo_emit("\n{:utxdb/%s}", (file == NULL) ? "utx.log" : file);
xo_attr("seconds", "%lu", (unsigned long) t);
- xo_emit(ctf(" begins {:begins/%s}\n"), ct);
+ xo_emit(" begins {:begins/%s}\n", ct);
xo_close_container("last-information");
}
@@ -411,7 +379,7 @@ printentry(struct utmpx *bp, struct idtab *tt)
break;
}
xo_attr("seconds", "%lu", (unsigned long)t);
- xo_emit(ctf(" {:login-time/%s%c/%s}"), ct, tt == NULL ? '\n' : ' ');
+ xo_emit(" {:login-time/%s%c/%s}", ct, tt == NULL ? '\n' : ' ');
if (tt == NULL)
goto end;
if (!tt->logout) {
@@ -425,7 +393,7 @@ printentry(struct utmpx *bp, struct idtab *tt)
tm = localtime(&tt->logout);
(void) strftime(ct, sizeof(ct), "%R", tm);
xo_attr("seconds", "%lu", (unsigned long)tt->logout);
- xo_emit(ctf("- {:logout-time/%s}"), ct);
+ xo_emit("- {:logout-time/%s}", ct);
}
delta = tt->logout - bp->ut_tv.tv_sec;
xo_attr("seconds", "%ld", (long)delta);
@@ -435,9 +403,9 @@ printentry(struct utmpx *bp, struct idtab *tt)
tm = gmtime(&delta);
(void) strftime(ct, sizeof(ct), width >= 8 ? "%T" : "%R", tm);
if (delta < 86400)
- xo_emit(ctf(" ({:session-length/%s})\n"), ct);
+ xo_emit(" ({:session-length/%s})\n", ct);
else
- xo_emit(ctf(" ({:session-length/%ld+%s})\n"),
+ xo_emit(" ({:session-length/%ld+%s})\n",
(long)delta / 86400, ct);
}