git: 8d8b9b560afd - main - sort: Fix message catalogue usage
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 28 Jan 2022 21:52:40 UTC
The branch main has been updated by markj:
URL: https://cgit.FreeBSD.org/src/commit/?id=8d8b9b560afdf88f5537f259a4a14660d2a85b1f
commit 8d8b9b560afdf88f5537f259a4a14660d2a85b1f
Author: Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2022-01-28 17:49:28 +0000
Commit: Mark Johnston <markj@FreeBSD.org>
CommitDate: 2022-01-28 21:52:29 +0000
sort: Fix message catalogue usage
- Check that catopen() succeeded before calling catclose(). musl will
crash in the latter if the catalogue descriptor is -1.
- Keep the message catalogue open for most of sort(1)'s actual
operation.
- Don't use catgets(3) to print error messages if catopen(3) had failed.
Reviewed by: arichardson, emaste
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D34081
---
usr.bin/sort/sort.c | 19 ++++++++++---------
usr.bin/sort/sort.h | 3 ++-
2 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/usr.bin/sort/sort.c b/usr.bin/sort/sort.c
index 0fbbd9284aad..b7c8107cc22d 100644
--- a/usr.bin/sort/sort.c
+++ b/usr.bin/sort/sort.c
@@ -57,7 +57,7 @@ __FBSDID("$FreeBSD$");
#ifndef WITHOUT_NLS
#include <nl_types.h>
-nl_catd catalog;
+nl_catd catalog = (nl_catd)-1;
#endif
#define OPTIONS "bcCdfghik:Mmno:RrsS:t:T:uVz"
@@ -1011,6 +1011,10 @@ main(int argc, char **argv)
set_tmpdir();
set_sort_opts();
+#ifndef WITHOUT_NLS
+ catalog = catopen("sort", NL_CAT_LOCALE);
+#endif
+
fix_obsolete_keys(&argc, argv);
while (((c = getopt_long(argc, argv, OPTIONS, long_options, NULL))
@@ -1194,17 +1198,9 @@ main(int argc, char **argv)
argv = argv_from_file0;
}
-#ifndef WITHOUT_NLS
- catalog = catopen("sort", NL_CAT_LOCALE);
-#endif
-
if (sort_opts_vals.cflag && sort_opts_vals.mflag)
errx(1, "%c:%c: %s", 'm', 'c', getstr(1));
-#ifndef WITHOUT_NLS
- catclose(catalog);
-#endif
-
if (keys_num == 0) {
keys_num = 1;
keys = sort_realloc(keys, sizeof(struct key_specs));
@@ -1343,5 +1339,10 @@ main(int argc, char **argv)
sort_free(outfile);
+#ifndef WITHOUT_NLS
+ if (catalog != (nl_catd)-1)
+ catclose(catalog);
+#endif
+
return (result);
}
diff --git a/usr.bin/sort/sort.h b/usr.bin/sort/sort.h
index 96b36a65f4e4..47ce6ea29ab3 100644
--- a/usr.bin/sort/sort.h
+++ b/usr.bin/sort/sort.h
@@ -49,7 +49,8 @@
#include <nl_types.h>
extern nl_catd catalog;
-#define getstr(n) catgets(catalog, 1, n, nlsstr[n])
+#define getstr(n) \
+ (catalog == (nl_catd)-1 ? nlsstr[n] : catgets(catalog, 1, n, nlsstr[n]))
#endif
extern const char *nlsstr[];