[PATCH v1 2/3] Use streq() instead of its pattern

Alejandro Colomar <[email protected]>
Newsgroups gmane.comp.printing.groff.general
Message-ID <3a0e63e2e8ecdfdb3fd27ac77719b7a026ed45fc.1771717050.git.alx@kernel.org>
Signed-off-by: Alejandro Colomar <[email protected]>
---
 src/devices/grodvi/dvi.cpp        |   6 +-
 src/devices/grohtml/html-text.cpp |   2 +-
 src/devices/grohtml/post-html.cpp | 118 +++++++++++++++---------------
 src/devices/grolbp/lbp.cpp        |   4 +-
 src/devices/grolj4/lj4.cpp        |   4 +-
 src/devices/grops/ps.cpp          |   8 +-
 src/devices/grotty/tty.cpp        |   4 +-
 src/devices/xditview/Dvi.c        |   2 +-
 src/devices/xditview/device.c     |  26 +++----
 src/devices/xditview/font.c       |   7 +-
 src/devices/xditview/xditview.c   |  16 ++--
 src/include/nonposix.h            |   2 +-
 src/include/ptable.h              |   8 +-
 src/libs/libbib/search.cpp        |   4 +-
 src/libs/libdriver/input.cpp      |   8 +-
 src/libs/libdriver/printer.cpp    |   4 +-
 src/libs/libgroff/change_lf.cpp   |   2 +-
 src/libs/libgroff/error.cpp       |   2 +-
 src/libs/libgroff/font.cpp        |  84 ++++++++++-----------
 src/libs/libgroff/localcharset.c  |   7 +-
 src/libs/libgroff/searchpath.cpp  |   2 +-
 src/libs/libgroff/symbol.cpp      |   4 +-
 src/libs/libgroff/tmpname.cpp     |   2 +-
 src/libs/libxutil/DviChar.c       |   6 +-
 src/libs/libxutil/XFontName.c     |   2 +-
 src/preproc/eqn/box.cpp           |   6 +-
 src/preproc/eqn/main.cpp          |   8 +-
 src/preproc/eqn/text.cpp          |   6 +-
 src/preproc/grn/hdb.cpp           |   6 +-
 src/preproc/grn/main.cpp          |  10 +--
 src/preproc/html/pre-html.cpp     |  17 ++---
 src/preproc/html/pushback.cpp     |   2 +-
 src/preproc/pic/lex.cpp           |   2 +-
 src/preproc/pic/main.cpp          |   4 +-
 src/preproc/pic/pic.ypp           |  10 +--
 src/preproc/pic/troff.cpp         |   2 +-
 src/preproc/preconv/preconv.cpp   |   6 +-
 src/preproc/refer/command.cpp     |   4 +-
 src/preproc/refer/refer.cpp       |  10 +--
 src/preproc/refer/token.cpp       |   2 +-
 src/preproc/soelim/soelim.cpp     |   2 +-
 src/preproc/tbl/table.cpp         |   2 +-
 src/roff/groff/groff.cpp          |  19 +++--
 src/roff/troff/input.cpp          |  62 ++++++++--------
 src/utils/addftinfo/addftinfo.cpp |   6 +-
 src/utils/hpftodit/hpftodit.cpp   |  21 +++---
 src/utils/indxbib/indxbib.cpp     |   6 +-
 src/utils/tfmtodit/tfmtodit.cpp   |   4 +-
 src/utils/xtotroff/xtotroff.c     |   4 +-
 49 files changed, 274 insertions(+), 281 deletions(-)

diff --git a/src/devices/grodvi/dvi.cpp b/src/devices/grodvi/dvi.cpp
index 399663bf35f4..0fd018f1563d 100644
--- a/src/devices/grodvi/dvi.cpp
+++ b/src/devices/grodvi/dvi.cpp
@@ -27,7 +27,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #include <stdio.h> // EOF, FILE, fprintf(), printf(), putc(), setbuf(),
 		   // sprintf(), stderr, stdout
 #include <stdlib.h> // exit(), EXIT_SUCCESS, strtol()
-#include <string.h> // strcmp(), strlen()
+#include <string.h> // strlen()
 
 #include <getopt.h> // getopt_long()
 
@@ -99,7 +99,7 @@ void dvi_font::handle_unknown_font_command(const char *command,
 					   int lineno)
 {
   char *ptr;
-  if (strcmp(command, "checksum") == 0) {
+  if (streq(command, "checksum")) {
     if (arg == 0)
       fatal_with_file_and_line(fn, lineno,
 			       "'checksum' command requires an argument");
@@ -108,7 +108,7 @@ void dvi_font::handle_unknown_font_command(const char *command,
       fatal_with_file_and_line(fn, lineno, "bad checksum");
     }
   }
-  else if (strcmp(command, "designsize") == 0) {
+  else if (streq(command, "designsize")) {
     if (arg == 0)
       fatal_with_file_and_line(fn, lineno,
 			       "'designsize' command requires an argument");
diff --git a/src/devices/grohtml/html-text.cpp b/src/devices/grohtml/html-text.cpp
index 449c6b7e7dc8..9362dda7b569 100644
--- a/src/devices/grohtml/html-text.cpp
+++ b/src/devices/grohtml/html-text.cpp
@@ -690,7 +690,7 @@ void html_text::do_para (const char *arg, html_indent *in, int space)
     if (is_present(PRE_TAG)) {
       html_indent *i = remove_indent(PRE_TAG);
       done_pre();
-      if ((arg == NULL || (strcmp(arg, "") == 0)) &&
+      if ((arg == NULL || streq(arg, "")) &&
 	  (i == in || in == NULL))
 	in = i;
       else
diff --git a/src/devices/grohtml/post-html.cpp b/src/devices/grohtml/post-html.cpp
index 3d567d1b48e8..8422d12f806c 100644
--- a/src/devices/grohtml/post-html.cpp
+++ b/src/devices/grohtml/post-html.cpp
@@ -30,7 +30,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #include <stdio.h> // EOF, FILE, fclose(), fflush(), fopen(), freopen(),
 		   // fseek(), SEEK_SET, setbuf(), stderr, stdout
 #include <stdlib.h> // abs(), atoi(), EXIT_SUCCESS, exit()
-#include <string.h> // strcasecmp(), strcmp(), strerror(), strlen(),
+#include <string.h> // strcasecmp(), strerror(), strlen(),
 		    // strncmp()
 #include <time.h> // asctime(), tm
 
@@ -750,7 +750,7 @@ int text_glob::is_a_tag (void)
 // TODO: boolify
 int text_glob::is_eol (void)
 {
-  return is_tag && (strcmp(text_string, "devtag:.eol") == 0);
+  return is_tag && streq(text_string, "devtag:.eol");
 }
 
 /*
@@ -760,7 +760,7 @@ int text_glob::is_eol (void)
 // TODO: boolify
 int text_glob::is_eol_ce (void)
 {
-  return is_tag && (strcmp(text_string, "devtag:eol.ce") == 0);
+  return is_tag && streq(text_string, "devtag:eol.ce");
 }
 
 /*
@@ -770,7 +770,7 @@ int text_glob::is_eol_ce (void)
 // TODO: boolify
 int text_glob::is_tl (void)
 {
-  return is_tag && (strcmp(text_string, "devtag:.tl") == 0);
+  return is_tag && streq(text_string, "devtag:.tl");
 }
 
 /*
@@ -780,7 +780,7 @@ int text_glob::is_tl (void)
 // TODO: boolify
 int text_glob::is_eo_tl (void)
 {
-  return is_tag && (strcmp(text_string, "devtag:.eo.tl") == 0);
+  return is_tag && streq(text_string, "devtag:.eo.tl");
 }
 
 /*
@@ -816,7 +816,7 @@ int text_glob::is_fi (void)
 // TODO: boolify
 int text_glob::is_eo_h (void)
 {
-  return is_tag && (strcmp(text_string, "devtag:.eo.h") == 0);
+  return is_tag && streq(text_string, "devtag:.eo.h");
 }
 
 /*
@@ -892,7 +892,7 @@ int text_glob::is_col (void)
 // TODO: boolify
 int text_glob::is_tab_ts (void)
 {
-  return is_tag && (strcmp(text_string, "devtag:.tab-ts") == 0);
+  return is_tag && streq(text_string, "devtag:.tab-ts");
 }
 
 /*
@@ -902,7 +902,7 @@ int text_glob::is_tab_ts (void)
 // TODO: boolify
 int text_glob::is_tab_te (void)
 {
-  return is_tag && (strcmp(text_string, "devtag:.tab-te") == 0);
+  return is_tag && streq(text_string, "devtag:.tab-te");
 }
 
 /*
@@ -959,7 +959,7 @@ int text_glob::is_auto_img (void)
 // TODO: boolify
 int text_glob::is_br (void)
 {
-  return is_a_tag() && ((strcmp ("devtag:.br", text_string) == 0)
+  return is_a_tag() && (streq("devtag:.br", text_string)
 			|| (strncmp("devtag:.sp", text_string,
 				    strlen("devtag:.sp")) == 0));
 }
@@ -1913,7 +1913,7 @@ void assert_state::add (assert_pos **h,
   assert_pos *t = *h;
 
   while (t != 0 /* nullptr */) {
-    if (strcmp(t->id, i) == 0)
+    if (streq(t->id, i))
       break;
     t = t->next;
   }
@@ -1968,7 +1968,7 @@ void assert_state::compare(assert_pos *t,
   while ((*s) == '=')
     s++;
 
-  if (strcmp(v, s) != 0) {
+  if (!streq(v, s)) {
     if (0 /* nullptr */ == f)
       f = "stdin";
     if (0 /* nullptr */ == l)
@@ -1982,15 +1982,15 @@ void assert_state::compare(assert_pos *t,
 void assert_state::close (const char *c)
 {
   assert(c != 0 /* nullptr */);
-  if (strcmp(c, "sp") == 0)
+  if (streq(c, "sp"))
     check_sp_flag = 0;
-  else if (strcmp(c, "br") == 0)
+  else if (streq(c, "br"))
     check_br_flag = 0;
-  else if (strcmp(c, "fi") == 0)
+  else if (streq(c, "fi"))
     check_fi_flag = 0;
-  else if (strcmp(c, "nf") == 0)
+  else if (streq(c, "nf"))
     check_fi_flag = 0;
-  else if (strcmp(c, "ce") == 0)
+  else if (streq(c, "ce"))
     check_ce_flag = 0;
   else
     fprintf(stderr, "%s: ignoring unrecognized tag '%s'\n",
@@ -2039,27 +2039,27 @@ void assert_state::set (const char *c, const char *v,
     f = "stdin";
 
   // fprintf(stderr, "%s:%s:setting %s to %s\n", f, l, c, v);
-  if (strcmp(c, "sp") == 0) {
+  if (streq(c, "sp")) {
     check_sp_flag = 1;
     val_sp = replace_str(val_sp, strsave(v));
     file_sp = replace_str(file_sp, strsave(f));
     line_sp = replace_str(line_sp, strsave(l));
-  } else if (strcmp(c, "br") == 0) {
+  } else if (streq(c, "br")) {
     check_br_flag = 1;
     val_br = replace_str(val_br, strsave(v));
     file_br = replace_str(file_br, strsave(f));
     line_br = replace_str(line_br, strsave(l));
-  } else if (strcmp(c, "fi") == 0) {
+  } else if (streq(c, "fi")) {
     check_fi_flag = 1;
     val_fi = replace_str(val_fi, strsave(v));
     file_fi = replace_str(file_fi, strsave(f));
     line_fi = replace_str(line_fi, strsave(l));
-  } else if (strcmp(c, "nf") == 0) {
+  } else if (streq(c, "nf")) {
     check_fi_flag = 1;
     val_fi = replace_negate_str(val_fi, strsave(v));
     file_fi = replace_str(file_fi, strsave(f));
     line_fi = replace_str(line_fi, strsave(l));
-  } else if (strcmp(c, "ce") == 0) {
+  } else if (streq(c, "ce")) {
     check_ce_flag = 1;
     val_ce = replace_str(val_ce, strsave(v));
     file_ce = replace_str(file_ce, strsave(f));
@@ -2397,7 +2397,7 @@ int html_printer::is_bold (font *f)
   // XXX: This property should be inferred from font description data,
   // not the file name.
   const char *fontname = f->get_filename();
-  return (strcmp(fontname, "B") == 0) || (strcmp(fontname, "BI") == 0);
+  return streq(fontname, "B") || streq(fontname, "BI");
 }
 
 /*
@@ -2411,11 +2411,11 @@ font *html_printer::make_bold (font *f)
   // scheme.
   const char *fontname = f->get_filename();
 
-  if (strcmp(fontname, "B") == 0)
+  if (streq(fontname, "B"))
     return f;
-  if (strcmp(fontname, "I") == 0)
+  if (streq(fontname, "I"))
     return font::load_font("BI");
-  if (strcmp(fontname, "BI") == 0)
+  if (streq(fontname, "BI"))
     return f;
   return 0 /* nullptr */;
 }
@@ -3188,10 +3188,8 @@ void html_printer::do_check_center(void)
 	else
 	  current_paragraph->do_para("class=\"center\"", space);
       } else
-	if ((strcmp("align=\"center\"",
-		    current_paragraph->get_alignment()) != 0)
-	    && (strcmp("class=\"center\"",
-		       current_paragraph->get_alignment()) != 0)) {
+	if (!streq("align=\"center\"", current_paragraph->get_alignment())
+	    && !streq("class=\"center\"", current_paragraph->get_alignment())) {
 	  /*
 	   *  different alignment, so shutdown paragraph and open
 	   *  a new one.
@@ -3511,11 +3509,11 @@ void html_printer::troff_tag (text_glob *g)
     seen_break = 1;
     as.check_br(1);
     do_break();
-  } else if (strcmp(t, ".centered-image") == 0) {
+  } else if (streq(t, ".centered-image")) {
     do_centered_image();
-  } else if (strcmp(t, ".right-image") == 0) {
+  } else if (streq(t, ".right-image")) {
     do_right_image();
-  } else if (strcmp(t, ".left-image") == 0) {
+  } else if (streq(t, ".left-image")) {
     do_left_image();
   } else if (strncmp(t, ".auto-image", 11) == 0) {
     char *a = t+11;
@@ -3557,7 +3555,7 @@ void html_printer::troff_tag (text_glob *g)
   } else if (strncmp(t, ".ps", 3) == 0) {
     char *a = t+3;
     do_pointsize(a);
-  } else if (strcmp(t, ".links") == 0) {
+  } else if (streq(t, ".links")) {
     do_links();
   } else if (strncmp(t, ".job-name", 9) == 0) {
     char *a = t+9;
@@ -3565,11 +3563,11 @@ void html_printer::troff_tag (text_glob *g)
   } else if (strncmp(t, ".head", 5) == 0) {
     char *a = t+5;
     do_head(a);
-  } else if (strcmp(t, ".no-auto-rule") == 0) {
+  } else if (streq(t, ".no-auto-rule")) {
     auto_rule = FALSE;
-  } else if (strcmp(t, ".tab-ts") == 0) {
+  } else if (streq(t, ".tab-ts")) {
     do_tab_ts(g);
-  } else if (strcmp(t, ".tab-te") == 0) {
+  } else if (streq(t, ".tab-te")) {
     do_tab_te();
   } else if (strncmp(t, ".col ", 5) == 0) {
     char *a = t+4;
@@ -3628,7 +3626,7 @@ void html_printer::flush_globs (void)
 
       handle_state_assertion(g);
 
-      if (strcmp(g->text_string, "XXXXXXX") == 0)
+      if (streq(g->text_string, "XXXXXXX"))
 	stop();
 
       if (g->is_a_tag())
@@ -3985,7 +3983,7 @@ void html_printer::lookahead_for_tables (void)
       fprintf(stderr, g->text_string) ;
       fprintf(stderr, "] ") ;
       fflush(stderr);
-      if (strcmp(g->text_string, "XXXXXXX") == 0)
+      if (streq(g->text_string, "XXXXXXX"))
 	stop();
 #endif
 
@@ -4235,22 +4233,22 @@ int html_printer::is_font_courier (font *f)
 void html_printer::end_font (const char *fontname)
 {
   assert(fontname != 0 /* nullptr */);
-  if (strcmp(fontname, "B") == 0) {
+  if (streq(fontname, "B")) {
     current_paragraph->done_bold();
-  } else if (strcmp(fontname, "I") == 0) {
+  } else if (streq(fontname, "I")) {
     current_paragraph->done_italic();
-  } else if (strcmp(fontname, "BI") == 0) {
+  } else if (streq(fontname, "BI")) {
     current_paragraph->done_bold();
     current_paragraph->done_italic();
-  } else if (strcmp(fontname, "CR") == 0) {
+  } else if (streq(fontname, "CR")) {
     current_paragraph->done_tt();
-  } else if (strcmp(fontname, "CI") == 0) {
+  } else if (streq(fontname, "CI")) {
     current_paragraph->done_italic();
     current_paragraph->done_tt();
-  } else if (strcmp(fontname, "CB") == 0) {
+  } else if (streq(fontname, "CB")) {
     current_paragraph->done_bold();
     current_paragraph->done_tt();
-  } else if (strcmp(fontname, "CBI") == 0) {
+  } else if (streq(fontname, "CBI")) {
     current_paragraph->done_bold();
     current_paragraph->done_italic();
     current_paragraph->done_tt();
@@ -4264,25 +4262,25 @@ void html_printer::end_font (const char *fontname)
 void html_printer::start_font (const char *fontname)
 {
   assert(fontname != 0 /* nullptr */);
-  if (strcmp(fontname, "R") == 0) {
+  if (streq(fontname, "R")) {
     current_paragraph->done_bold();
     current_paragraph->done_italic();
     current_paragraph->done_tt();
-  } else if (strcmp(fontname, "B") == 0) {
+  } else if (streq(fontname, "B")) {
     current_paragraph->do_bold();
-  } else if (strcmp(fontname, "I") == 0) {
+  } else if (streq(fontname, "I")) {
     current_paragraph->do_italic();
-  } else if (strcmp(fontname, "BI") == 0) {
+  } else if (streq(fontname, "BI")) {
     current_paragraph->do_bold();
     current_paragraph->do_italic();
-  } else if (strcmp(fontname, "CR") == 0) {
+  } else if (streq(fontname, "CR")) {
     if ((! fill_on)
 	&& is_courier_until_eol()
 	&& is_line_start(! fill_on)) {
       current_paragraph->do_pre();
     }
     current_paragraph->do_tt();
-  } else if (strcmp(fontname, "CI") == 0) {
+  } else if (streq(fontname, "CI")) {
     if ((! fill_on)
 	&& is_courier_until_eol()
 	&& is_line_start(! fill_on)) {
@@ -4290,7 +4288,7 @@ void html_printer::start_font (const char *fontname)
     }
     current_paragraph->do_tt();
     current_paragraph->do_italic();
-  } else if (strcmp(fontname, "CB") == 0) {
+  } else if (streq(fontname, "CB")) {
     if ((! fill_on)
 	&& is_courier_until_eol()
 	&& is_line_start(! fill_on)) {
@@ -4298,7 +4296,7 @@ void html_printer::start_font (const char *fontname)
     }
     current_paragraph->do_tt();
     current_paragraph->do_bold();
-  } else if (strcmp(fontname, "CBI") == 0) {
+  } else if (streq(fontname, "CBI")) {
     if ((! fill_on)
 	&& is_courier_until_eol()
 	&& is_line_start(! fill_on)) {
@@ -5306,13 +5304,13 @@ void html_printer::write_navigation (const string &top,
 	    "<tr><td class=\"left\">", stdout);
     handle_valid_flag(FALSE);
     fputs("[ ", stdout);
-    if ((strcmp(prev.contents(), "") != 0)
+    if (!streq(prev.contents(), "")
 	&& prev != top
 	&& prev != current) {
       emit_link(prev, "prev");
       need_bar = TRUE;
     }
-    if ((strcmp(next.contents(), "") != 0)
+    if (!streq(next.contents(), "")
 	&& next != top
 	&& next != current) {
       if (need_bar)
@@ -5321,7 +5319,7 @@ void html_printer::write_navigation (const string &top,
       need_bar = TRUE;
     }
     if (top != "<standard input>"
-	&& (strcmp(top.contents(), "") != 0)
+	&& !streq(top.contents(), "")
 	&& top != current) {
       if (need_bar)
 	fputs(" | ", stdout);
@@ -5655,9 +5653,9 @@ void html_printer::handle_assertion (int minv, int minh,
   char *file= get_str(n, &n);
   char *line= get_str(n, &n);
 
-  if (strcmp(cmd, "assertion:[x") == 0)
+  if (streq(cmd, "assertion:[x"))
     as.addx(cmd, id, make_val(val, minh, id, file, line), file, line);
-  else if (strcmp(cmd, "assertion:[y") == 0)
+  else if (streq(cmd, "assertion:[y"))
     as.addy(cmd, id, make_val(val, minv, id, file, line), file, line);
   else
     if (strncmp(cmd, "assertion:[", strlen("assertion:[")) == 0)
@@ -5955,10 +5953,10 @@ int main(int argc, char **argv)
       valid_flag = TRUE;
       break;
     case 'x':
-      if (strcmp(optarg, "x") == 0) {
+      if (streq(optarg, "x")) {
 	dialect = xhtml;
 	simple_anchors = TRUE;
-      } else if (strcmp(optarg, "4") == 0)
+      } else if (streq(optarg, "4"))
 	dialect = html4;
       else
 	warning("unsupported HTML dialect: '%1'", optarg);
diff --git a/src/devices/grolbp/lbp.cpp b/src/devices/grolbp/lbp.cpp
index 7b4d85695454..a33ed0791b3a 100644
--- a/src/devices/grolbp/lbp.cpp
+++ b/src/devices/grolbp/lbp.cpp
@@ -33,7 +33,7 @@ TODO
 #include <math.h> // fabs(), sqrt()
 #include <stdcountof.h>
 #include <stdlib.h> // abs(), EXIT_SUCCESS, exit(), strtol()
-#include <string.h> // strcmp(), strcpy(), strlen(), strncpy()
+#include <string.h> // strcpy(), strlen(), strncpy()
 #include <strings.h> // strcasecmp()
 
 #include <getopt.h> // getopt_long()
@@ -140,7 +140,7 @@ void lbp_font::handle_unknown_font_command(const char *command,
 					   const char *arg,
 					   const char *fn, int lineno)
 {
-  if (strcmp(command, "lbpname") == 0) {
+  if (streq(command, "lbpname")) {
     if (arg == 0)
       fatal_with_file_and_line(fn, lineno,
 			       "'%1' command requires an argument",
diff --git a/src/devices/grolj4/lj4.cpp b/src/devices/grolj4/lj4.cpp
index d0b9ef54c32d..ef4b74aa2d1b 100644
--- a/src/devices/grolj4/lj4.cpp
+++ b/src/devices/grolj4/lj4.cpp
@@ -41,7 +41,7 @@ X command to include bitmap graphics
 #include <stdio.h> // EOF, FILE, fflush(), fprintf(), printf(),
 		   // setbuf(), stderr, stdout
 #include <stdlib.h> // exit(), EXIT_SUCCESS, strtol()
-#include <string.h> // strcmp()
+#include <string.h>
 #include <strings.h> // strcasecmp()
 
 #include <getopt.h> // getopt_long()
@@ -146,7 +146,7 @@ void lj4_font::handle_unknown_font_command(const char *command,
 					   int lineno)
 {
   for (size_t i = 0; i < countof(command_table); i++) {
-    if (strcmp(command, command_table[i].s) == 0) {
+    if (streq(command, command_table[i].s)) {
       if (0 /* nullptr */ == arg)
 	fatal_with_file_and_line(fn, lineno,
 				 "'%1' command requires an argument",
diff --git a/src/devices/grops/ps.cpp b/src/devices/grops/ps.cpp
index 7f8145902376..9eb2e5178772 100644
--- a/src/devices/grops/ps.cpp
+++ b/src/devices/grops/ps.cpp
@@ -35,7 +35,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #include <stdio.h> // EOF, FILE, fclose(), fgets(), fileno(), fseek(),
 		   // getc(), SEEK_SET, setbuf(), stderr, stdout
 #include <stdlib.h> // exit(), EXIT_SUCCESS, putenv(), strtol()
-#include <string.h> // strchr(), strcmp(), strcpy(), strerror(),
+#include <string.h> // strchr(), strcpy(), strerror(),
 		    // strlen(), strncmp(), strstr(), strtok()
 #include <time.h> // asctime()
 
@@ -466,7 +466,7 @@ ps_font::~ps_font()
 void ps_font::handle_unknown_font_command(const char *command, const char *arg,
 					  const char *fn, int lineno)
 {
-  if (strcmp(command, "encoding") == 0) {
+  if (streq(command, "encoding")) {
     if (arg == 0)
       error_with_file_and_line(fn, lineno,
 			       "'encoding' command requires an argument");
@@ -478,7 +478,7 @@ void ps_font::handle_unknown_font_command(const char *command, const char *arg,
 static void handle_unknown_desc_command(const char *command, const char *arg,
 					const char *fn, int lineno)
 {
-  if (strcmp(command, "broken") == 0) {
+  if (streq(command, "broken")) {
     if (arg == 0)
       error_with_file_and_line(fn, lineno,
 			       "'broken' command requires an argument");
@@ -690,7 +690,7 @@ int ps_printer::set_encoding_index(ps_font *f)
       int encoding_index
 	= (static_cast<ps_font *>(p->p))->encoding_index;
       if ((encoding != 0 /* nullptr */) && encoding_index >= 0
-	  && strcmp(f->encoding, encoding) == 0) {
+	  && streq(f->encoding, encoding)) {
 	return f->encoding_index = encoding_index;
       }
     }
diff --git a/src/devices/grotty/tty.cpp b/src/devices/grotty/tty.cpp
index 8e69a3b59940..182cc60ba815 100644
--- a/src/devices/grotty/tty.cpp
+++ b/src/devices/grotty/tty.cpp
@@ -155,9 +155,9 @@ tty_font::~tty_font()
 #if 0
 void tty_font::handle_x_command(int argc, const char **argv)
 {
-  if (argc >= 1 && strcmp(argv[0], "bold") == 0)
+  if (argc >= 1 && streq(argv[0], "bold"))
     mode |= BOLD_MODE;
-  else if (argc >= 1 && strcmp(argv[0], "underline") == 0)
+  else if (argc >= 1 && streq(argv[0], "underline"))
     mode |= UNDERLINE_MODE;
 }
 #endif
diff --git a/src/devices/xditview/Dvi.c b/src/devices/xditview/Dvi.c
index 26f0ee6bf349..49531e1bd37a 100644
--- a/src/devices/xditview/Dvi.c
+++ b/src/devices/xditview/Dvi.c
@@ -402,7 +402,7 @@ SetValuesHook (Widget wdw, ArgList args, Cardinal *num_argsp)
 	DviWidget	dw = (DviWidget)wdw;
 
 	for (i = 0; i < *num_argsp; i++) {
-		if (!strcmp (args[i].name, XtNfile)) {
+		if (streq(args[i].name, XtNfile)) {
 			CloseFile (dw);
 			OpenFile (dw);
 			return TRUE;
diff --git a/src/devices/xditview/device.c b/src/devices/xditview/device.c
index 1eaafbefccb2..f53e4cfcc940 100644
--- a/src/devices/xditview/device.c
+++ b/src/devices/xditview/device.c
@@ -119,19 +119,19 @@ Device *device_load(const char *name)
 	    int *np = 0;
 	    char *q;
 
-	    if (strcmp(p, "charset") == 0)
+	    if (streq(p, "charset"))
 		break;
-	    if (strcmp(p, "X11") == 0)
+	    if (streq(p, "X11"))
 		dev->X11 = 1;
-	    else if (strcmp(p, "sizescale") == 0)
+	    else if (streq(p, "sizescale"))
 		np = &dev->sizescale;
- 	    else if (strcmp(p, "res") == 0)
+ 	    else if (streq(p, "res"))
 		np = &dev->res;
- 	    else if (strcmp(p, "unitwidth") == 0)
+ 	    else if (streq(p, "unitwidth"))
 		np = &dev->unitwidth;
- 	    else if (strcmp(p, "paperwidth") == 0)
+ 	    else if (streq(p, "paperwidth"))
 		np = &dev->paperwidth;
- 	    else if (strcmp(p, "paperlength") == 0)
+ 	    else if (streq(p, "paperlength"))
 		np = &dev->paperlength;
 	    
 	    if (np) {
@@ -177,7 +177,7 @@ DeviceFont *device_find_font(Device *dev, const char *name)
     if (!dev)
 	return 0;
     for (f = dev->fonts; f; f = f->next)
-	if (strcmp(f->name, name) == 0)
+	if (streq(f->name, name))
 	    return f;
     return load_font(dev, name);
 }
@@ -204,9 +204,9 @@ DeviceFont *load_font(Device *dev, const char *name)
 	current_lineno++;
 	p = strtok(buf, WS);
 	/* charset must be on a line by itself */
-	if (p && strcmp(p, "charset") == 0 && strtok((char *)0, WS) == 0)
+	if (p && streq(p, "charset") && strtok((char *)0, WS) == 0)
 	    break;
-	if (p && strcmp(p, "special") == 0)
+	if (p && streq(p, "special"))
 	    special = 1;
     }
     f = new_font(name, dev);
@@ -325,7 +325,7 @@ int device_char_width(DeviceFont *f, int ps, const char *name, int *widthp)
     for (p = f->char_table[hash_name(name) % CHAR_TABLE_SIZE];; p = p->next) {
 	if (!p)
 	    return 0;
-	if (strcmp(p->name, name) == 0)
+	if (streq(p->name, name))
 	    break;
     }
     *widthp = scale_round(p->width, ps, f->dev->unitwidth);
@@ -372,7 +372,7 @@ struct charinfo *add_char(DeviceFont *f, const char *name, int width, int code)
     struct charinfo *ci;
     
     name = canonicalize_name(name);
-    if (strcmp(name, "---") == 0)
+    if (streq(name, "---"))
 	name = "";
 
     ci = (struct charinfo *)XtMalloc(XtOffsetOf(struct charinfo, name[0])
@@ -414,7 +414,7 @@ int read_charset_section(DeviceFont *f, FILE *fp)
 	p = strtok((char *)0, WS);
 	if (!p)			/* end of charset section */
 	    break;
-	if (strcmp(p, "\"") == 0) {
+	if (streq(p, "\"")) {
 	    if (!last_charinfo) {
 		error("first line of charset section cannot use '\"'");
 		return 0;
diff --git a/src/devices/xditview/font.c b/src/devices/xditview/font.c
index 419de4bf359e..3bed82524a76 100644
--- a/src/devices/xditview/font.c
+++ b/src/devices/xditview/font.c
@@ -215,8 +215,7 @@ InstallFont (DviWidget dw, int position,
 		/*
 		 * ignore gratuitous font loading
 		 */
-		if (!strcmp (f->dvi_name, dvi_name) &&
-		    !strcmp (f->x_name, x_name))
+		if (streq(f->dvi_name, dvi_name) && streq(f->x_name, x_name))
 			return f;
 
 		DisposeFontSizes (dw, f->sizes);
@@ -291,7 +290,7 @@ MapDviNameToXName (DviWidget dw, const char *dvi_name)
 	DviFontMap	*fm;
 	
 	for (fm = dw->dvi.font_map; fm; fm=fm->next)
-		if (!strcmp (fm->dvi_name, dvi_name))
+		if (streq(fm->dvi_name, dvi_name))
 			return fm->x_name;
 	return 0;
 }
@@ -303,7 +302,7 @@ MapXNameToDviName (DviWidget dw, const char *x_name)
 	DviFontMap	*fm;
 	
 	for (fm = dw->dvi.font_map; fm; fm=fm->next)
-		if (!strcmp (fm->x_name, x_name))
+		if (streq(fm->x_name, x_name))
 			return fm->dvi_name;
 	return 0;
 }
diff --git a/src/devices/xditview/xditview.c b/src/devices/xditview/xditview.c
index f39eedc098f5..b48d2d9a449e 100644
--- a/src/devices/xditview/xditview.c
+++ b/src/devices/xditview/xditview.c
@@ -57,7 +57,7 @@ static char rcsid[] = "$XConsortium: xditview.c,v 1.17 89/12/10 17:05:08 rws Exp
 		   // pclose(), popen(), printf(), sprintf(), stderr,
 		   // stdin, stdout
 #include <stdlib.h> // exit(), EXIT_FAILURE, EXIT_SUCCESS
-#include <string.h> // strcmp(), strcpy(), strncpy()
+#include <string.h> // strcpy(), strncpy()
 
 #include "Dvi.h"
 #include "groff_version.h"
@@ -234,12 +234,12 @@ int main(int argc, char **argv)
      * XXX: This is not as flexible as GNU getopt, but good enough to
      * work when called by groff.
      */
-    if ((strcmp(argv[1], "-help") == 0)
-	|| (strcmp(argv[1], "--help") == 0))
+    if (streq(argv[1], "-help")
+	|| streq(argv[1], "--help"))
 	    Syntax(argv[0], false /* did not have error */);
-    else if ((strcmp(argv[1], "-v") == 0)
-	|| (strcmp(argv[1], "-version") == 0)
-	|| (strcmp(argv[1], "--version") == 0)) {
+    else if (streq(argv[1], "-v")
+	|| streq(argv[1], "-version")
+	|| streq(argv[1], "--version")) {
 	    (void) printf("GNU gxditview (groff) version %s\n",
 			  Version_string);
 	    exit(EXIT_SUCCESS);
@@ -342,14 +342,14 @@ NewFile (const char *name)
     Boolean seek = 0;
 
     if (current_file) {
-	if (!strcmp (current_file_name, "-"))
+	if (streq(current_file_name, "-"))
 	    ;
 	else if (current_file_name[0] == '|')
 	    pclose (current_file);
 	else
 	    fclose (current_file);
     }
-    if (!strcmp (name, "-"))
+    if (streq(name, "-"))
 	new_file = stdin;
     else if (name[0] == '|')
 	new_file = popen (name+1, "r");
diff --git a/src/include/nonposix.h b/src/include/nonposix.h
index a250e4f0b015..2fb28f9eb390 100644
--- a/src/include/nonposix.h
+++ b/src/include/nonposix.h
@@ -197,7 +197,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 # define BSHELL_DASH_C	"-c"
 #endif
 #ifndef IS_BSHELL
-# define IS_BSHELL(s)	((s) && strcmp(s,BSHELL) == 0)
+# define IS_BSHELL(s)	((s) && streq(s,BSHELL))
 #endif
 #ifndef PATH_SEP
 # define PATH_SEP	":"
diff --git a/src/include/ptable.h b/src/include/ptable.h
index 0bf90a8a2c78..1a60433cd6b2 100644
--- a/src/include/ptable.h
+++ b/src/include/ptable.h
@@ -18,7 +18,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <assert.h>
 #include <stdlib.h> // free(), malloc()
-#include <string.h> // strcmp(), strcpy(), strlen()
+#include <string.h> // strcpy(), strlen()
 
 // This groffism can be replaced with
 // std::unordered_map<const char *, T> if/when we migrate to C++11.
@@ -144,7 +144,7 @@ const char *PTABLE(T)::define(const char *key, T *val)			      \
   for (n = unsigned(h % size);						      \
        v[n].key != 0;							      \
        n = (n == 0 ? size - 1 : n - 1))					      \
-    if (strcmp(v[n].key, key) == 0) {					      \
+    if (streq(v[n].key, key)) {						      \
       /* XXX leak, because we don't know whether */			      \
       /* 'free', 'delete', or 'delete[]' should be used */		      \
       /* delete[] v[n].val; */						      \
@@ -192,7 +192,7 @@ T *PTABLE(T)::lookup(const char *key)					      \
   for (unsigned n = unsigned(hash_string(key) % size);			      \
        v[n].key != 0;							      \
        n = (n == 0 ? size - 1 : n - 1))					      \
-    if (strcmp(v[n].key, key) == 0)					      \
+    if (streq(v[n].key, key))						      \
       return v[n].val;							      \
   return 0;								      \
 }									      \
@@ -204,7 +204,7 @@ T *PTABLE(T)::lookupassoc(const char **keyptr)				      \
   for (unsigned n = unsigned(hash_string(key) % size);			      \
        v[n].key != 0;							      \
        n = (n == 0 ? size - 1 : n - 1))					      \
-    if (strcmp(v[n].key, key) == 0) {					      \
+    if (streq(v[n].key, key)) {						      \
       *keyptr = v[n].key;						      \
       return v[n].val;							      \
     }									      \
diff --git a/src/libs/libbib/search.cpp b/src/libs/libbib/search.cpp
index a8e5f0b1cef9..f4f893d30c82 100644
--- a/src/libs/libbib/search.cpp
+++ b/src/libs/libbib/search.cpp
@@ -22,7 +22,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <assert.h>
 #include <errno.h>
-#include <string.h> // strchr(), strcmp(), strerror(), strlen()
+#include <string.h> // strchr(), strerror(), strlen()
 
 #include "lib.h"
 
@@ -121,7 +121,7 @@ search_item::~search_item()
 
 int search_item::is_named(const char *nm) const
 {
-  return strcmp(name, nm) == 0;
+  return streq(name, nm);
 }
 
 int search_item::next_filename_id() const
diff --git a/src/libs/libdriver/input.cpp b/src/libs/libdriver/input.cpp
index 9df863ee5e47..4213ba1755de 100644
--- a/src/libs/libdriver/input.cpp
+++ b/src/libs/libdriver/input.cpp
@@ -241,7 +241,7 @@
 #include <stdio.h> // EOF, FILE, fclose(), fopen(), getc(), stdin,
 		   // ungetc()
 #include <stdlib.h> // strtol()
-#include <string.h> // strcmp(), strlen(), strncmp(), strncpy()
+#include <string.h> // strlen(), strncmp(), strncpy()
 
 #include "driver.h"
 #include "device.h"
@@ -1031,7 +1031,7 @@ void
 remember_filename(const char *filename)
 {
   char *fname;
-  if (strcmp(filename, "-") == 0)
+  if (streq(filename, "-"))
     fname = (char *)"<standard input>";
   else
     fname = (char *)filename;
@@ -1057,7 +1057,7 @@ void
 remember_source_filename(const char *filename)
 {
   char *fname;
-  if (strcmp(filename, "-") == 0)
+  if (streq(filename, "-"))
     fname = (char *)"<standard input>";
   else
     fname = (char *)filename;
@@ -1607,7 +1607,7 @@ do_file(const char *filename)
 	fatal("cannot load description of '%1' device", tmp_dev);
     }
     else {
-      if (device == 0 || strcmp(device, tmp_dev) != 0)
+      if (device == 0 || !streq(device, tmp_dev))
 	fatal("all files must use the same device");
       delete[] tmp_dev;
     }
diff --git a/src/libs/libdriver/printer.cpp b/src/libs/libdriver/printer.cpp
index 40fa8dc6ef55..2c121d2ca804 100644
--- a/src/libs/libdriver/printer.cpp
+++ b/src/libs/libdriver/printer.cpp
@@ -24,7 +24,7 @@
 #include <assert.h>
 #include <errno.h> // EINVAL, errno
 #include <stdio.h> // clearerr(), ferror(), fflush(), stdout
-#include <string.h> // strcmp()
+#include <string.h>
 
 #include "driver.h"
 
@@ -135,7 +135,7 @@ void printer::load_font(int n, const char *nm)
 font *printer::find_font(const char *nm)
 {
   for (font_pointer_list *p = font_list; p; p = p->next)
-    if (strcmp(p->p->get_filename(), nm) == 0)
+    if (streq(p->p->get_filename(), nm))
       return p->p;
   font *f = make_font(nm);
   if (0 /* nullptr */ == f)
diff --git a/src/libs/libgroff/change_lf.cpp b/src/libs/libgroff/change_lf.cpp
index 140329de72cd..fa2b96912be3 100644
--- a/src/libs/libgroff/change_lf.cpp
+++ b/src/libs/libgroff/change_lf.cpp
@@ -29,7 +29,7 @@ extern int current_lineno;
 
 void change_filename(const char *f)
 {
-  if (current_filename != 0 && strcmp(current_filename, f) == 0)
+  if (current_filename != 0 && streq(current_filename, f))
     return;
   current_filename = strsave(f);
 }
diff --git a/src/libs/libgroff/error.cpp b/src/libs/libgroff/error.cpp
index d92dae1a61b7..84bda569f2f8 100644
--- a/src/libs/libgroff/error.cpp
+++ b/src/libs/libgroff/error.cpp
@@ -46,7 +46,7 @@ static void do_error_with_file_and_line(const char *filename,
     need_space = true;
   }
   if (filename != 0 /* nullptr */) {
-    if (strcmp(filename, "-") == 0)
+    if (streq(filename, "-"))
       filename = "<standard input>";
     fputs(filename, stderr);
     if (source_filename != 0 /* nullptr */) {
diff --git a/src/libs/libgroff/font.cpp b/src/libs/libgroff/font.cpp
index b3c99dc08600..827ba06b193b 100644
--- a/src/libs/libgroff/font.cpp
+++ b/src/libs/libgroff/font.cpp
@@ -906,20 +906,20 @@ bool font::load(bool load_header_only)
   bool saw_name_directive = false;
   while (t.next_line()) {
     p = strtok(t.buf, WS);
-    if (strcmp(p, "name") == 0) {
+    if (streq(p, "name")) {
       p = strtok(0 /* nullptr */, WS);
       if (0 /* nullptr */ == p) {
 	t.error("'name' directive requires an argument");
 	return false;
       }
-      if (strcmp(p, filename) != 0) {
+      if (!streq(p, filename)) {
 	t.error("font description file name '%1' does not match 'name'"
 		" argument '%2'", filename, p);
 	return false;
       }
       saw_name_directive = true;
     }
-    else if (strcmp(p, "spacewidth") == 0) {
+    else if (streq(p, "spacewidth")) {
       p = strtok(0 /* nullptr */, WS);
       int n;
       if (0 /* nullptr */ == p) {
@@ -936,7 +936,7 @@ bool font::load(bool load_header_only)
       }
       space_width = n;
     }
-    else if (strcmp(p, "slant") == 0) {
+    else if (streq(p, "slant")) {
       p = strtok(0 /* nullptr */, WS);
       double n;
       if (0 /* nullptr */ == p) {
@@ -953,20 +953,20 @@ bool font::load(bool load_header_only)
       }
       slant = n;
     }
-    else if (strcmp(p, "ligatures") == 0) {
+    else if (streq(p, "ligatures")) {
       for (;;) {
 	p = strtok(0 /* nullptr */, WS);
-	if (0 /* nullptr */ == p || strcmp(p, "0") == 0)
+	if (0 /* nullptr */ == p || streq(p, "0"))
 	  break;
-	if (strcmp(p, "ff") == 0)
+	if (streq(p, "ff"))
 	  ligatures |= LIG_ff;
-	else if (strcmp(p, "fi") == 0)
+	else if (streq(p, "fi"))
 	  ligatures |= LIG_fi;
-	else if (strcmp(p, "fl") == 0)
+	else if (streq(p, "fl"))
 	  ligatures |= LIG_fl;
-	else if (strcmp(p, "ffi") == 0)
+	else if (streq(p, "ffi"))
 	  ligatures |= LIG_ffi;
-	else if (strcmp(p, "ffl") == 0)
+	else if (streq(p, "ffl"))
 	  ligatures |= LIG_ffl;
 	else {
 	  t.error("unrecognized ligature '%1'", p);
@@ -974,7 +974,7 @@ bool font::load(bool load_header_only)
 	}
       }
     }
-    else if (strcmp(p, "internalname") == 0) {
+    else if (streq(p, "internalname")) {
       p = strtok(0 /* nullptr */, WS);
       if (0 /* nullptr */ == p) {
 	t.error("missing argument to 'internalname' directive");
@@ -983,11 +983,11 @@ bool font::load(bool load_header_only)
       internalname = new char[strlen(p) + 1];
       strcpy(internalname, p);
     }
-    else if (strcmp(p, "special") == 0) {
+    else if (streq(p, "special")) {
       special = true;
     }
-    else if (strcmp(p, "kernpairs") != 0 && strcmp(p, "charset") != 0 &&
-             strcmp(p, "charset-range") != 0) {
+    else if (!streq(p, "kernpairs") && !streq(p, "charset") &&
+             !streq(p, "charset-range")) {
       char *directive = p;
       p = strtok(0 /* nullptr */, "\n");
       handle_unknown_font_command(directive, trim_arg(p), t.path,
@@ -1000,7 +1000,7 @@ bool font::load(bool load_header_only)
   char *directive = p;
   t.recognize_comments = false;
   while (directive) {
-    if (strcmp(directive, "kernpairs") == 0) {
+    if (streq(directive, "kernpairs")) {
       if (load_header_only)
 	return true;
       for (;;) {
@@ -1034,7 +1034,7 @@ bool font::load(bool load_header_only)
       }
     }
     // TODO: Rename this directive to "ranged-charset".
-    else if (strcmp(directive, "charset-range") == 0) {
+    else if (streq(directive, "charset-range")) {
       if (load_header_only)
 	return true;
       saw_charset_directive = true;
@@ -1093,7 +1093,7 @@ bool font::load(bool load_header_only)
 	  wcp->type = type;
 
 	  p = strtok(0 /* nullptr */, WS);
-	  if ((0 /* nullptr */ == p) || (strcmp(p, "--") == 0)) {
+	  if ((0 /* nullptr */ == p) || streq(p, "--")) {
 	    wcp->special_device_coding = 0 /* nullptr */;
 	  }
 	  else {
@@ -1111,7 +1111,7 @@ bool font::load(bool load_header_only)
 	return false;
       }
     }
-    else if (strcmp(directive, "charset") == 0) {
+    else if (streq(directive, "charset")) {
       if (load_header_only)
 	return true;
       saw_charset_directive = true;
@@ -1134,7 +1134,7 @@ bool font::load(bool load_header_only)
 		    " cannot be an alias", nm);
 	    return false;
 	  }
-	  if (strcmp(nm, "---") == 0) {
+	  if (streq(nm, "---")) {
 	    t.error("an unnamed character ('---') cannot be an alias");
 	    return false;
 	  }
@@ -1205,7 +1205,7 @@ bool font::load(bool load_header_only)
 	  }
 	  metric.code = static_cast<int>(index);
 	  p = strtok(0 /* nullptr */, WS);
-	  if ((0 /* nullptr */ == p) || (strcmp(p, "--") == 0)) {
+	  if ((0 /* nullptr */ == p) || streq(p, "--")) {
 	    metric.special_device_coding = 0;
 	  }
 	  else {
@@ -1213,7 +1213,7 @@ bool font::load(bool load_header_only)
 	    strcpy(nam, p);
 	    metric.special_device_coding = nam;
 	  }
-	  if (strcmp(nm, "---") == 0) {
+	  if (streq(nm, "---")) {
 	    last_glyph = number_to_glyph(metric.code);
 	    add_entry(last_glyph, metric);
 	  }
@@ -1291,7 +1291,7 @@ const char *font::load_desc()
     for (idx = 0;
 	 !numeric_directive_found && (idx < countof(numeric_directive_table));
 	 idx++)
-      if (strcmp(numeric_directive_table[idx].name, p) == 0)
+      if (streq(numeric_directive_table[idx].name, p))
 	numeric_directive_found = true;
     if (numeric_directive_found) {
       char *q = strtok(0 /* nullptr */, WS);
@@ -1304,13 +1304,13 @@ const char *font::load_desc()
 	t.error("'%1' directive given invalid number '%2'", p, q);
 	return 0 /* nullptr */;
       }
-      if ((strcmp(p, "res") == 0
-	   || strcmp(p, "hor") == 0
-	   || strcmp(p, "vert") == 0
-	   || strcmp(p, "unitwidth") == 0
-	   || strcmp(p, "paperwidth") == 0
-	   || strcmp(p, "paperlength") == 0
-	   ||  strcmp(p, "sizescale") == 0)
+      if ((streq(p, "res")
+	   || streq(p, "hor")
+	   || streq(p, "vert")
+	   || streq(p, "unitwidth")
+	   || streq(p, "paperwidth")
+	   || streq(p, "paperlength")
+	   ||  streq(p, "sizescale"))
 	  && val < 1) {
 	t.error("expected argument to '%1' directive to be a"
 		" positive number, got '%2'", p, val);
@@ -1318,7 +1318,7 @@ const char *font::load_desc()
       }
       *(numeric_directive_table[idx - 1].ptr) = val;
     }
-    else if (strcmp("family", p) == 0) {
+    else if (streq("family", p)) {
       p = strtok(0 /* nullptr */, WS);
       if (0 /* nullptr */ == p) {
 	t.error("'family' directive requires an argument");
@@ -1328,7 +1328,7 @@ const char *font::load_desc()
       strcpy(tem, p);
       family = tem;
     }
-    else if (strcmp("fonts", p) == 0) {
+    else if (streq("fonts", p)) {
       p = strtok(0 /* nullptr */, WS);
       if (0 /* nullptr */ == p) {
 	t.error("'fonts' directive requires arguments");
@@ -1361,7 +1361,7 @@ const char *font::load_desc()
       }
       font_name_table[nfonts] = 0 /* nullptr */;
     }
-    else if (strcmp("papersize", p) == 0) {
+    else if (streq("papersize", p)) {
       if (0 /* nullptr */ == res) {
 	t.error("'res' directive must precede 'papersize' in device"
 		" description file");
@@ -1396,11 +1396,11 @@ const char *font::load_desc()
       }
       free(savedp);
     }
-    else if (strcmp("unscaled_charwidths", p) == 0)
+    else if (streq("unscaled_charwidths", p))
       use_unscaled_charwidths = true;
-    else if (strcmp("pass_filenames", p) == 0)
+    else if (streq("pass_filenames", p))
       pass_filenames = true;
-    else if (strcmp("sizes", p) == 0) {
+    else if (streq("sizes", p)) {
       int n = 16;
       sizes = new int[n];
       int i = 0;
@@ -1443,7 +1443,7 @@ const char *font::load_desc()
 	return 0 /* nullptr */;
       }
     }
-    else if (strcmp("styles", p) == 0) {
+    else if (streq("styles", p)) {
       int style_table_size = 5;
       style_table = (const char **)new char *[style_table_size];
       int j;
@@ -1470,13 +1470,13 @@ const char *font::load_desc()
 	style_table[i++] = tem;
       }
     }
-    else if (strcmp("tcommand", p) == 0)
+    else if (streq("tcommand", p))
       has_tcommand = true;
-    else if (strcmp("use_charnames_in_special", p) == 0)
+    else if (streq("use_charnames_in_special", p))
       use_charnames_in_special = true;
-    else if (strcmp("unicode", p) == 0)
+    else if (streq("unicode", p))
       is_unicode = true;
-    else if (strcmp("image_generator", p) == 0) {
+    else if (streq("image_generator", p)) {
       p = strtok(0 /* nullptr */, WS);
       if (0 /* nullptr */ == p) {
 	t.error("'image_generator' directive requires an argument");
@@ -1484,7 +1484,7 @@ const char *font::load_desc()
       }
       image_generator = strsave(p);
     }
-    else if (strcmp("charset", p) == 0)
+    else if (streq("charset", p))
       break;
     else if (unknown_desc_command_handler) {
       char *directive = p;
diff --git a/src/libs/libgroff/localcharset.c b/src/libs/libgroff/localcharset.c
index 344599f99d6a..720ad46e0fd0 100644
--- a/src/libs/libgroff/localcharset.c
+++ b/src/libs/libgroff/localcharset.c
@@ -380,7 +380,7 @@ locale_charset (void)
   /* Cygwin < 1.7 does not have locales.  nl_langinfo (CODESET) always
      returns "US-ASCII".  Return the suffix of the locale name from the
      environment variables (if present) or the codepage as a number.  */
-  if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
+  if (codeset != NULL && streq(codeset, "US-ASCII"))
     {
       const char *locale;
       static char buf[2 + 10 + 1];
@@ -559,8 +559,7 @@ locale_charset (void)
   for (aliases = get_charset_aliases ();
        *aliases != '\0';
        aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
-    if (strcmp (codeset, aliases) == 0
-        || (aliases[0] == '*' && aliases[1] == '\0'))
+    if (streq(codeset, aliases) || (aliases[0] == '*' && aliases[1] == '\0'))
       {
         codeset = aliases + strlen (aliases) + 1;
         break;
@@ -575,7 +574,7 @@ locale_charset (void)
 #ifdef DARWIN7
   /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8"
      (the default codeset) does not work when MB_CUR_MAX is 1.  */
-  if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1)
+  if (streq(codeset, "UTF-8") && MB_CUR_MAX_L (uselocale (NULL)) <= 1)
     codeset = "ASCII";
 #endif
 
diff --git a/src/libs/libgroff/searchpath.cpp b/src/libs/libgroff/searchpath.cpp
index 2d5e599d2bc0..13343753884a 100644
--- a/src/libs/libgroff/searchpath.cpp
+++ b/src/libs/libgroff/searchpath.cpp
@@ -178,7 +178,7 @@ FILE *search_path::open_file_cautiously(const char *name, char **pathp,
   if (0 /* nullptr */ == mode)
     mode = "r";
   bool reading = (strchr(mode, 'r') != 0 /* nullptr */);
-  if (0 /* nullptr */ == name || strcmp(name, "-") == 0) {
+  if (0 /* nullptr */ == name || streq(name, "-")) {
     if (pathp != 0)
       *pathp = strsave(reading ? "stdin" : "stdout");
     return (reading ? stdin : stdout);
diff --git a/src/libs/libgroff/symbol.cpp b/src/libs/libgroff/symbol.cpp
index 42659a2460af..5cd0304a033b 100644
--- a/src/libs/libgroff/symbol.cpp
+++ b/src/libs/libgroff/symbol.cpp
@@ -21,7 +21,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #endif
 
 #include <assert.h>
-#include <string.h> // strcat(), strcmp(), strcpy(), strlen()
+#include <string.h> // strcat(), strcpy(), strlen()
 #include <stdlib.h> // calloc()
 
 #include "cset.h" // csprint()
@@ -105,7 +105,7 @@ symbol::symbol(const char *p, int how)
   for (pp = table + hc % table_size;
        *pp != 0 /* nullptr */;
        (pp == table ? pp = table + table_size - 1 : --pp))
-    if (strcmp(p, *pp) == 0) {
+    if (streq(p, *pp)) {
       s = *pp;
       return;
     }
diff --git a/src/libs/libgroff/tmpname.cpp b/src/libs/libgroff/tmpname.cpp
index 021d33f2758e..c162cca45728 100644
--- a/src/libs/libgroff/tmpname.cpp
+++ b/src/libs/libgroff/tmpname.cpp
@@ -71,7 +71,7 @@ int gen_tempname(char *tmpl, int dir)
   static uint64_t value;
 
   size_t len = strlen(tmpl);
-  if (len < 6 || strcmp(&tmpl[len - 6], "XXXXXX"))
+  if (len < 6 || !streq(&tmpl[len - 6], "XXXXXX"))
     return -1; /* EINVAL */
 
   /* This is where the Xs start.  */
diff --git a/src/libs/libxutil/DviChar.c b/src/libs/libxutil/DviChar.c
index 1d751a194c13..66dfb00e49c1 100644
--- a/src/libs/libxutil/DviChar.c
+++ b/src/libs/libxutil/DviChar.c
@@ -55,7 +55,7 @@ DviFindMap (char *encoding)
 	if (!standard_maps_loaded)
 		load_standard_maps ();
 	for (m = world; m; m=m->next)
-		if (!strcmp (m->map->encoding, encoding))
+		if (streq(m->map->encoding, encoding))
 			return m->map;
 	return 0;
 }
@@ -68,7 +68,7 @@ DviRegisterMap (DviCharNameMap *map)
 	if (!standard_maps_loaded)
 		load_standard_maps ();
 	for (m = world; m; m = m->next)
-		if (!strcmp (m->map->encoding, map->encoding))
+		if (streq(m->map->encoding, map->encoding))
 			break;
 	if (!m) {
 		m = (struct map_list *) xmalloc (sizeof *m);
@@ -140,7 +140,7 @@ DviCharIndex (DviCharNameMap *map, const char *name)
 
 	i = hash_name (name) % DVI_HASH_SIZE;
 	for (h = map->buckets[i]; h; h=h->next)
-		if (!strcmp (h->name, name))
+		if (streq(h->name, name))
 			return h->position;
 	return -1;
 }
diff --git a/src/libs/libxutil/XFontName.c b/src/libs/libxutil/XFontName.c
index d6d0fc13a1c8..112c95c53a41 100644
--- a/src/libs/libxutil/XFontName.c
+++ b/src/libs/libxutil/XFontName.c
@@ -205,7 +205,7 @@ XCompareFontName (XFontName *name1, XFontName *name2,
 {
 #define CompareString(field,bit) \
 	if (fontNameAttributes & bit) \
-		if (strcmp (name1->field, name2->field)) \
+		if (!streq(name1->field, name2->field)) \
 			return False;
 
 #define CompareUnsigned(field,bit) \
diff --git a/src/preproc/eqn/box.cpp b/src/preproc/eqn/box.cpp
index a58762d31344..a55d823acadb 100644
--- a/src/preproc/eqn/box.cpp
+++ b/src/preproc/eqn/box.cpp
@@ -142,7 +142,7 @@ struct param *param_table = 0 /* nullptr */;
 void set_param(const char *name, int value)
 {
   for (size_t i = 0; i <= countof(default_param_table); i++)
-    if (strcmp(param_table[i].name, name) == 0) {
+    if (streq(param_table[i].name, name)) {
       *(param_table[i].ptr) = value;
       return;
     }
@@ -152,7 +152,7 @@ void set_param(const char *name, int value)
 void reset_param(const char *name)
 {
   for (size_t i = 0; i < countof(default_param_table); i++)
-    if (strcmp(param_table[i].name, name) == 0) {
+    if (streq(param_table[i].name, name)) {
       *param_table[i].ptr = *(default_param_table[i].ptr);
       return;
     }
@@ -163,7 +163,7 @@ void reset_param(const char *name)
 int get_param(const char *name)
 {
   for (size_t i = 0; i < countof(default_param_table); i++)
-    if (strcmp(param_table[i].name, name) == 0)
+    if (streq(param_table[i].name, name))
       return *(param_table[i].ptr);
   assert(0 == "attempted to access parameter not in table");
   fatal("internal error: unrecognized parameter name '%1'", name);
diff --git a/src/preproc/eqn/main.cpp b/src/preproc/eqn/main.cpp
index 371101ceaeb4..9f26a5f591fd 100644
--- a/src/preproc/eqn/main.cpp
+++ b/src/preproc/eqn/main.cpp
@@ -376,15 +376,15 @@ int main(int argc, char **argv)
       break;
     case 'T':
       device = optarg;
-      if (strcmp(device, "ps:html") == 0) {
+      if (streq(device, "ps:html")) {
 	device = "ps";
 	html = 1;
       }
-      else if (strcmp(device, "MathML") == 0) {
+      else if (streq(device, "MathML")) {
 	output_format = mathml;
 	want_startup_file = false;
       }
-      else if (strcmp(device, "mathml:xhtml") == 0) {
+      else if (streq(device, "mathml:xhtml")) {
 	device = "MathML";
 	output_format = mathml;
 	want_startup_file = false;
@@ -482,7 +482,7 @@ int main(int argc, char **argv)
     do_file(stdin, "-");
   else
     for (int i = optind; i < argc; i++)
-      if (strcmp(argv[i], "-") == 0)
+      if (streq(argv[i], "-"))
 	do_file(stdin, "-");
       else {
 	errno = 0;
diff --git a/src/preproc/eqn/text.cpp b/src/preproc/eqn/text.cpp
index 4d6a33513462..b8cdbf747922 100644
--- a/src/preproc/eqn/text.cpp
+++ b/src/preproc/eqn/text.cpp
@@ -399,7 +399,7 @@ const char *special_to_entity(const char *sp)
 {
   struct map *mp;
   for (mp = entity_table; mp < entity_table + countof(entity_table); mp++) {
-    if (strcmp(mp->from, sp) == 0)
+    if (streq(mp->from, sp))
       return mp->to;
   }
   return NULL;
@@ -536,7 +536,7 @@ void init_char_table()
 static int lookup_spacing_type(const char *type)
 {
   for (int i = 0; spacing_type_table[i] != 0; i++)
-    if (strcmp(spacing_type_table[i], type) == 0)
+    if (streq(spacing_type_table[i], type))
       return i;
   return -1;
 }
@@ -544,7 +544,7 @@ static int lookup_spacing_type(const char *type)
 static int lookup_font_type(const char *type)
 {
   for (int i = 0; font_type_table[i] != 0; i++)
-    if (strcmp(font_type_table[i], type) == 0)
+    if (streq(font_type_table[i], type))
       return i;
   return -1;
 }
diff --git a/src/preproc/grn/hdb.cpp b/src/preproc/grn/hdb.cpp
index 708389de4d8c..ba00282c548d 100644
--- a/src/preproc/grn/hdb.cpp
+++ b/src/preproc/grn/hdb.cpp
@@ -17,7 +17,7 @@
 #include <ctype.h> // isdigit()
 #include <stdio.h> // FILE, feof(), fgets(), getc()
 #include <stdlib.h> // atoi()
-#include <string.h> // strcmp()
+#include <string.h>
 
 #include "errarg.h"
 #include "error.h"
@@ -109,8 +109,8 @@ DBRead(FILE *file)
     return (elist);
   }
   lineno++;
-  if (strcmp(string, "gremlinfile")) {
-    if (strcmp(string, "sungremlinfile")) {
+  if (!streq(string, "gremlinfile")) {
+    if (!streq(string, "sungremlinfile")) {
       error_with_file_and_line(gremlinfile, lineno,
 			       "not a gremlin file; giving up on this"
 			       " picture");
diff --git a/src/preproc/grn/main.cpp b/src/preproc/grn/main.cpp
index 18c0cc0bdc87..910a3ccec320 100644
--- a/src/preproc/grn/main.cpp
+++ b/src/preproc/grn/main.cpp
@@ -86,7 +86,7 @@
 #include <stdio.h> // FILE, fclose(), fgets(), fopen(), fprintf(),
 		   // fputs(), printf(), stderr, stdin, stdout
 #include <stdlib.h> // exit(), EXIT_SUCCESS, free(), malloc()
-#include <string.h> // strchr(), strcmp(), strcpy(), strerror(),
+#include <string.h> // strchr(), strcpy(), strerror(),
 		    // strlen()
 
 #include "device.h"
@@ -358,13 +358,13 @@ main(int argc,
 	break;
 
       case '-':
-	if (strcmp(*argv,"--version")==0) {
+	if (streq(*argv,"--version")) {
       case 'v':
 	  printf("GNU grn (groff) version %s\n", Version_string);
 	  exit(EXIT_SUCCESS);
 	  break;
 	}
-	if (strcmp(*argv,"--help")==0) {
+	if (streq(*argv,"--help")) {
       case '?':
 	  usage(stdout);
 	  exit(EXIT_SUCCESS);
@@ -882,7 +882,7 @@ interpret(char *line)
     stipple = (char *) grnmalloc(strlen(str2) + 1, "stipple command");
     strcpy(stipple, str2);
     /* if it's a 'known' font (currently only 'cf'), set indices    */
-    if (strcmp(stipple, "cf") == 0)
+    if (streq(stipple, "cf"))
       defstipple_index = cf_stipple_index;
     else
       defstipple_index = other_stipple_index;
@@ -954,7 +954,7 @@ interpret(char *line)
     break;
 
   case 'p':			/* pointscale */
-    if (strcmp("off", str2))
+    if (!streq("off", str2))
       pointscale = 1;
     else
       pointscale = 0;
diff --git a/src/preproc/html/pre-html.cpp b/src/preproc/html/pre-html.cpp
index 7b58903d8193..13778f9320b5 100644
--- a/src/preproc/html/pre-html.cpp
+++ b/src/preproc/html/pre-html.cpp
@@ -30,7 +30,7 @@
 		   // stderr, stdin, stdout, ungetc()
 #include <stdlib.h> // atexit(), atoi(), exit(), free(), getenv(),
 		    // malloc(), system()
-#include <string.h> // memcpy(), strchr(), strcmp(), strcpy(),
+#include <string.h> // memcpy(), strchr(), strcpy(),
 		    // strerror(), strlen(), strncmp(), strsignal()
 
 #include <getopt.h> // getopt_long()
@@ -637,7 +637,7 @@ static void setupAntiAlias(void)
 
 static void checkImageDir(void)
 {
-  if (image_dir != 0 /* nullptr */ && strcmp(image_dir, "") != 0)
+  if (image_dir != 0 /* nullptr */ && !streq(image_dir, ""))
     if (!(mkdir(image_dir, 0777) == 0 || errno == EEXIST))
       fatal("cannot create directory '%1': %2", image_dir,
 	    strerror(errno));
@@ -1229,8 +1229,7 @@ static void alterDeviceTo(int argc, char *argv[], int toImage)
 
   if (toImage) {
     while (i < argc) {
-      if ((strcmp(argv[i], "-Thtml") == 0) ||
-	  (strcmp(argv[i], "-Txhtml") == 0))
+      if (streq(argv[i], "-Thtml") || streq(argv[i], "-Txhtml"))
 	argv[i] = (char *)IMAGE_DEVICE;
       i++;
     }
@@ -1238,7 +1237,7 @@ static void alterDeviceTo(int argc, char *argv[], int toImage)
   }
   else {
     while (i < argc) {
-      if (strcmp(argv[i], IMAGE_DEVICE) == 0) {
+      if (streq(argv[i], IMAGE_DEVICE)) {
 	if (dialect == xhtml)
 	  argv[i] = (char *)"-Txhtml";
 	else
@@ -1697,9 +1696,9 @@ static int scanArguments(int argc, char **argv)
       break;
     case 'x':
       // html dialect
-      if (strcmp(optarg, "x") == 0)
+      if (streq(optarg, "x"))
 	dialect = xhtml;
-      else if (strcmp(optarg, "4") == 0)
+      else if (streq(optarg, "4"))
 	dialect = html4;
       else
 	warning("unsupported HTML dialect: '%1'", optarg);
@@ -1732,7 +1731,7 @@ static int scanArguments(int argc, char **argv)
 
   i = optind;
   while (i < argc) {
-    if (strcmp(argv[i], troff_name) == 0)
+    if (streq(argv[i], troff_name))
       troff_arg = i;
     else if (argv[i][0] != '-')
       return i;
@@ -1789,7 +1788,7 @@ static bool do_file(const char *filename)
   FILE *fp;
 
   current_filename = filename;
-  if (strcmp(filename, "-") == 0)
+  if (streq(filename, "-"))
     fp = stdin;
   else {
     fp = fopen(filename, "r");
diff --git a/src/preproc/html/pushback.cpp b/src/preproc/html/pushback.cpp
index 9ecd4363ed13..8fb95436dc6f 100644
--- a/src/preproc/html/pushback.cpp
+++ b/src/preproc/html/pushback.cpp
@@ -66,7 +66,7 @@ pushBackBuffer::pushBackBuffer (const char *filename)
   verbose  = 0;
   eofFound = FALSE;
   lineNo   = 1;
-  if (strcmp(filename, "") != 0) {
+  if (!streq(filename, "")) {
     stdIn = dup(0);
     if (stdIn < 0) {
       sys_fatal("dup stdin");
diff --git a/src/preproc/pic/lex.cpp b/src/preproc/pic/lex.cpp
index 247ec67e6177..56384064755e 100644
--- a/src/preproc/pic/lex.cpp
+++ b/src/preproc/pic/lex.cpp
@@ -1712,7 +1712,7 @@ int copy_thru_input::get_line()
     } while (c != ' ' && c != '\n');
     line += '\0';
   }
-  if (until != 0 && argc > 0 && strcmp(&line[argv[0]], until) == 0) {
+  if (until != 0 && argc > 0 && streq(&line[argv[0]], until)) {
     done = 1;
     return 0;
   }
diff --git a/src/preproc/pic/main.cpp b/src/preproc/pic/main.cpp
index 7bfb6d80440c..25a1a669221c 100644
--- a/src/preproc/pic/main.cpp
+++ b/src/preproc/pic/main.cpp
@@ -308,7 +308,7 @@ void do_picture(FILE *fp)
 void do_file(const char *filename)
 {
   FILE *fp;
-  if (strcmp(filename, "-") == 0)
+  if (streq(filename, "-"))
     fp = stdin;
   else {
     errno = 0;
@@ -466,7 +466,7 @@ void do_whole_file(const char *filename)
 {
   // Do not set current_filename.
   FILE *fp;
-  if (strcmp(filename, "-") == 0)
+  if (streq(filename, "-"))
     fp = stdin;
   else {
     errno = 0;
diff --git a/src/preproc/pic/pic.ypp b/src/preproc/pic/pic.ypp
index a97751095afd..e0ce78bc9fad 100644
--- a/src/preproc/pic/pic.ypp
+++ b/src/preproc/pic/pic.ypp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #include <stdcountof.h>
 #include <stdio.h> // fflush(), fprintf(), snprintf(), sprintf(), stderr
 #include <stdlib.h> // rand(), srand(), system()
-#include <string.h> // strcat(), strchr(), strcmp(), strcpy(), strlen()
+#include <string.h> // strcat(), strchr(), strcpy(), strlen()
 
 #ifdef NEED_DECLARATION_RAND
 #undef rand
@@ -564,13 +564,13 @@ any_expr:
 text_expr:
 	text EQUALEQUAL text
 		{
-		  $$ = strcmp($1.str, $3.str) == 0;
+		  $$ = streq($1.str, $3.str);
 		  delete[] $1.str;
 		  delete[] $3.str;
 		}
 	| text NOTEQUAL text
 		{
-		  $$ = strcmp($1.str, $3.str) != 0;
+		  $$ = !streq($1.str, $3.str);
 		  delete[] $1.str;
 		  delete[] $3.str;
 		}
@@ -1847,7 +1847,7 @@ void define_variable(const char *name, double val)
   p->x = val;
   p->y = 0.0;
   current_table->define(name, p);
-  if (strcmp(name, "scale") == 0) {
+  if (streq(name, "scale")) {
     // When the scale changes, reset all scaled predefined variables to
     // their default values.
     for (size_t i = 0; i < countof(defaults_table); i++)
@@ -1871,7 +1871,7 @@ void parse_init()
 void reset(const char *nm)
 {
   for (size_t i = 0; i < countof(defaults_table); i++)
-    if (strcmp(nm, defaults_table[i].name) == 0) {
+    if (streq(nm, defaults_table[i].name)) {
       double val = defaults_table[i].val;
       if (defaults_table[i].scaled) {
 	double scale;
diff --git a/src/preproc/pic/troff.cpp b/src/preproc/pic/troff.cpp
index 478a83cc07e0..2fb1fa989212 100644
--- a/src/preproc/pic/troff.cpp
+++ b/src/preproc/pic/troff.cpp
@@ -593,7 +593,7 @@ bool strsame(const char *s, const char *t)
 {
   if ((s == 0 /* nullptr */) || (t == 0 /* nullptr */))
     return false;
-  return (strcmp(s, t) == 0);
+  return streq(s, t);
 }
 
 void troff_output::set_location(const char *s, int n)
diff --git a/src/preproc/preconv/preconv.cpp b/src/preproc/preconv/preconv.cpp
index 6fe23074e8b7..b35257f7d460 100644
--- a/src/preproc/preconv/preconv.cpp
+++ b/src/preproc/preconv/preconv.cpp
@@ -1116,7 +1116,7 @@ do_file(const char *filename)
 
   // TODO: Consider moving some of this into a `quoted_file_name`
   // function in libgroff.
-  if (strcmp(filename, "-") == 0) {
+  if (streq(filename, "-")) {
     fp = stdin;
     reported_filename = string("<standard input>");
   }
@@ -1152,7 +1152,7 @@ do_file(const char *filename)
       fprintf(stderr, "  user-specified encoding '%s', "
 		      "no search for coding tag\n",
 		      user_encoding);
-      if (BOM_encoding && strcmp(BOM_encoding, user_encoding))
+      if (BOM_encoding && !streq(BOM_encoding, user_encoding))
 	fprintf(stderr, "  but BOM in data stream implies encoding"
 		" '%s'!\n", BOM_encoding);
     }
@@ -1261,7 +1261,7 @@ main(int argc, char **argv)
   // encoding.
   setlocale(LC_ALL, "");
   char *locale = getlocale(LC_CTYPE);
-  if (!locale || !strcmp(locale, "C") || !strcmp(locale, "POSIX"))
+  if (!locale || streq(locale, "C") || streq(locale, "POSIX"))
     strcpy(fallback_encoding, "latin1");
   else {
     strncpy(fallback_encoding, locale_charset(), MAX_VAR_LEN - 1);
diff --git a/src/preproc/refer/command.cpp b/src/preproc/refer/command.cpp
index 4ae2901bdbff..20e85bd14ed3 100644
--- a/src/preproc/refer/command.cpp
+++ b/src/preproc/refer/command.cpp
@@ -153,7 +153,7 @@ int input_stack::peek_char()
 void input_stack::push_file(const char *fn)
 {
   FILE *fp;
-  if (strcmp(fn, "-") == 0) {
+  if (streq(fn, "-")) {
     fp = stdin;
     fn = "<standard input>";
   }
@@ -761,7 +761,7 @@ static int check_args(const char *types, const char *name,
 static void execute_command(const char *name, int argc, argument *argv)
 {
   for (unsigned int i = 0; i < countof(command_table); i++)
-    if (strcmp(name, command_table[i].name) == 0) {
+    if (streq(name, command_table[i].name)) {
       if (check_args(command_table[i].arg_types, name, argc, argv))
 	(*command_table[i].func)(argc, argv);
       return;
diff --git a/src/preproc/refer/refer.cpp b/src/preproc/refer/refer.cpp
index e696323c2e1c..f7a8346e61e4 100644
--- a/src/preproc/refer/refer.cpp
+++ b/src/preproc/refer/refer.cpp
@@ -27,7 +27,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 		   // setbuf(), sprintf(), stderr, stdin, stdout,
 		   // ungetc()
 #include <stdlib.h> // getenv(), qsort(), strtol()
-#include <string.h> // strcat(), strchr(), strcmp(), strcpy(),
+#include <string.h> // strcat(), strchr(), strcpy(),
 		    // strerror()
 
 #include "refer.h" // includes cset.h
@@ -370,13 +370,13 @@ int main(int argc, char **argv)
 	  opt++;
 	  break;
 	}
-	if (strcmp(opt, "-version") == 0) {
+	if (streq(opt, "-version")) {
       case 'v':
 	  printf("GNU refer (groff) version %s\n", Version_string);
 	  exit(EXIT_SUCCESS);
 	  break;
 	}
-	if (strcmp(opt, "-help") == 0) {
+	if (streq(opt, "-help")) {
 	  usage(stdout);
 	  exit(EXIT_SUCCESS);
 	  break;
@@ -459,7 +459,7 @@ static bool is_list(const string &str)
 static void do_file(const char *filename)
 {
   FILE *fp;
-  if (strcmp(filename, "-") == 0) {
+  if (streq(filename, "-")) {
     fp = stdin;
   }
   else {
@@ -1158,7 +1158,7 @@ static void trim_blanks(string &str)
 void do_bib(const char *filename)
 {
   FILE *fp;
-  if (strcmp(filename, "-") == 0)
+  if (streq(filename, "-"))
     fp = stdin;
   else {
     errno = 0;
diff --git a/src/preproc/refer/token.cpp b/src/preproc/refer/token.cpp
index 35ec4394536b..8cc697c6f244 100644
--- a/src/preproc/refer/token.cpp
+++ b/src/preproc/refer/token.cpp
@@ -164,7 +164,7 @@ static void store_token(const char *tok, token_type typ,
       token_table[n].tok = tok;
       break;
     }
-    if (strcmp(tok, token_table[n].tok) == 0)
+    if (streq(tok, token_table[n].tok))
       break;
     if (n == 0)
       n = TOKEN_TABLE_SIZE - 1;
diff --git a/src/preproc/soelim/soelim.cpp b/src/preproc/soelim/soelim.cpp
index e49c879a1987..fea770d847ac 100644
--- a/src/preproc/soelim/soelim.cpp
+++ b/src/preproc/soelim/soelim.cpp
@@ -199,7 +199,7 @@ static bool do_file(const char *filename)
       &file_name_in_path);
   int err = errno;
   string whole_filename(filename);
-  if (strcmp(filename, "-") && file_name_in_path != 0 /* nullptr */)
+  if (!streq(filename, "-") && file_name_in_path != 0 /* nullptr */)
     whole_filename = file_name_in_path;
   whole_filename += '\0';
   free(file_name_in_path);
diff --git a/src/preproc/tbl/table.cpp b/src/preproc/tbl/table.cpp
index fdceaa5b459e..6a66354f4228 100644
--- a/src/preproc/tbl/table.cpp
+++ b/src/preproc/tbl/table.cpp
@@ -3212,7 +3212,7 @@ const char *last_filename = 0;
 void set_troff_location(const char *fn, int ln)
 {
   if (!location_force_filename && last_filename != 0
-      && strcmp(fn, last_filename) == 0)
+      && streq(fn, last_filename))
     printfs(".lf %1\n", as_string(ln));
   else {
     string filename(fn);
diff --git a/src/roff/groff/groff.cpp b/src/roff/groff/groff.cpp
index ff2f0825f297..54defc34c33f 100644
--- a/src/roff/groff/groff.cpp
+++ b/src/roff/groff/groff.cpp
@@ -317,7 +317,7 @@ int main(int argc, char **argv)
 	want_unsafe_mode = true;
       break;
     case 'T':
-      if (strcmp(optarg, "xhtml") == 0) {
+      if (streq(optarg, "xhtml")) {
 	// force soelim to aid the html preprocessor
 	commands[SOELIM_INDEX].set_name(command_prefix, "soelim");
 	Pargs += "-x";
@@ -328,10 +328,10 @@ int main(int argc, char **argv)
 	device = "html";
 	break;
       }
-      if (strcmp(optarg, "html") == 0)
+      if (streq(optarg, "html"))
 	// force soelim to aid the html preprocessor
 	commands[SOELIM_INDEX].set_name(command_prefix, "soelim");
-      if (strcmp(optarg, "Xps") == 0) {
+      if (streq(optarg, "Xps")) {
 	warning("-TXps option is obsolete: use -X -Tps instead");
 	device = "ps";
 	Xflag++;
@@ -439,8 +439,7 @@ int main(int argc, char **argv)
   }
   if (postdriver)
     commands[POST_INDEX].set_name(postdriver);
-  int gxditview_flag = postdriver
-		       && strcmp(xbasename(postdriver), GXDITVIEW) == 0;
+  int gxditview_flag = postdriver && streq(xbasename(postdriver), GXDITVIEW);
   if (gxditview_flag && argc - optind == 1) {
     commands[POST_INDEX].append_arg("-title");
     commands[POST_INDEX].append_arg(argv[optind]);
@@ -486,7 +485,7 @@ int main(int argc, char **argv)
     commands[SPOOL_INDEX].set_name(0 /* nullptr */);
   }
   commands[TROFF_INDEX].append_arg("-T", device);
-  if (strcmp(device, "html") == 0) {
+  if (streq(device, "html")) {
     if (is_xhtml) {
       if (oflag)
 	fatal("'-o' option is invalid with device 'xhtml'");
@@ -593,7 +592,7 @@ const char *xbasename(const char *s)
 void handle_unknown_desc_command(const char *command, const char *arg,
 				 const char *filename, int lineno)
 {
-  if (strcmp(command, "print") == 0) {
+  if (streq(command, "print")) {
     if (arg == 0 /* nullptr */)
       error_with_file_and_line(filename, lineno, "'print' directive"
 			       " requires an argument");
@@ -601,7 +600,7 @@ void handle_unknown_desc_command(const char *command, const char *arg,
       spooler = xstrdup(arg);
     return;
   }
-  if (strcmp(command, "prepro") == 0) {
+  if (streq(command, "prepro")) {
     if (arg == 0 /* nullptr */)
       error("'prepro' directive requires an argument");
     else {
@@ -615,7 +614,7 @@ void handle_unknown_desc_command(const char *command, const char *arg,
     }
     return;
   }
-  if (strcmp(command, "postpro") == 0) {
+  if (streq(command, "postpro")) {
     if (arg == 0 /* nullptr */)
       error_with_file_and_line(filename, lineno, "'postpro' directive"
 			       " requires an argument");
@@ -765,7 +764,7 @@ void possible_command::print(int is_last, FILE *fp)
   build_argv();
   if (IS_BSHELL(argv[0])
       && argv[1] != 0 /* nullptr */
-      && strcmp(argv[1], BSHELL_DASH_C) == 0
+      && streq(argv[1], BSHELL_DASH_C)
       && argv[2] != 0 /* nullptr */ && argv[3] == 0 /* nullptr */)
     fputs(argv[2], fp);
   else {
diff --git a/src/roff/troff/input.cpp b/src/roff/troff/input.cpp
index 1fe5b163181b..9f08a88da0f6 100644
--- a/src/roff/troff/input.cpp
+++ b/src/roff/troff/input.cpp
@@ -532,7 +532,7 @@ bool file_iterator::get_location(bool /*allow_macro*/,
   assert(filename != 0 /* nullptr */);
   if (0 /* nullptr */ == filename)
     return false;
-  if (strcmp(filename, "-") == 0)
+  if (streq(filename, "-"))
     *filenamep = "<standard input>";
   else
     *filenamep = filename;
@@ -1608,15 +1608,15 @@ static void define_color()
     return;
   }
   color *col;
-  if (strcmp(color_space.contents(), "rgb") == 0)
+  if (streq(color_space.contents(), "rgb"))
     col = read_rgb();
-  else if (strcmp(color_space.contents(), "cmyk") == 0)
+  else if (streq(color_space.contents(), "cmyk"))
     col = read_cmyk();
-  else if (strcmp(color_space.contents(), "gray") == 0)
+  else if (streq(color_space.contents(), "gray"))
     col = read_gray();
-  else if (strcmp(color_space.contents(), "grey") == 0)
+  else if (streq(color_space.contents(), "grey"))
     col = read_gray();
-  else if (strcmp(color_space.contents(), "cmy") == 0)
+  else if (streq(color_space.contents(), "cmy"))
     col = read_cmy();
   else {
     warning(WARN_COLOR, "unknown color space '%1';"
@@ -3524,12 +3524,12 @@ void process_input_stack()
 #if defined(DEBUGGING)
 	  if (want_html_debugging) {
 	    if (!nm.is_null()) {
-	      if (strcmp(nm.contents(), "test") == 0) {
+	      if (streq(nm.contents(), "test")) {
 		fprintf(stderr, "found it!\n");
 		fflush(stderr);
 	      }
 	      fprintf(stderr, "interpreting [%s]", nm.contents());
-	      if (strcmp(nm.contents(), "di") == 0 && topdiv != curdiv)
+	      if (streq(nm.contents(), "di") && topdiv != curdiv)
 		fprintf(stderr, " currently in diversion: %s",
 			curdiv->get_diversion_name());
 	      fprintf(stderr, "\n");
@@ -4832,7 +4832,7 @@ static void map_composite_character()
   const char *to_decomposed = decompose_unicode(to_gn);
   if (to_decomposed != 0 /* nullptr */)
     to_gn = &to_decomposed[1];
-  if (strcmp(from_gn, to_gn) == 0)
+  if (streq(from_gn, to_gn))
     composite_dictionary.remove(symbol(from_gn));
   else
     (void) composite_dictionary.lookup(symbol(from_gn), (void *) to_gn);
@@ -6613,37 +6613,37 @@ static node *do_non_interpreted() // \?
 static void map_special_character_for_device_output(macro *mac,
 						    const char *sc)
 {
-  if (strcmp("-", sc) == 0)
+  if (streq("-", sc))
     mac->append('-');
-  else if (strcmp("dq", sc) == 0)
+  else if (streq("dq", sc))
     mac->append('"');
-  else if (strcmp("sh", sc) == 0)
+  else if (streq("sh", sc))
     mac->append('#');
-  else if (strcmp("Do", sc) == 0)
+  else if (streq("Do", sc))
     mac->append('$');
-  else if (strcmp("aq", sc) == 0)
+  else if (streq("aq", sc))
     mac->append('\'');
-  else if (strcmp("sl", sc) == 0)
+  else if (streq("sl", sc))
     mac->append('/');
-  else if (strcmp("at", sc) == 0)
+  else if (streq("at", sc))
     mac->append('@');
-  else if (strcmp("lB", sc) == 0)
+  else if (streq("lB", sc))
     mac->append('[');
-  else if (strcmp("rs", sc) == 0)
+  else if (streq("rs", sc))
     mac->append('\\');
-  else if (strcmp("rB", sc) == 0)
+  else if (streq("rB", sc))
     mac->append(']');
-  else if (strcmp("ha", sc) == 0)
+  else if (streq("ha", sc))
     mac->append('^');
-  else if (strcmp("lC", sc) == 0)
+  else if (streq("lC", sc))
     mac->append('{');
-  else if (strcmp("ba", sc) == 0)
+  else if (streq("ba", sc))
     mac->append('|');
-  else if (strcmp("or", sc) == 0)
+  else if (streq("or", sc))
     mac->append('|');
-  else if (strcmp("rC", sc) == 0)
+  else if (streq("rC", sc))
     mac->append('}');
-  else if (strcmp("ti", sc) == 0)
+  else if (streq("ti", sc))
     mac->append('~');
   else {
     if (font::use_charnames_in_special) {
@@ -9729,7 +9729,7 @@ void macro_source_quietly_request() // .msoquiet
 static void process_input_file(const char *name)
 {
   FILE *fp;
-  if (strcmp(name, "-") == 0) {
+  if (streq(name, "-")) {
     clearerr(stdin);
     fp = stdin;
   }
@@ -9917,7 +9917,7 @@ int main(int argc, char **argv)
     case 'T':
       device = optarg;
       have_explicit_device_argument = true;
-      is_writing_html = (strcmp(device, "html") == 0);
+      is_writing_html = streq(device, "html");
       break;
     case 'C':
       want_att_compat = true;
@@ -10037,7 +10037,7 @@ int main(int argc, char **argv)
     mac_path = &macro_path;
   set_string(".T", device);
   // TODO: Kill this off in groff 1.24.0 release + 2 years.  See env.cpp.
-  if ((strcmp("pdf", device) == 0) || strcmp("ps", device) == 0)
+  if (streq("pdf", device) || streq("ps", device))
     is_device_ps_or_pdf = true;
   init_charset_table();
   init_hpf_code_table();
@@ -10069,7 +10069,7 @@ int main(int argc, char **argv)
   for (i = 0; font::font_name_table[i] != 0 /* nullptr */; i++, j++)
     // In the DESC file, a font name of 0 (zero) means "leave this
     // position empty".
-    if (strcmp(font::font_name_table[i], "0") != 0)
+    if (!streq(font::font_name_table[i], "0"))
       if (!mount_font(j, symbol(font::font_name_table[i])))
 	warning(WARN_FONT, "cannot mount font '%1' directed by 'DESC'"
 		" file for device '%2'", font::font_name_table[i],
@@ -10609,7 +10609,7 @@ static struct warning_category {
 static unsigned int lookup_warning(const char *name)
 {
   for (unsigned int i = 0U; i < countof(warning_table); i++)
-    if (strcmp(name, warning_table[i].name) == 0)
+    if (streq(name, warning_table[i].name))
       return warning_table[i].mask;
   return 0U;
 }
@@ -11192,7 +11192,7 @@ void charinfo::dump()
     errprint("  is%1 translatable as input\n",
 	     translatable_as_input ? "" : " not");
     const char *modestr = character_mode_description(mode);
-    if (strcmp(modestr, "") == 0)
+    if (streq(modestr, ""))
       modestr =" normal";
     errprint("  mode:%1\n", modestr);
   }
diff --git a/src/utils/addftinfo/addftinfo.cpp b/src/utils/addftinfo/addftinfo.cpp
index c19d18b07275..a50d257a13d0 100644
--- a/src/utils/addftinfo/addftinfo.cpp
+++ b/src/utils/addftinfo/addftinfo.cpp
@@ -73,9 +73,9 @@ int main(int argc, char **argv)
   program_name = argv[0];
   int i;
   for (i = 1; i < argc; i++) {
-    if (!strcmp(argv[i], "-v") || !strcmp(argv[i],"--version"))
+    if (streq(argv[i], "-v") || streq(argv[i],"--version"))
       version();
-    if (!strcmp(argv[i],"--help")) {
+    if (streq(argv[i],"--help")) {
       usage(stdout);
       exit(EXIT_SUCCESS);
     }
@@ -118,7 +118,7 @@ int main(int argc, char **argv)
     for (j = 0;; j++) {
       if (j >= countof(param_table))
 	fatal("parameter '%1' not recognized", argv[i] + 1);
-      if (strcmp(param_table[j].name, argv[i] + 1) == 0)
+      if (streq(param_table[j].name, argv[i] + 1))
 	break;
     }
     if (sscanf(argv[i+1], "%d", &(param.*(param_table[j].par))) != 1)
diff --git a/src/utils/hpftodit/hpftodit.cpp b/src/utils/hpftodit/hpftodit.cpp
index ba6556ee0e15..b4d859bbae9f 100644
--- a/src/utils/hpftodit/hpftodit.cpp
+++ b/src/utils/hpftodit/hpftodit.cpp
@@ -35,7 +35,7 @@ put filename in error messages (or fix lib)
 		   // freopen(), printf(), sprintf()
 #include <stdlib.h> // atoi(), exit(), EXIT_FAILURE, EXIT_SUCCESS,
 		    // strtol()
-#include <string.h> // strchr(), strcmp(), strerror(), strlen(),
+#include <string.h> // strchr(), strerror(), strlen(),
 		    // strrchr(), strtok()
 
 #include <getopt.h> // getopt_long()
@@ -52,7 +52,6 @@ put filename in error messages (or fix lib)
 extern "C" const char *Version_string;
 extern const char *hp_msl_to_unicode_code(const char *);
 
-#define equal(a, b) (strcmp(a, b) == 0)
 // only valid if is_uname(c) has returned true
 #define is_decomposed(c) strchr(c, '_')
 
@@ -362,7 +361,7 @@ main(int argc, char **argv)
     read_map(argv[optind + 1], tfm_type);
   current_filename = NULL;
   current_lineno = -1;		// no line numbers
-  if (!debug_flag && !equal(argv[optind + 2], "-"))
+  if (!debug_flag && !streq(argv[optind + 2], "-"))
     if (freopen(argv[optind + 2], "w", stdout) == NULL)
       fatal("cannot open '%1': %2", argv[optind + 2], strerror(errno));
   current_filename = argv[optind];
@@ -830,7 +829,7 @@ output_ligatures()
 	&& char_table[i].symbol_set != NO_SYMBOL_SET) {
       for (name_list *p = charcode_name_table[charcode]; p; p = p->next)
 	for (unsigned int j = 0; j < countof(ligature_chars); j++)
-	  if (strcmp(p->name, ligature_chars[j]) == 0) {
+	  if (streq(p->name, ligature_chars[j])) {
 	    ligature_mask |= 1 << j;
 	    break;
 	  }
@@ -866,7 +865,7 @@ read_and_output_kernpairs(File &f)
 	  for (name_list *q = charcode_name_table[char_table[i2].charcode];
 	       q;
 	       q = q->next)
-	    if (!equal(p->name, UNNAMED) && !equal(q->name, UNNAMED))
+	    if (!streq(p->name, UNNAMED) && !streq(q->name, UNNAMED))
 		printf("%s %s %d\n", p->name, q->name, scale(val));
       }
     }
@@ -968,7 +967,7 @@ output_charset(const int tfm_type)
       char *name = charcode_name_table[charcode]->name;
       // don't warn about Unicode or unnamed glyphs
       //  that aren't in the TFM file
-      if (tfm_type == UNICODE && !quiet_flag && !equal(name, UNNAMED)
+      if (tfm_type == UNICODE && !quiet_flag && !streq(name, UNNAMED)
 	  && !is_uname(name)) {
 	fprintf(stderr, "%s: warning: symbol U+%04X (%s",
 		program_name, charcode, name);
@@ -977,7 +976,7 @@ output_charset(const int tfm_type)
 	  fprintf(stderr, ", %s", p->name);
 	fprintf(stderr, ") not in any searched symbol set\n");
       }
-      else if (!quiet_flag && !equal(name, UNNAMED) && !is_uname(name)) {
+      else if (!quiet_flag && !streq(name, UNNAMED) && !is_uname(name)) {
 	fprintf(stderr, "%s: warning: symbol MSL %d (%s",
 		program_name, charcode, name);
 	for (name_list *p = charcode_name_table[charcode]->next;
@@ -1309,14 +1308,14 @@ hp_msl_to_ucode_name(int msl)
     if (ucode >= 0xE000 && ucode <= 0xF8FF)
       ustr = UNNAMED;
   }
-  if (!equal(ustr, UNNAMED)) {
+  if (!streq(ustr, UNNAMED)) {
     const char *uname_decomposed = decompose_unicode(ustr);
     if (uname_decomposed)
       // 1st char is the number of components
       ustr = uname_decomposed + 1;
   }
   char *value = new char[strlen(ustr) + 1];
-  sprintf(value, equal(ustr, UNNAMED) ? UNNAMED : "u%s", ustr);
+  sprintf(value, streq(ustr, UNNAMED) ? UNNAMED : "u%s", ustr);
   return value;
 }
 
@@ -1335,14 +1334,14 @@ unicode_to_ucode_name(int ucode)
     sprintf(codestr, "%04X", ucode);
     ustr = codestr;
   }
-  if (!equal(ustr, UNNAMED)) {
+  if (!streq(ustr, UNNAMED)) {
     const char *uname_decomposed = decompose_unicode(ustr);
     if (uname_decomposed)
       // 1st char is the number of components
       ustr = uname_decomposed + 1;
   }
   char *value = new char[strlen(ustr) + 1];
-  sprintf(value, equal(ustr, UNNAMED) ? UNNAMED : "u%s", ustr);
+  sprintf(value, streq(ustr, UNNAMED) ? UNNAMED : "u%s", ustr);
   return value;
 }
 
diff --git a/src/utils/indxbib/indxbib.cpp b/src/utils/indxbib/indxbib.cpp
index 36df77915d8a..498ecd03479d 100644
--- a/src/utils/indxbib/indxbib.cpp
+++ b/src/utils/indxbib/indxbib.cpp
@@ -26,7 +26,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #include <stdio.h> // EOF, FILE, fclose(), fdopen(), fopen(), fprintf(),
 		   // fseek(), getc(), printf(), rename(), setbuf(),
 		   // stderr, stdin, stdout, ungetc()
-#include <string.h> // strcat(), strchr(), strcmp(), strcpy(),
+#include <string.h> // strcat(), strchr(), strcpy(),
 		    // strerror(), strlen(), strrchr()
 
 #include <getopt.h> // getopt_long()
@@ -274,7 +274,7 @@ int main(int argc, char **argv)
   int failed = 0;
   if (foption) {
     FILE *fp = stdin;
-    if (strcmp(foption, "-") != 0) {
+    if (!streq(foption, "-")) {
       errno = 0;
       fp = fopen(foption, "r");
       if (!fp)
@@ -328,7 +328,7 @@ int main(int argc, char **argv)
     // Replace the dot with an underscore and try again.
     if (fname
         && (dot = strchr(fname, '.')) != 0
-        && strcmp(dot, INDEX_SUFFIX) != 0)
+        && !streq(dot, INDEX_SUFFIX))
       *dot = '_';
     if (rename(temp_index_file, index_file) < 0)
 #endif
diff --git a/src/utils/tfmtodit/tfmtodit.cpp b/src/utils/tfmtodit/tfmtodit.cpp
index 25aa5d3e61ee..40255006a7a8 100644
--- a/src/utils/tfmtodit/tfmtodit.cpp
+++ b/src/utils/tfmtodit/tfmtodit.cpp
@@ -784,7 +784,7 @@ int main(int argc, char **argv)
     fputs("special\n", stdout);
   char *internal_name = strsave(argv[optind]);
   size_t len = strlen(internal_name);
-  if (len > 4 && strcmp(internal_name + len - 4, ".tfm") == 0)
+  if (len > 4 && streq(internal_name + len - 4, ".tfm"))
     internal_name[len - 4] = '\0';
   // DIR_SEPS[] are possible directory separator characters, see
   // nonposix.h.  We want the rightmost separator of all possible ones.
@@ -818,7 +818,7 @@ int main(int argc, char **argv)
   for (i = 0; i < 256; i++)
     for (unsigned int j = 0; j < lig_char_entries; j++)
       for (char_list *p = table[i]; p; p = p->next)
-	if (strcmp(lig_chars[j].ch, p->ch) == 0)
+	if (streq(lig_chars[j].ch, p->ch))
 	  lig_chars[j].i = i;
   // For each possible ligature, if its participants all exist,
   // and it appears as a ligature in the tfm file, include in
diff --git a/src/utils/xtotroff/xtotroff.c b/src/utils/xtotroff/xtotroff.c
index aa1ab8af1afa..ca34b8399a5c 100644
--- a/src/utils/xtotroff/xtotroff.c
+++ b/src/utils/xtotroff/xtotroff.c
@@ -111,7 +111,7 @@ FontNamesAmbiguous(const char *font_name, char **names, int count)
 		     program_name, names[i]);
       return true;
     }
-    if (i > 0 && strcmp(name1, name2) != 0) {
+    if (i > 0 && !streq(name1, name2)) {
       (void) fprintf(stderr, "%s: ambiguous font name: \"%s\"",
 		     program_name, font_name);
       (void) fprintf(stderr, " matches \"%s\"", names[0]);
@@ -225,7 +225,7 @@ static bool MapFont(char *font_name, const char *troff_name)
     return false;
   }
   (void) fprintf(out, "name %s\n", troff_name);
-  if (!strcmp(char_map->encoding, "adobe-fontspecific"))
+  if (streq(char_map->encoding, "adobe-fontspecific"))
     (void) fprintf(out, "special\n");
   if (charExists(fi, ' ')) {
     int w = charWidth(fi, ' ');
-- 
2.51.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.