I'm working on bigger simplifications for less's string formatting, but this is a good start. We've removed the off_t aliases for linenums and positions, so we now have two identical sets of off_t formatting and appending functions. The below diff unifies them.
As you can see, there is more cleanup to be done. Thoughts? Index: less.h =================================================================== RCS file: /cvs/src/usr.bin/less/less.h,v retrieving revision 1.21 diff -u -p -r1.21 less.h --- less.h 12 Jan 2016 17:48:04 -0000 1.21 +++ less.h 13 Jan 2016 04:43:15 -0000 @@ -205,6 +205,5 @@ struct textlist { #include "funcs.h" /* Functions not included in funcs.h */ -void postoa(off_t, char *, size_t); -void linenumtoa(off_t, char *, size_t); +void offttoa(off_t, char *, size_t); void inttoa(int, char *, size_t); Index: line.c =================================================================== RCS file: /cvs/src/usr.bin/less/line.c,v retrieving revision 1.16 diff -u -p -r1.16 line.c --- line.c 12 Jan 2016 17:48:04 -0000 1.16 +++ line.c 13 Jan 2016 04:43:15 -0000 @@ -178,7 +178,7 @@ plinenum(off_t pos) char buf[INT_STRLEN_BOUND(pos) + 2]; int n; - linenumtoa(linenum, buf, sizeof (buf)); + offttoa(linenum, buf, sizeof(buf)); n = strlen(buf); if (n < MIN_LINENUM_WIDTH) n = MIN_LINENUM_WIDTH; Index: output.c =================================================================== RCS file: /cvs/src/usr.bin/less/output.c,v retrieving revision 1.14 diff -u -p -r1.14 output.c --- output.c 12 Jan 2016 17:48:04 -0000 1.14 +++ output.c 13 Jan 2016 04:43:15 -0000 @@ -148,8 +148,7 @@ funcname(type num, char *buf, size_t len (void) strlcpy(buf, s, len); \ } -TYPE_TO_A_FUNC(postoa, off_t) -TYPE_TO_A_FUNC(linenumtoa, off_t) +TYPE_TO_A_FUNC(offttoa, off_t) TYPE_TO_A_FUNC(inttoa, int) /* @@ -173,7 +172,7 @@ iprint_linenum(off_t num) { char buf[INT_STRLEN_BOUND(num)]; - linenumtoa(num, buf, sizeof (buf)); + offttoa(num, buf, sizeof(buf)); putstr(buf); return (strlen(buf)); } Index: prompt.c =================================================================== RCS file: /cvs/src/usr.bin/less/prompt.c,v retrieving revision 1.19 diff -u -p -r1.19 prompt.c --- prompt.c 12 Jan 2016 23:01:23 -0000 1.19 +++ prompt.c 13 Jan 2016 04:43:15 -0000 @@ -116,23 +116,11 @@ ap_char(char c) * Append a off_t (as a decimal integer) to the end of the message. */ static void -ap_pos(off_t pos) +ap_off_t(off_t pos) { char buf[INT_STRLEN_BOUND(pos) + 2]; - postoa(pos, buf, sizeof buf); - ap_str(buf); -} - -/* - * Append a line number to the end of the message. - */ -static void -ap_linenum(off_t linenum) -{ - char buf[INT_STRLEN_BOUND(linenum) + 2]; - - linenumtoa(linenum, buf, sizeof buf); + offttoa(pos, buf, sizeof(buf)); ap_str(buf); } @@ -245,7 +233,7 @@ protochar(int c, int where) case 'b': /* Current byte offset */ pos = curr_byte(where); if (pos != -1) - ap_pos(pos); + ap_off_t(pos); else ap_quest(); break; @@ -255,7 +243,7 @@ protochar(int c, int where) case 'd': /* Current page number */ linenum = currline(where); if (linenum > 0 && sc_height > 1) - ap_linenum(PAGE_NUM(linenum)); + ap_off_t(PAGE_NUM(linenum)); else ap_quest(); break; @@ -266,13 +254,13 @@ protochar(int c, int where) ap_quest(); } else if (len == 0) { /* An empty file has no pages. */ - ap_linenum(0); + ap_off_t(0); } else { linenum = find_linenum(len - 1); if (linenum <= 0) ap_quest(); else - ap_linenum(PAGE_NUM(linenum)); + ap_off_t(PAGE_NUM(linenum)); } break; case 'E': /* Editor name */ @@ -293,7 +281,7 @@ protochar(int c, int where) case 'l': /* Current line number */ linenum = currline(where); if (linenum != 0) - ap_linenum(linenum); + ap_off_t(linenum); else ap_quest(); break; @@ -303,7 +291,7 @@ protochar(int c, int where) (linenum = find_linenum(len)) <= 0) ap_quest(); else - ap_linenum(linenum-1); + ap_off_t(linenum-1); break; case 'm': /* Number of files */ n = ntags(); @@ -333,7 +321,7 @@ protochar(int c, int where) case 'B': len = ch_length(); if (len != -1) - ap_pos(len); + ap_off_t(len); else ap_quest(); break;