Does comm(1) need to setlocale(3)?
It uses strcoll(3) by default, which ignores the locale
and does what strcmp(3) does, or strcasecmp(3) with -f,
which ignores the locale too.
So remove the setlocale(3), remove the header,
the LC_ that have been commented out since the initial revision in 1995,
and just use strcmp(3) or strcasecmp(3).
Jan
Index: comm.1
===================================================================
RCS file: /cvs/src/usr.bin/comm/comm.1,v
retrieving revision 1.15
diff -u -p -r1.15 comm.1
--- comm.1 3 Sep 2010 11:09:28 -0000 1.15
+++ comm.1 10 Jan 2019 20:24:35 -0000
@@ -83,14 +83,6 @@ printed in column number three will have
.Nm
assumes that the files are lexically sorted; all characters
participate in line comparisons.
-.\" .Sh ENVIRONMENT
-.\" .Bl -tag -width indent
-.\" .It Ev LANG
-.\" .It Ev LC_ALL
-.\" .It Ev LC_CTYPE
-.\" .It Ev LC_COLLATE
-.\" .It Ev LC_MESSAGES
-.\" .El
.Sh EXIT STATUS
.Ex -std comm
.Sh SEE ALSO
Index: comm.c
===================================================================
RCS file: /cvs/src/usr.bin/comm/comm.c,v
retrieving revision 1.10
diff -u -p -r1.10 comm.c
--- comm.c 9 Oct 2015 01:37:07 -0000 1.10
+++ comm.c 10 Jan 2019 20:24:35 -0000
@@ -35,7 +35,6 @@
#include <err.h>
#include <limits.h>
-#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -59,13 +58,11 @@ main(int argc, char *argv[])
char **p, line1[MAXLINELEN], line2[MAXLINELEN];
int (*compare)(const char * ,const char *);
- setlocale(LC_ALL, "");
-
if (pledge("stdio rpath", NULL) == -1)
err(1, "pledge");
flag1 = flag2 = flag3 = 1;
- compare = strcoll;
+ compare = strcmp;
while ((ch = getopt(argc, argv, "123f")) != -1)
switch(ch) {
case '1':