diff --git a/.gitignore b/.gitignore index f6cddbb..d2f3de1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,6 @@ -/less-530.tar.gz -/less-550.tar.gz -/less-551.tar.gz -/less-568.tar.gz -/less-575.tar.gz -/less-581.2.tar.gz -/less-590.tar.gz -/less-608.tar.gz -/less-633.tar.gz -/less-643.tar.gz -/less-661.tar.gz -/less-668.tar.gz -/less-678.tar.gz -/less-679.tar.gz -/less-685.tar.gz -/lesspipe-2.20.tar.gz +/less-436.tar.gz +/less-443.tar.gz +/less-444.tar.gz +/less-451.tar.gz +/less-458.tar.gz +/less-471.tar.gz diff --git a/less-394-search.patch b/less-394-search.patch new file mode 100644 index 0000000..909d1b4 --- /dev/null +++ b/less-394-search.patch @@ -0,0 +1,32 @@ +--- less-394/line.c.search 2005-12-03 21:20:32.000000000 +0100 ++++ less-394/line.c 2006-02-15 11:23:25.308694376 +0100 +@@ -1125,6 +1125,14 @@ + break; + } + } ++ if (c == '\0') ++ { ++ /* ++ * Pretend the line ended here ++ */ ++ new_pos = ch_tell(); ++ break; ++ } + linebuf[n++] = c; + c = ch_forw_get(); + } +@@ -1198,6 +1206,14 @@ + *to = *fm; + n = size_linebuf - old_size_linebuf; + } ++ if (c == '\0') ++ { ++ /* ++ * Pretend the line ended here ++ */ ++ new_pos = ch_tell() + 1; ++ break; ++ } + linebuf[--n] = c; + } + if (linep != NULL) diff --git a/less-418-fsync.patch b/less-418-fsync.patch new file mode 100644 index 0000000..5774bb2 --- /dev/null +++ b/less-418-fsync.patch @@ -0,0 +1,38 @@ +diff -ur less-418.orig/configure.ac less-418/configure.ac +--- less-418.orig/configure.ac 2008-12-22 07:10:44.000000000 -0500 ++++ less-418/configure.ac 2008-12-22 07:28:58.000000000 -0500 +@@ -203,6 +203,8 @@ + [Define HAVE_TIME_T if your system supports the "time_t" type.]) + AH_TEMPLATE([HAVE_STRERROR], + [Define HAVE_STRERROR if you have the strerror() function.]) ++AH_TEMPLATE([HAVE_FSYNC], ++ [Define HAVE_FSYNC if fsync() on a tty works.]) + AH_TEMPLATE([HAVE_FILENO], + [Define HAVE_FILENO if you have the fileno() macro.]) + AH_TEMPLATE([HAVE_ERRNO], +@@ -251,7 +253,7 @@ + + # Checks for library functions. + AC_TYPE_SIGNAL +-AC_CHECK_FUNCS([fsync popen _setjmp sigprocmask sigsetmask snprintf stat system fchmod]) ++AC_CHECK_FUNCS([popen _setjmp sigprocmask sigsetmask snprintf stat system fchmod]) + + # AC_CHECK_FUNCS may not work for inline functions, so test these separately. + AC_MSG_CHECKING(for memcpy) +@@ -298,6 +300,16 @@ + #endif], [static char *x; x = strerror(0);], + [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STRERROR)], [AC_MSG_RESULT(no)]) + ++AC_MSG_CHECKING(for fsync) ++AC_TRY_RUN([ ++#include ++#include ++int main(void) ++{ ++ int fd = open("/dev/tty", O_RDWR); ++ return fsync(fd); ++}], [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FSYNC)], [AC_MSG_RESULT(no)]) ++ + AC_MSG_CHECKING(for sys_errlist) + AC_TRY_LINK(, [extern char *sys_errlist[]; static char **x; x = sys_errlist;], + [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_ERRLIST)], [AC_MSG_RESULT(no)]) diff --git a/less-436-help.patch b/less-436-help.patch index d58498b..09821c3 100644 --- a/less-436-help.patch +++ b/less-436-help.patch @@ -1,7 +1,8 @@ -diff -up less-661/help.c.help less-661/help.c ---- less-661/help.c.help 2024-08-05 21:40:34.531327397 +0200 -+++ less-661/help.c 2024-08-05 21:40:34.533327418 +0200 -@@ -137,7 +137,7 @@ constant char helpdata[] = { +diff --git a/help.c b/help.c +index 531aa16..0de6f0f 100644 +--- a/help.c ++++ b/help.c +@@ -119,7 +119,7 @@ constant char helpdata[] = { ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','N','u','m','b','e','r',' ','o','f',' ','b','u','f','f','e','r','s','.','\n', ' ',' ','-','B',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','a','u','t','o','-','b','u','f','f','e','r','s','\n', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','a','u','t','o','m','a','t','i','c','a','l','l','y',' ','a','l','l','o','c','a','t','e',' ','b','u','f','f','e','r','s',' ','f','o','r',' ','p','i','p','e','s','.','\n', @@ -10,10 +11,23 @@ diff -up less-661/help.c.help less-661/help.c ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','R','e','p','a','i','n','t',' ','b','y',' ','c','l','e','a','r','i','n','g',' ','r','a','t','h','e','r',' ','t','h','a','n',' ','s','c','r','o','l','l','i','n','g','.','\n', ' ',' ','-','d',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','d','u','m','b','\n', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','u','m','b',' ','t','e','r','m','i','n','a','l','.','\n', -diff -up less-661/less.hlp.help less-661/less.hlp ---- less-661/less.hlp.help 2024-08-05 21:40:34.532327408 +0200 -+++ less-661/less.hlp 2024-08-05 21:40:34.533327418 +0200 -@@ -134,7 +134,7 @@ +@@ -151,8 +151,10 @@ constant char helpdata[] = { + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','I','g','n','o','r','e',' ','t','h','e',' ','L','E','S','S','O','P','E','N',' ','e','n','v','i','r','o','n','m','e','n','t',' ','v','a','r','i','a','b','l','e','.','\n', + ' ',' ','-','m',' ',' ','-','M',' ',' ','.','.','.','.',' ',' ','-','-','l','o','n','g','-','p','r','o','m','p','t',' ',' ','-','-','L','O','N','G','-','P','R','O','M','P','T','\n', + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','e','t',' ','p','r','o','m','p','t',' ','s','t','y','l','e','.','\n', +-' ',' ','-','n',' ',' ','-','N',' ',' ','.','.','.','.',' ',' ','-','-','l','i','n','e','-','n','u','m','b','e','r','s',' ',' ','-','-','L','I','N','E','-','N','U','M','B','E','R','S','\n', ++' ',' ','-','n',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','l','i','n','e','-','n','u','m','b','e','r','s','\n', + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','u','s','e',' ','l','i','n','e',' ','n','u','m','b','e','r','s','.','\n', ++' ',' ','-','N',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','L','I','N','E','-','N','U','M','B','E','R','S','\n', ++' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','U','s','e',' ','l','i','n','e',' ','n','u','m','b','e','r','s','.','\n', + ' ',' ','-','o',' ','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ',' ','.',' ',' ','-','-','l','o','g','-','f','i','l','e','=','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']','\n', + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','C','o','p','y',' ','t','o',' ','l','o','g',' ','f','i','l','e',' ','(','s','t','a','n','d','a','r','d',' ','i','n','p','u','t',' ','o','n','l','y',')','.','\n', + ' ',' ','-','O',' ','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ',' ','.',' ',' ','-','-','L','O','G','-','F','I','L','E','=','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']','\n', +diff --git a/less.hlp b/less.hlp +index 15ece5a..186e409 100644 +--- a/less.hlp ++++ b/less.hlp +@@ -116,7 +116,7 @@ Number of buffers. -B ........ --auto-buffers Don't automatically allocate buffers for pipes. @@ -22,3 +36,15 @@ diff -up less-661/less.hlp.help less-661/less.hlp Repaint by clearing rather than scrolling. -d ........ --dumb Dumb terminal. +@@ -148,8 +148,10 @@ + Ignore the LESSOPEN environment variable. + -m -M .... --long-prompt --LONG-PROMPT + Set prompt style. +- -n -N .... --line-numbers --LINE-NUMBERS ++ -n ........ --line-numbers + Don't use line numbers. ++ -N ........ --LINE-NUMBERS ++ Use line numbers. + -o [_f_i_l_e] . --log-file=[_f_i_l_e] + Copy to log file (standard input only). + -O [_f_i_l_e] . --LOG-FILE=[_f_i_l_e] diff --git a/less-444-Foption.v2.patch b/less-444-Foption.v2.patch new file mode 100644 index 0000000..d996a5c --- /dev/null +++ b/less-444-Foption.v2.patch @@ -0,0 +1,131 @@ +From 21d56469fd4b4558d640ad82c78f2b9748341c11 Mon Sep 17 00:00:00 2001 +From: "Vojtech Vitek (V-Teq)" +Date: Mon, 14 May 2012 17:31:20 +0200 +Subject: [PATCH] Fix -F option behavior + +Original patch written by Jindrich Novy . + +Changes and improvements by Zdenek Prikryl , +Vojtech Vitek and Colin Guthrie . +Jozef Mlich +--- +diff -up ./less-466/forwback.c.Foption ./less-466/forwback.c +--- ./less-466/forwback.c.Foption 2014-08-24 02:46:52.000000000 +0200 ++++ ./less-466/forwback.c 2014-09-18 13:54:28.804626580 +0200 +@@ -440,3 +440,24 @@ get_back_scroll() + return (sc_height - 2); + return (10000); /* infinity */ + } ++ ++ ++/* ++ * Get line count of file up to the screen height + 1 char ++ */ ++ public int ++get_line_count() ++{ ++ int nlines = 0; ++ POSITION pos; ++ ++ pos = ch_zero(); ++ ++ while (pos != NULL_POSITION && nlines <= sc_height) ++ { ++ pos = forw_line(pos); ++ nlines++; ++ } ++ ++ return nlines; ++} +diff -up ./less-466/funcs.h.Foption ./less-466/funcs.h +--- ./less-466/funcs.h.Foption 2014-08-24 02:46:54.000000000 +0200 ++++ ./less-466/funcs.h 2014-09-18 13:55:12.140010010 +0200 +@@ -139,6 +139,7 @@ + public void forward (); + public void backward (); + public int get_back_scroll (); ++ public int get_line_count (); + public void del_ifile (); + public IFILE next_ifile (); + public IFILE prev_ifile (); +diff -up ./less-466/main.c.Foption ./less-466/main.c +--- ./less-466/main.c.Foption 2014-08-24 02:46:51.000000000 +0200 ++++ ./less-466/main.c 2014-09-18 14:03:12.868331522 +0200 +@@ -54,8 +54,10 @@ static char consoleTitle[256]; + #endif + + extern int less_is_more; ++public int line_count; + extern int missing_cap; + extern int know_dumb; ++extern int quit_if_one_screen; + extern int pr_type; + + +@@ -273,10 +275,27 @@ main(argc, argv) + { + if (edit_stdin()) /* Edit standard input */ + quit(QUIT_ERROR); ++ if (quit_if_one_screen) ++ line_count = get_line_count(); ++ + } else + { + if (edit_first()) /* Edit first valid file in cmd line */ + quit(QUIT_ERROR); ++ /* ++ * In case that we have only one file and -F, have to get a line ++ * count fot init(). If the line count is less then a height of a term, ++ * the content of the file is printed out and then less quits. Otherwise ++ * -F can not be used ++ */ ++ if (quit_if_one_screen) ++ { ++ if (nifile() == 1) ++ line_count = get_line_count(); ++ else /* In case more than one file, -F can not be used */ ++ quit_if_one_screen = FALSE; ++ } ++ + } + + init(); +diff -up ./less-466/screen.c.Foption ./less-466/screen.c +--- ./less-466/screen.c.Foption 2014-08-24 02:46:51.000000000 +0200 ++++ ./less-466/screen.c 2014-09-18 13:58:52.772962165 +0200 +@@ -203,6 +203,7 @@ public int missing_cap = 0; /* Some capa + + static int attrmode = AT_NORMAL; + extern int binattr; ++extern int line_count; + + #if !MSDOS_COMPILER + static char *cheaper(); +@@ -232,6 +233,7 @@ extern int wscroll; + extern int screen_trashed; + extern int tty; + extern int top_scroll; ++extern int quit_if_one_screen; + extern int oldbot; + #if HILITE_SEARCH + extern int hilite_search; +@@ -1533,7 +1535,9 @@ win32_deinit_term() + init() + { + #if !MSDOS_COMPILER +- if (!no_init) ++ if (quit_if_one_screen && line_count >= sc_height) ++ quit_if_one_screen = FALSE; ++ if (!no_init && !quit_if_one_screen) + tputs(sc_init, sc_height, putchr); + if (!no_keypad) + tputs(sc_s_keypad, sc_height, putchr); +@@ -1573,7 +1577,7 @@ deinit() + #if !MSDOS_COMPILER + if (!no_keypad) + tputs(sc_e_keypad, sc_height, putchr); +- if (!no_init) ++ if (!no_init && !quit_if_one_screen) + tputs(sc_deinit, sc_height, putchr); + #else + /* Restore system colors. */ diff --git a/less-458-less-filters-man.patch b/less-458-less-filters-man.patch index 90e7207..a3ee61c 100644 --- a/less-458-less-filters-man.patch +++ b/less-458-less-filters-man.patch @@ -1,24 +1,22 @@ diff -up less-466/less.nro.filters-man less-466/less.nro --- less-466/less.nro.filters-man 2014-09-18 14:32:32.124111631 +0200 +++ less-466/less.nro 2014-09-18 14:32:39.548177152 +0200 -@@ -1323,7 +1323,19 @@ Similarly, if the first two characters of LESSOPEN are vertical bar and dash +@@ -1234,6 +1234,18 @@ Similarly, if the first two characters o the input pipe is used on standard input as well as other files. Again, in this case the dash is not considered to be part of the input pipe command. --. +.PP +There are used following files to set up default preprocessor: +.br -+ /etc/profile.d/less.sh ++ /etc/profile.d/less.sh +.br -+ /etc/profile.d/less.csh ++ /etc/profile.d/less.csh +.br +These files set up /usr/bin/lesspipe.sh as a default filter. An user defined +filter can be specified in ~/.lessfilter. This file should have an execute bit +set and accept only one parameter, which represents a filename. If +the user defined filter process the file, zero should be returned. Otherwise +~/.lessfilter tries to handle the file. -+ + .SH "NATIONAL CHARACTER SETS" - There are five types of characters in the input file: - .IP "normal characters" + There are three types of characters in the input file: diff --git a/less-458-lessecho-usage.patch b/less-458-lessecho-usage.patch index b16369b..40a05b7 100644 --- a/less-458-lessecho-usage.patch +++ b/less-458-lessecho-usage.patch @@ -2,7 +2,7 @@ diff -upr less-458_orig/lessecho.c less-458_work/lessecho.c --- less-458_orig/lessecho.c 2013-05-07 14:03:52.091104655 +0200 +++ less-458_work/lessecho.c 2013-05-07 11:21:10.883991862 +0200 @@ -41,7 +41,27 @@ static int num_metachars = 0; - static void pr_usage(void) + pr_usage() { fprintf(stderr, - "usage: lessecho [-ox] [-cx] [-pn] [-dn] [-mx] [-nn] [-ex] [-fn] [-a] file ...\n"); @@ -29,5 +29,5 @@ diff -upr less-458_orig/lessecho.c less-458_work/lessecho.c + " -?\t- prints this help\n"); } - static void pr_version(void) + static void diff --git a/less-458-lesskey-usage.patch b/less-458-lesskey-usage.patch index e9c5cc3..dbef8a0 100644 --- a/less-458-lesskey-usage.patch +++ b/less-458-lesskey-usage.patch @@ -2,8 +2,8 @@ diff -upr less-458_orig/lesskey.c less-458_work/lesskey.c --- less-458_orig/lesskey.c 2013-05-07 14:03:52.062104533 +0200 +++ less-458_work/lesskey.c 2013-05-07 11:21:10.881991855 +0200 @@ -217,7 +217,15 @@ extern char version[]; - - static void usage(void) + void + usage() { - fprintf(stderr, "usage: lesskey [-o output] [input]\n"); + fprintf(stderr, "usage: lesskey [-o output] [input]\n\n"); diff --git a/less-458-outdated-unicode-data.patch b/less-458-outdated-unicode-data.patch new file mode 100644 index 0000000..b0697fa --- /dev/null +++ b/less-458-outdated-unicode-data.patch @@ -0,0 +1,12 @@ +diff -pruN less-458.orig/charset.c less-458/charset.c +--- less-458.orig/charset.c 2013-04-05 01:55:05.000000000 +0900 ++++ less-458/charset.c 2014-03-10 19:47:09.850026052 +0900 +@@ -970,7 +970,7 @@ static struct wchar_range ubin_table[] = + { 0x2064, 0x2069} /* Cn */, + { 0x206A, 0x206F} /* Cf */, + { 0x2072, 0x2073} /* Cn */, { 0x208F, 0x208F} /* Cn */, +- { 0x2095, 0x209F} /* Cn */, { 0x20B6, 0x20CF} /* Cn */, ++ { 0x2095, 0x209F} /* Cn */, { 0x20BB, 0x20CF} /* Cn */, + { 0x20F0, 0x20FF} /* Cn */, { 0x214F, 0x2152} /* Cn */, + { 0x2185, 0x218F} /* Cn */, { 0x23E8, 0x23FF} /* Cn */, + { 0x2427, 0x243F} /* Cn */, { 0x244B, 0x245F} /* Cn */, diff --git a/less-471-out_of_bounds_read.patch b/less-471-out_of_bounds_read.patch new file mode 100644 index 0000000..20bed55 --- /dev/null +++ b/less-471-out_of_bounds_read.patch @@ -0,0 +1,56 @@ +diff -up ./less-471/charset.c.utf8 ./less-471/charset.c +--- ./less-471/charset.c.utf8 2014-12-14 19:19:11.000000000 +0100 ++++ ./less-471/charset.c 2015-06-01 08:59:38.140122262 +0200 +@@ -506,8 +506,9 @@ utf_len(ch) + * Does the parameter point to the lead byte of a well-formed UTF-8 character? + */ + public int +-is_utf8_well_formed(s) ++is_utf8_well_formed(s, slen) + unsigned char *s; ++ int slen; + { + int i; + int len; +@@ -516,6 +517,8 @@ is_utf8_well_formed(s) + return (0); + + len = utf_len((char) s[0]); ++ if (len > slen) ++ return (0); + if (len == 1) + return (1); + if (len == 2) +@@ -547,7 +550,7 @@ utf_bin_count(data, len) + int bin_count = 0; + while (len > 0) + { +- if (is_utf8_well_formed(data)) ++ if (is_utf8_well_formed(data, len)) + { + int clen = utf_len(*data); + data += clen; +diff -up ./less-471/cmdbuf.c.utf8 ./less-471/cmdbuf.c +--- ./less-471/cmdbuf.c.utf8 2014-12-14 19:19:11.000000000 +0100 ++++ ./less-471/cmdbuf.c 2015-06-01 09:00:43.247776312 +0200 +@@ -1264,7 +1264,7 @@ cmd_char(c) + cmd_mbc_buf[cmd_mbc_buf_index++] = c; + if (cmd_mbc_buf_index < cmd_mbc_buf_len) + return (CC_OK); +- if (!is_utf8_well_formed(cmd_mbc_buf)) ++ if (!is_utf8_well_formed(cmd_mbc_buf, cmd_mbc_buf_index)) + { + /* complete, but not well formed (non-shortest form), sequence */ + cmd_mbc_buf_len = 0; +diff -up ./less-471/line.c.utf8 ./less-471/line.c +--- ./less-471/line.c.utf8 2015-06-01 08:57:28.000000000 +0200 ++++ ./less-471/line.c 2015-06-01 09:00:01.061352521 +0200 +@@ -807,7 +807,7 @@ pappend(c, pos) + mbc_buf[mbc_buf_index++] = c; + if (mbc_buf_index < mbc_buf_len) + return (0); +- if (is_utf8_well_formed(mbc_buf)) ++ if (is_utf8_well_formed(mbc_buf, mbc_buf_index)) + r = do_append(get_wchar(mbc_buf), mbc_buf, mbc_pos); + else + /* Complete, but not shortest form, sequence. */ diff --git a/less-475-fsync.patch b/less-475-fsync.patch deleted file mode 100644 index 7f7a189..0000000 --- a/less-475-fsync.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff -up less-678-build/less-678/configure.ac.fsync less-678-build/less-678/configure.ac ---- less-678-build/less-678/configure.ac.fsync 2025-05-01 22:42:03.000000000 +0200 -+++ less-678-build/less-678/configure.ac 2025-05-22 18:10:23.572796329 +0200 -@@ -210,6 +210,8 @@ AH_TEMPLATE([HAVE_TIME_T], - [Define HAVE_TIME_T if your system supports the "time_t" type.]) - AH_TEMPLATE([HAVE_STRERROR], - [Define HAVE_STRERROR if you have the strerror() function.]) -+AH_TEMPLATE([HAVE_FSYNC], -+ [Define HAVE_FSYNC if fsync() on a tty works.]) - AH_TEMPLATE([HAVE_FILENO], - [Define HAVE_FILENO if you have the fileno() macro.]) - AH_TEMPLATE([HAVE_ERRNO], -@@ -259,7 +261,7 @@ AC_MSG_CHECKING(for ANSI function protot - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[int f(int a) { return a; }]])],[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ANSI_PROTOS)],[AC_MSG_RESULT(no)]) - - # Checks for library functions. --AC_CHECK_FUNCS([fchmod fsync nanosleep poll popen realpath _setjmp sigprocmask sigsetmask snprintf stat strsignal system ttyname usleep]) -+AC_CHECK_FUNCS([fchmod nanosleep poll popen realpath _setjmp sigprocmask sigsetmask snprintf stat strsignal system ttyname usleep]) - AC_CHECK_DECL(sigsetjmp, [AC_DEFINE(HAVE_SIGSETJMP)], [], [#include ]) - - # AC_CHECK_FUNCS may not work for inline functions, so test these separately. -@@ -302,6 +304,16 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ - #include - #endif]], [[static char *x; x = strerror(0);]])],[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STRERROR)],[AC_MSG_RESULT(no)]) - -+AC_MSG_CHECKING(for fsync) -+AC_TRY_RUN([ -+#include -+#include -+int main(void) -+{ -+ int fd = open("/dev/tty", O_RDWR); -+ return fsync(fd); -+}], [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FSYNC)], [AC_MSG_RESULT(no)]) -+ - AC_MSG_CHECKING(for sys_errlist) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[extern char *sys_errlist[]; static char **x; x = sys_errlist;]])],[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_ERRLIST)],[AC_MSG_RESULT(no)]) - diff --git a/less.csh b/less.csh old mode 100644 new mode 100755 index d3c1f8e..ba2b82b --- a/less.csh +++ b/less.csh @@ -1,15 +1,4 @@ # less initialization script (csh) - -# All less.*sh files should have the same semantics! - -# In case you are curious, the test for non-emptiness is not as easy as in -# Bourne shell. This "eval" construct is probably inspired by Stack -# Overflow question 13343392. -if ( $?LESSOPEN && { eval 'test ! -z "$LESSOPEN"' } ) then - : -else - if ( -x /usr/bin/lesspipe.sh ) then - # The '||' here is intentional, see rhbz#1254837. - setenv LESSOPEN "||/usr/bin/lesspipe.sh %s" - endif +if ( -x /usr/bin/lesspipe.sh ) then + setenv LESSOPEN "||/usr/bin/lesspipe.sh %s" endif diff --git a/less.sh b/less.sh old mode 100644 new mode 100755 index 189bbd2..14f6fde --- a/less.sh +++ b/less.sh @@ -1,8 +1,2 @@ # less initialization script (sh) - -# All less.*sh files should have the same semantics! - -if [ -z "$LESSOPEN" ] && [ -x /usr/bin/lesspipe.sh ]; then - # The '||' here is intentional, see rhbz#1254837. - export LESSOPEN="||/usr/bin/lesspipe.sh %s" -fi +[ -x /usr/bin/lesspipe.sh ] && export LESSOPEN="${LESSOPEN-||/usr/bin/lesspipe.sh %s}" diff --git a/less.spec b/less.spec index 51d2494..413f090 100644 --- a/less.spec +++ b/less.spec @@ -1,300 +1,77 @@ Summary: A text file browser similar to more, but better Name: less -Version: 685 -Release: 6%{?dist} -License: GPL-3.0-only and BSD-2-Clause -Source0: https://www.greenwoodsoftware.com/less/%{name}-%{version}.tar.gz -%global lesspipe_version 2.20 -Source1: https://github.com/wofr06/lesspipe/archive/refs/tags/v%{lesspipe_version}.tar.gz#/lesspipe-%{lesspipe_version}.tar.gz +Version: 471 +Release: 5%{?dist} +License: GPLv3+ +Group: Applications/Text +Source: http://www.greenwoodsoftware.com/less/%{name}-%{version}.tar.gz +Source1: lesspipe.sh Source2: less.sh Source3: less.csh +Patch1: less-444-Foption.v2.patch +Patch2: less-394-search.patch Patch4: less-394-time.patch -Patch5: less-475-fsync.patch +Patch5: less-418-fsync.patch Patch6: less-436-manpage-add-old-bot-option.patch +Patch7: less-436-help.patch Patch8: less-458-lessecho-usage.patch Patch9: less-458-less-filters-man.patch Patch10: less-458-lesskey-usage.patch Patch11: less-458-old-bot-in-help.patch -Patch13: less-436-help.patch -URL: https://www.greenwoodsoftware.com/less/ +Patch12: less-471-out_of_bounds_read.patch +URL: http://www.greenwoodsoftware.com/less/ +Requires: groff-base BuildRequires: ncurses-devel BuildRequires: autoconf automake libtool -BuildRequires: make -# for lesspipe make test -BuildRequires: perl-Archive-Tar -# for lesspipe -Recommends: (less-color = %{version}-%{release} if perl-interpreter) -Recommends: unzip -Recommends: html2text -Recommends: 7zip %description The less utility is a text file browser that resembles more, but has more capabilities. Less allows you to move backwards in the file as well as forwards. Since less doesn't have to read the entire input file before it starts, less starts up more quickly than text editors (for -example, vi). +example, vi). You should install less because it is a basic utility for viewing text files, and you'll use it frequently. -%package color -Summary: Colorizers for less -Requires: %{name} = %{version}-%{release} -Conflicts: less < 685-5 - -%description color -Syntax highlighting modes for the less pager. - - %prep -%setup -q -a 1 -%patch -P 4 -p1 -b .time -%patch -P 5 -p2 -b .fsync -%patch -P 6 -p1 -b .manpage-add-old-bot-option -%patch -P 8 -p1 -b .lessecho-usage -%patch -P 9 -p1 -b .less-filters-man -%patch -P 10 -p1 -b .lesskey-usage -%patch -P 11 -p1 -b .old-bot -%patch -P 13 -p1 -b .help - +%setup -q +%patch1 -p2 -b .Foption +%patch2 -p1 -b .search +%patch4 -p1 -b .time +%patch5 -p1 -b .fsync +%patch6 -p1 -b .manpage-add-old-bot-option +%patch7 -p1 -b .help +%patch8 -p1 -b .lessecho-usage +%patch9 -p1 -b .less-filters-man +%patch10 -p1 -b .lesskey-usage +%patch11 -p1 -b .old-bot +%patch12 -p2 -b .out_of_bounds_read.patch %build rm -f ./configure autoreconf -fiv %configure -%make_build CFLAGS="%{optflags} -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" - -pushd lesspipe-%{lesspipe_version} -#fix shebangs -sed -i "s|^#!/usr/bin/env bash|^#!/usr/bin/bash|" lesspipe.sh - -./configure --prefix=%{_prefix} -%make_build -popd +make %{?_smp_mflags} CFLAGS="%{optflags} -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" %install %make_install mkdir -p $RPM_BUILD_ROOT/etc/profile.d +install -p %{SOURCE1} $RPM_BUILD_ROOT/%{_bindir} install -p -m 644 %{SOURCE2} $RPM_BUILD_ROOT/etc/profile.d install -p -m 644 %{SOURCE3} $RPM_BUILD_ROOT/etc/profile.d -pushd lesspipe-%{lesspipe_version} -%make_install -rm -f $RPM_BUILD_ROOT/usr/share/bash-completion/less_completion -popd - -%check -pushd lesspipe-%{lesspipe_version} -# we dont have all required components to pass full test, but it is still -# useful to run for debug purposes -make test ||: -popd - %files -%doc README NEWS INSTALL -%license LICENSE COPYING +%doc README NEWS INSTALL COPYING +%license LICENSE /etc/profile.d/* -%{_bindir}/less -%{_bindir}/lesscomplete -%{_bindir}/lessecho -%{_bindir}/lesskey -%{_bindir}/lesspipe.sh +%{_bindir}/* %{_mandir}/man1/* -%files color -%{_bindir}/archive_color -%{_bindir}/code2color -%{_bindir}/sxw2txt -%{_bindir}/vimcolor - %changelog -* Mon Nov 24 2025 Michal Hlavinka - 685-6 -- reintroduce use more feature rich lesspipe filter, but separate - perl dependent colorizer into subpackage, credits Yaakov Selkowitz - -* Fri Nov 14 2025 Adam Williamson - 685-5 -- Revert new lesspipe filter due to hard perl dependency - -* Wed Nov 12 2025 Michal Hlavinka - 685-4 -- use more feature rich lesspipe filter (#2308285) - -* Wed Oct 22 2025 Michal Hlavinka - 685-1 -- updated to 685 (#2404089) - -* Tue Sep 02 2025 Michal Hlavinka - 679-4 -- add man page for lesspipe.sh (rhbz#2376159) - -* Thu Jul 24 2025 Fedora Release Engineering - 679-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Mon Jun 23 2025 Michal Hlavinka - 679-1 -- updated to 679 - -* Thu May 22 2025 Michal Hlavinka - 678-1 -- updated to 678 (#2367012) - -* Fri Jan 17 2025 Fedora Release Engineering - 668-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Fri Oct 18 2024 Michal Hlavinka - 668-1 -- updated to 668 (#2319532) - -* Mon Aug 12 2024 Michal Hlavinka - 661-2 -- fix post-v590 regression causing reading only part of pipe when stdin is null (upstream#558) - -* Fri Jul 26 2024 Michal Hlavinka - 661-1 -- updated to 661(2294840) - -* Thu Jul 18 2024 Fedora Release Engineering - 643-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Tue Feb 06 2024 Matej Mužila - 643-4 -- migrated to SPDX license - -* Thu Jan 25 2024 Fedora Release Engineering - 643-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Sun Jan 21 2024 Fedora Release Engineering - 643-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Tue Sep 05 2023 Matej Mužila - 643-1 -- Update to new upstream release -- Resolves: #2231663 - -* Thu Jul 20 2023 Fedora Release Engineering - 633-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Fri May 05 2023 Matej Mužila - 633-1 -- Update to new upstream release -- Resolves: CVE-2022-46663 - -* Thu Jan 19 2023 Fedora Release Engineering - 608-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Thu Nov 24 2022 Matej Mužila - 608-1 -- Update to new upstream release - -* Mon Jul 25 2022 Daan De Meyer - 590-5 -- Backport patch from upstream to fix memory leak - -* Thu Jul 21 2022 Fedora Release Engineering - 590-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Thu Jan 20 2022 Fedora Release Engineering - 590-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Sat Oct 02 2021 FeRD (Frank Dana) - 590-2 -- Backport patch from upstream to fix hyperlinked text bug - -* Tue Aug 10 2021 Matej Mužila - 590-1 -- Update to new upstream release - -* Thu Jul 22 2021 Fedora Release Engineering - 581.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Thu May 6 2021 Filip Januš - 581.2-1 -- Rebase to 581.2-1 - -* Tue Jan 26 2021 Fedora Release Engineering - 575-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Fri Jan 22 2021 Stephen Gallagher - 575-1 -- Update to latest version (#1919119) - -* Mon Nov 30 2020 Zbigniew Jędrzejewski-Szmek - 568-1 -- Update to latest version (#1818534) - -* Thu Aug 20 2020 Andrew Schorr - 551-5 -- Add zstd and brotli support to lesspipe.sh - -* Tue Jul 28 2020 Fedora Release Engineering - 551-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Wed Jan 29 2020 Fedora Release Engineering - 551-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Thu Jul 25 2019 Fedora Release Engineering - 551-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Wed Jul 17 2019 Matej Mužila - 551-1 -- Update to new upstream release -- Resolves: #1719419 - -* Tue Jun 04 2019 Matej Mužila - 550-1 -- Update to new upstream release -- Resolves: #1674080 - -* Fri Feb 01 2019 Fedora Release Engineering - 530-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Wed Jan 09 2019 Pavel Raiskup - 530-3 -- add lzip compression support into lesspipe.sh (rhbz#1664383) - -* Fri Jul 13 2018 Fedora Release Engineering - 530-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Sat Feb 17 2018 Pavel Raiskup - 530-1 -- new release, per upstream release notes: - http://greenwoodsoftware.com/less/news.530.html - -* Wed Feb 07 2018 Fedora Release Engineering - 487-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Thu Aug 03 2017 Fedora Release Engineering - 487-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Wed Jul 26 2017 Fedora Release Engineering - 487-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Tue May 16 2017 Pavel Raiskup - 487-3 -- read correctly text files named accidentally '*.rpm' (rhbz#1449790) - -* Fri Feb 10 2017 Fedora Release Engineering - 487-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Fri Oct 28 2016 Jozef Mlich - 487-1 -- Resolves: rhbz#1389577 - Update to new upstream release - -* Tue Oct 11 2016 Ville Skyttä - 481-6 -- Prefer gpg2 over gpg for *.gpg (rhbz#1383284) - -* Mon Apr 25 2016 Pavel Raiskup - 481-5 -- again use the correct '||' syntax in LESSOPEN variable (rhbz#1254837) - -* Wed Apr 20 2016 Pavel Raiskup - 481-4 -- don't strictly require man-db or groff-base (rhbz#1278857) - -* Tue Mar 29 2016 Pavel Raiskup - 481-3 -- avoid one ubiquitous stat() call in less.sh and less.csh if possible - (rhbz#1321591) - -* Thu Feb 04 2016 Fedora Release Engineering - 481-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Fri Oct 2 2015 Viktor Jancik - 481-1 -- Update to version 481, fixes #1231493 - -* Wed Sep 2 2015 Viktor Jancik - 479-3 -- Added missing double quotes in profile.d scripts -- Corrected license information - -* Mon Aug 24 2015 Viktor Jancik - 479-2 +* Mon Aug 03 2015 Viktor Jancik - 471-5 - Updated spec file to comply with current Fedora Packaging Guidelines Added missing documentation files -- Fixed less profile.d scripts -- Fixed preprocessing of man pages with special characters (#1241543) - -* Tue Jul 07 2015 Fedora Release Monitoring - 479-1 -- Update to 479 (#1240456) - -* Wed Jun 24 2015 Jozef Mlich - 478-1 -- update to 478 - http://greenwoodsoftware.com/less/news.478.html - -* Wed Jun 17 2015 Fedora Release Engineering - 471-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild * Mon Jun 01 2015 Jozef Mlich - 471-4 - update of previous patch diff --git a/lesspipe.sh b/lesspipe.sh new file mode 100755 index 0000000..a2c319a --- /dev/null +++ b/lesspipe.sh @@ -0,0 +1,87 @@ +#!/bin/sh +# +# To use this filter with less, define LESSOPEN: +# export LESSOPEN="|/usr/bin/lesspipe.sh %s" +# +# The script should return zero if the output was valid and non-zero +# otherwise, so less could detect even a valid empty output +# (for example while uncompressing gzipped empty file). +# For backward-compatibility, this is not required by default. To turn +# this functionality there should be another vertical bar (|) straight +# after the first one in the LESSOPEN environment variable: +# export LESSOPEN="||/usr/bin/lesspipe.sh %s" + +if [ ! -e "$1" ] ; then + exit 1 +fi + +if [ -d "$1" ] ; then + ls -alF -- "$1" + exit $? +fi + +exec 2>/dev/null + +# Allow for user defined filters +if [ -x ~/.lessfilter ]; then + ~/.lessfilter "$1" + if [ $? -eq 0 ]; then + exit 0 + fi +fi + +case "$1" in +*.[1-9n].bz2|*.[1-9]x.bz2|*.man.bz2|*.[1-9n].[gx]z|*.[1-9]x.[gx]z|*.man.[gx]z|*.[1-9n].lzma|*.[1-9]x.lzma|*.man.lzma) + case "$1" in + *.gz) DECOMPRESSOR="gzip -dc" ;; + *.bz2) DECOMPRESSOR="bzip2 -dc" ;; + *.xz|*.lzma) DECOMPRESSOR="xz -dc" ;; + esac + if [ -n "$DECOMPRESSOR" ] && $DECOMPRESSOR -- "$1" | file - | grep -q troff; then + $DECOMPRESSOR -- "$1" | groff -Tascii -mandoc - + exit $? + fi ;;& +*.[1-9n]|*.[1-9]x|*.man) + if file "$1" | grep -q troff; then + groff -Tascii -mandoc "$1" | cat -s + exit $? + fi ;;& +*.tar) tar tvvf "$1"; exit $? ;; +*.tgz|*.tar.gz|*.tar.[zZ]) tar tzvvf "$1"; exit $? ;; +*.tar.xz) tar Jtvvf "$1"; exit $? ;; +*.xz|*.lzma) xz -dc -- "$1"; exit $? ;; +*.tar.bz2|*.tbz2) bzip2 -dc -- "$1" | tar tvvf -; exit $? ;; +*.[zZ]|*.gz) gzip -dc -- "$1"; exit $? ;; +*.bz2) bzip2 -dc -- "$1"; exit $? ;; +*.zip|*.jar|*.nbm) zipinfo -- "$1"; exit $? ;; +*.rpm) rpm -qpivl --changelog -- "$1"; exit $? ;; +*.cpi|*.cpio) cpio -itv < "$1"; exit $? ;; +*.gpg) gpg -d "$1"; exit $? ;; +*.gif|*.jpeg|*.jpg|*.pcd|*.png|*.tga|*.tiff|*.tif) + if [ -x /usr/bin/identify ]; then + identify "$1" + exit $? + elif [ -x /usr/bin/gm ]; then + gm identify "$1" + exit $? + else + echo "No identify available" + echo "Install ImageMagick or GraphicsMagick to browse images" + exit 1 + fi ;; +*) + if [ -x /usr/bin/file ] && [ -x /usr/bin/iconv ] && [ -x /usr/bin/cut ]; then + case `file -b "$1"` in + *UTF-16*) conv='UTF-16' ;; + *UTF-32*) conv='UTF-32' ;; + esac + if [ -n "$conv" ]; then + env=`echo $LANG | cut -d. -f2` + if [ -n "$env" -a "$conv" != "$env" ]; then + iconv -f $conv -t $env "$1" + exit $? + fi + fi + fi + exit 1 +esac diff --git a/sources b/sources index 703a9df..b42ca60 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ -SHA512 (less-685.tar.gz) = aff745f1816e0f996fbdbc33ecae0726cf0d842efc227937ff8c32e734c8b5be4c611ffbb27e5e038b4d95280c95ca60c53af1a47cf419cb06e5fab543c231f3 -SHA512 (lesspipe-2.20.tar.gz) = bfeba1b921959e8cde8ce8bcc75765598cefd2cc705aa5b6417592fdbdb0c43bd3efb0d4379a0514f0da86806988ee95219539974c7af3319595d9b03aac550e +9a40d29a2d84b41f9f36d7dd90b4f950 less-471.tar.gz