diff options
Diffstat (limited to 'system/ksh-openbsd/patches')
28 files changed, 0 insertions, 2210 deletions
diff --git a/system/ksh-openbsd/patches/01-ksh-vi-mode-complete-as-command-on-Ctrl-f.diff b/system/ksh-openbsd/patches/01-ksh-vi-mode-complete-as-command-on-Ctrl-f.diff deleted file mode 100644 index 86a7a56c77..0000000000 --- a/system/ksh-openbsd/patches/01-ksh-vi-mode-complete-as-command-on-Ctrl-f.diff +++ /dev/null @@ -1,152 +0,0 @@ -From 6af44d2fa0cdcba11368cf4eee141e42bf0dd422 Mon Sep 17 00:00:00 2001 -From: Alexander Polakov <polachok@gmail.com> -Date: Sun, 29 May 2011 14:55:46 +0400 -Subject: [PATCH 1/8] ksh/vi mode: complete as command on Ctrl-f. - - * adds a flag for x_cf_glob() to force completion like it was a command - * new argument for complete_word() to pass the flag - * reuse print_expansions() unused argument to pass the flag - - Why: useful for sudo or one-liner completion - XXX: use different key combination? ---- - edit.c | 2 ++ - edit.h | 7 ++++--- - vi.c | 22 +++++++++++----------- - 3 files changed, 17 insertions(+), 14 deletions(-) - -diff --git edit.c edit.c -index 6c357a7..0b1ff7d 100644 ---- edit.c -+++ edit.c -@@ -599,6 +599,8 @@ x_cf_glob(int flags, const char *buf, int buflen, int pos, int *startp, - len = x_locate_word(buf, buflen, pos, startp, &is_command); - if (!(flags & XCF_COMMAND)) - is_command = 0; -+ if (flags & XCF_FORCE_COMMAND) -+ is_command = 1; - /* Don't do command globing on zero length strings - it takes too - * long and isn't very useful. File globs are more likely to be - * useful, so allow these. -diff --git edit.h edit.h -index f966fe4..9c75ffc 100644 ---- edit.h -+++ edit.h -@@ -38,9 +38,10 @@ typedef struct { - EXTERN X_chars edchars; - - /* x_cf_glob() flags */ --#define XCF_COMMAND BIT(0) /* Do command completion */ --#define XCF_FILE BIT(1) /* Do file completion */ --#define XCF_FULLPATH BIT(2) /* command completion: store full path */ -+#define XCF_COMMAND BIT(0) /* Do command completion */ -+#define XCF_FILE BIT(1) /* Do file completion */ -+#define XCF_FULLPATH BIT(2) /* command completion: store full path */ -+#define XCF_FORCE_COMMAND BIT(3) /* Force completion as a command */ - #define XCF_COMMAND_FILE (XCF_COMMAND|XCF_FILE) - - /* edit.c */ -diff --git vi.c vi.c -index 889b35a..e4173c7 100644 ---- vi.c -+++ vi.c -@@ -58,7 +58,7 @@ static int newcol(int, int); - static void display(char *, char *, int); - static void ed_mov_opt(int, char *); - static int expand_word(int); --static int complete_word(int, int); -+static int complete_word(int, int, int); - static int print_expansions(struct edstate *, int); - static int char_len(int); - static void x_vi_zotc(int); -@@ -651,7 +651,7 @@ vi_insert(int ch) - break; - - case Ctrl('f'): -- complete_word(0, 0); -+ complete_word(0, 0, XCF_FORCE_COMMAND); - break; - - case Ctrl('e'): -@@ -660,7 +660,7 @@ vi_insert(int ch) - - case Ctrl('i'): - if (Flag(FVITABCOMPLETE)) { -- complete_word(0, 0); -+ complete_word(0, 0, 0); - break; - } - /* FALLTHROUGH */ -@@ -1111,14 +1111,14 @@ vi_cmd(int argcnt, const char *cmd) - - case '=': /* at&t ksh */ - case Ctrl('e'): /* Nonstandard vi/ksh */ -- print_expansions(es, 1); -+ print_expansions(es, 0); - break; - - - case Ctrl('i'): /* Nonstandard vi/ksh */ - if (!Flag(FVITABCOMPLETE)) - return -1; -- complete_word(1, argcnt); -+ complete_word(1, argcnt, 0); - break; - - case Ctrl('['): /* some annoying at&t ksh's */ -@@ -1126,7 +1126,7 @@ vi_cmd(int argcnt, const char *cmd) - return -1; - case '\\': /* at&t ksh */ - case Ctrl('f'): /* Nonstandard vi/ksh */ -- complete_word(1, argcnt); -+ complete_word(1, argcnt, 0); - break; - - -@@ -1939,7 +1939,7 @@ expand_word(int command) - } - - static int --complete_word(int command, int count) -+complete_word(int command, int count, int flags) - { - static struct edstate *buf; - int rval = 0; -@@ -1953,7 +1953,7 @@ complete_word(int command, int count) - - /* Undo previous completion */ - if (command == 0 && expanded == COMPLETE && buf) { -- print_expansions(buf, 0); -+ print_expansions(buf, flags); - expanded = PRINT; - return 0; - } -@@ -1971,7 +1971,7 @@ complete_word(int command, int count) - /* XCF_FULLPATH for count 'cause the menu printed by print_expansions() - * was done this way. - */ -- nwords = x_cf_glob(XCF_COMMAND_FILE | (count ? XCF_FULLPATH : 0), -+ nwords = x_cf_glob(XCF_COMMAND_FILE | (count ? XCF_FULLPATH : 0) | flags, - es->cbuf, es->linelen, es->cursor, - &start, &end, &words, &is_command); - if (nwords == 0) { -@@ -2044,14 +2044,14 @@ complete_word(int command, int count) - } - - static int --print_expansions(struct edstate *e, int command) -+print_expansions(struct edstate *e, int flags) - { - int nwords; - int start, end; - char **words; - int is_command; - -- nwords = x_cf_glob(XCF_COMMAND_FILE|XCF_FULLPATH, -+ nwords = x_cf_glob(XCF_COMMAND_FILE|XCF_FULLPATH|flags, - e->cbuf, e->linelen, e->cursor, - &start, &end, &words, &is_command); - if (nwords == 0) { --- -1.7.5 - diff --git a/system/ksh-openbsd/patches/02-remove_fp.diff b/system/ksh-openbsd/patches/02-remove_fp.diff deleted file mode 100644 index 06f586e5c8..0000000000 --- a/system/ksh-openbsd/patches/02-remove_fp.diff +++ /dev/null @@ -1,215 +0,0 @@ -Remove disabled FP support. -From Okan Demirmen. -Index: ksh_limval.h -=================================================================== -RCS file: /home/okan/hack/open/cvs/src/bin/ksh/ksh_limval.h,v -retrieving revision 1.2 -diff -u -p -r1.2 ksh_limval.h ---- ksh_limval.h 18 Dec 2004 20:55:52 -0000 1.2 -+++ ksh_limval.h 14 Mar 2011 10:03:41 -0000 -@@ -4,10 +4,6 @@ - - /* limits.h is included in sh.h */ - --#ifndef DMAXEXP --# define DMAXEXP 128 /* should be big enough */ --#endif -- - #ifndef BITS - # define BITS(t) (CHAR_BIT * sizeof(t)) - #endif -Index: shf.c -=================================================================== -RCS file: /home/okan/hack/open/cvs/src/bin/ksh/shf.c,v -retrieving revision 1.15 -diff -u -p -r1.15 shf.c ---- shf.c 2 Apr 2006 00:48:33 -0000 1.15 -+++ shf.c 14 Mar 2011 10:03:19 -0000 -@@ -705,15 +705,7 @@ shf_smprintf(const char *fmt, ...) - return shf_sclose(&shf); /* null terminates */ - } - --#undef FP /* if you want floating point stuff */ -- - #define BUF_SIZE 128 --#define FPBUF_SIZE (DMAXEXP+16)/* this must be > -- * MAX(DMAXEXP, log10(pow(2, DSIGNIF))) -- * + ceil(log10(DMAXEXP)) + 8 (I think). -- * Since this is hard to express as a -- * constant, just use a large buffer. -- */ - - /* - * What kinda of machine we on? Hopefully the C compiler will optimize -@@ -744,18 +736,6 @@ shf_smprintf(const char *fmt, ...) - #define FL_NUMBER 0x200 /* a number was formated %[douxefg] */ - - --#ifdef FP --#include <math.h> -- --static double --my_ceil(double d) --{ -- double i; -- -- return d - modf(d, &i) + (d < 0 ? -1 : 1); --} --#endif /* FP */ -- - int - shf_vfprintf(struct shf *shf, const char *fmt, va_list args) - { -@@ -769,17 +749,6 @@ shf_vfprintf(struct shf *shf, const char - char numbuf[(BITS(long) + 2) / 3 + 1]; - /* this stuff for dealing with the buffer */ - int nwritten = 0; --#ifdef FP -- /* should be in <math.h> -- * extern double frexp(); -- */ -- extern char *ecvt(); -- -- double fpnum; -- int expo, decpt; -- char style; -- char fpbuf[FPBUF_SIZE]; --#endif /* FP */ - - if (!fmt) - return 0; -@@ -922,134 +922,6 @@ shf_vfprintf(struct shf *shf, const char - } - break; - --#ifdef FP -- case 'e': -- case 'g': -- case 'f': -- { -- char *p; -- -- /* -- * This could probably be done better, -- * but it seems to work. Note that gcvt() -- * is not used, as you cannot tell it to -- * not strip the zeros. -- */ -- flags |= FL_NUMBER; -- if (!(flags & FL_DOT)) -- precision = 6; /* default */ -- /* -- * Assumes doubles are pushed on -- * the stack. If this is not so, then -- * FL_LLONG/FL_LONG/FL_SHORT should be checked. -- */ -- fpnum = va_arg(args, double); -- s = fpbuf; -- style = c; -- /* -- * This is the same as -- * expo = ceil(log10(fpnum)) -- * but doesn't need -lm. This is an -- * approximation as expo is rounded up. -- */ -- (void) frexp(fpnum, &expo); -- expo = my_ceil(expo / LOG2_10); -- -- if (expo < 0) -- expo = 0; -- -- p = ecvt(fpnum, precision + 1 + expo, -- &decpt, &tmp); -- if (c == 'g') { -- if (decpt < -4 || decpt > precision) -- style = 'e'; -- else -- style = 'f'; -- if (decpt > 0 && (precision -= decpt) < 0) -- precision = 0; -- } -- if (tmp) -- *s++ = '-'; -- else if (flags & FL_PLUS) -- *s++ = '+'; -- else if (flags & FL_BLANK) -- *s++ = ' '; -- -- if (style == 'e') -- *s++ = *p++; -- else { -- if (decpt > 0) { -- /* Overflow check - should -- * never have this problem. -- */ -- if (decpt > &fpbuf[sizeof(fpbuf)] - s - 8) -- decpt = &fpbuf[sizeof(fpbuf)] - s - 8; -- (void) memcpy(s, p, decpt); -- s += decpt; -- p += decpt; -- } else -- *s++ = '0'; -- } -- -- /* print the fraction? */ -- if (precision > 0) { -- *s++ = '.'; -- /* Overflow check - should -- * never have this problem. -- */ -- if (precision > &fpbuf[sizeof(fpbuf)] - s - 7) -- precision = &fpbuf[sizeof(fpbuf)] - s - 7; -- for (tmp = decpt; tmp++ < 0 && -- precision > 0 ; precision--) -- *s++ = '0'; -- tmp = strlen(p); -- if (precision > tmp) -- precision = tmp; -- /* Overflow check - should -- * never have this problem. -- */ -- if (precision > &fpbuf[sizeof(fpbuf)] - s - 7) -- precision = &fpbuf[sizeof(fpbuf)] - s - 7; -- (void) memcpy(s, p, precision); -- s += precision; -- /* -- * `g' format strips trailing -- * zeros after the decimal. -- */ -- if (c == 'g' && !(flags & FL_HASH)) { -- while (*--s == '0') -- ; -- if (*s != '.') -- s++; -- } -- } else if (flags & FL_HASH) -- *s++ = '.'; -- -- if (style == 'e') { -- *s++ = (flags & FL_UPPER) ? 'E' : 'e'; -- if (--decpt >= 0) -- *s++ = '+'; -- else { -- *s++ = '-'; -- decpt = -decpt; -- } -- p = &numbuf[sizeof(numbuf)]; -- for (tmp = 0; tmp < 2 || decpt ; tmp++) { -- *--p = '0' + decpt % 10; -- decpt /= 10; -- } -- tmp = &numbuf[sizeof(numbuf)] - p; -- (void) memcpy(s, p, tmp); -- s += tmp; -- } -- -- len = s - fpbuf; -- s = fpbuf; -- precision = len; -- break; -- } --#endif /* FP */ -- - case 's': - if (!(s = va_arg(args, char *))) - s = "(null %s)"; diff --git a/system/ksh-openbsd/patches/03-ksh-vi-Ctrl-l-in-insert-mode-to-clear-the-screen.diff b/system/ksh-openbsd/patches/03-ksh-vi-Ctrl-l-in-insert-mode-to-clear-the-screen.diff deleted file mode 100644 index 21a57ffb42..0000000000 --- a/system/ksh-openbsd/patches/03-ksh-vi-Ctrl-l-in-insert-mode-to-clear-the-screen.diff +++ /dev/null @@ -1,45 +0,0 @@ -From 13ef2cd4206ed541fe1dae46c91a339fba5cf5cf Mon Sep 17 00:00:00 2001 -From: Alexander Polakov <polachok@gmail.com> -Date: Sun, 29 May 2011 15:12:31 +0400 -Subject: [PATCH 3/8] ksh/vi: Ctrl-l in insert mode to clear the screen. - - Why: typing "clear" is too slow. ---- - ksh.1 | 3 +++ - vi.c | 6 ++++++ - 2 files changed, 9 insertions(+), 0 deletions(-) - -diff --git ksh.1 ksh.1 -index f4b5815..01130ea 100644 ---- ksh.1 -+++ ksh.1 -@@ -5215,6 +5215,9 @@ List all the commands or files that match the current big-word. - Macro expansion. - Execute the commands found in the alias - .Ar c . -+.It ^L -+Clear the screen leaving the current line at the top of the -+screen. - .El - .Pp - Intra-line movement commands: -diff --git vi.c vi.c -index e4173c7..d0de478 100644 ---- vi.c -+++ vi.c -@@ -646,6 +646,12 @@ vi_insert(int ch) - return redo_insert(lastac - 1); - - /* { Begin nonstandard vi commands */ -+ case Ctrl('l'): -+ /* Use ANSI escape codes to clear the screen */ -+ x_puts("\033[2J\033[0;0H"); -+ redraw_line(0); -+ break; -+ - case Ctrl('x'): - expand_word(0); - break; --- -1.7.5 - diff --git a/system/ksh-openbsd/patches/04-ksh-vi-make-Ctrl-f-in-command-mode-behave-the-same-a.diff b/system/ksh-openbsd/patches/04-ksh-vi-make-Ctrl-f-in-command-mode-behave-the-same-a.diff deleted file mode 100644 index 6978789ec9..0000000000 --- a/system/ksh-openbsd/patches/04-ksh-vi-make-Ctrl-f-in-command-mode-behave-the-same-a.diff +++ /dev/null @@ -1,26 +0,0 @@ -From 90f648bf6182d558ff6489caefb52240fb2eab4e Mon Sep 17 00:00:00 2001 -From: Alexander Polakov <polachok@gmail.com> -Date: Sun, 29 May 2011 15:34:55 +0400 -Subject: [PATCH 4/8] ksh/vi: make Ctrl-f in command mode behave the same as - in insert. - ---- - vi.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git vi.c vi.c -index d0de478..6eb5d8c 100644 ---- vi.c -+++ vi.c -@@ -1132,7 +1132,7 @@ vi_cmd(int argcnt, const char *cmd) - return -1; - case '\\': /* at&t ksh */ - case Ctrl('f'): /* Nonstandard vi/ksh */ -- complete_word(1, argcnt, 0); -+ complete_word(1, argcnt, XCF_FORCE_COMMAND); - break; - - --- -1.7.5 - diff --git a/system/ksh-openbsd/patches/05-ksh-print-expansions-like-a-menu-with-numbers-in-vi-.diff b/system/ksh-openbsd/patches/05-ksh-print-expansions-like-a-menu-with-numbers-in-vi-.diff deleted file mode 100644 index 135f5054c3..0000000000 --- a/system/ksh-openbsd/patches/05-ksh-print-expansions-like-a-menu-with-numbers-in-vi-.diff +++ /dev/null @@ -1,105 +0,0 @@ -From 91ebd29a64451742b65115fc27034c6a3d154f90 Mon Sep 17 00:00:00 2001 -From: Alexander Polakov <polachok@gmail.com> -Date: Sun, 29 May 2011 15:41:53 +0400 -Subject: [PATCH 5/8] ksh: print expansions like a "menu" (with numbers) in vi - mode - - * adds an extra argument to x_print_expansions() - - preserves the emacs mode behaviour - - Why: in vi mode one can use the expansion number to - complete the word, but w/o numbers printed you - have to *count* expansions with your eyes to - find out the number. Stupid, huh? ---- - edit.c | 7 +++++-- - edit.h | 2 +- - emacs.c | 4 ++-- - vi.c | 4 ++-- - 4 files changed, 10 insertions(+), 7 deletions(-) - -diff --git edit.c edit.c -index 0b1ff7d..9cdcc6d 100644 ---- edit.c -+++ edit.c -@@ -292,7 +292,7 @@ static void glob_path(int flags, const char *pat, XPtrV *wp, - const char *path); - - void --x_print_expansions(int nwords, char *const *words, int is_command) -+x_print_expansions(int nwords, char *const *words, int is_command, int menu) - { - int use_copy = 0; - int prefix_len; -@@ -330,7 +330,10 @@ x_print_expansions(int nwords, char *const *words, int is_command) - */ - x_putc('\r'); - x_putc('\n'); -- pr_list(use_copy ? (char **) XPptrv(l) : words); -+ if (menu) -+ pr_menu(use_copy ? (char **) XPptrv(l) : words); -+ else -+ pr_list(use_copy ? (char **) XPptrv(l) : words); - - if (use_copy) - XPfree(l); /* not x_free_words() */ -diff --git edit.h edit.h -index 37ccf28..258affe 100644 ---- edit.h -+++ edit.h -@@ -52,7 +52,7 @@ void x_puts(const char *); - bool x_mode(bool); - int promptlen(const char *, const char **); - int x_do_comment(char *, int, int *); --void x_print_expansions(int, char *const *, int); -+void x_print_expansions(int, char *const *, int, int); - int x_cf_glob(int, const char *, int, int, int *, int *, char ***, int *); - int x_longest_prefix(int , char *const *); - int x_basename(const char *, const char *); -diff --git emacs.c emacs.c -index 0bfda96..3b2d083 100644 ---- emacs.c -+++ emacs.c -@@ -1684,7 +1684,7 @@ do_complete(int flags, /* XCF_{COMMAND,FILE,COMMAND_FILE} */ - } - - if (type == CT_LIST) { -- x_print_expansions(nwords, words, is_command); -+ x_print_expansions(nwords, words, is_command, 0); - x_redraw(0); - x_free_words(nwords, words); - return; -@@ -1707,7 +1707,7 @@ do_complete(int flags, /* XCF_{COMMAND,FILE,COMMAND_FILE} */ - } - - if (type == CT_COMPLIST && !completed) { -- x_print_expansions(nwords, words, is_command); -+ x_print_expansions(nwords, words, is_command, 0); - completed = 1; - } - -diff --git vi.c vi.c -index 6eb5d8c..95d192c 100644 ---- vi.c -+++ vi.c -@@ -1990,7 +1990,7 @@ complete_word(int command, int count, int flags) - count--; - if (count >= nwords) { - vi_error(); -- x_print_expansions(nwords, words, is_command); -+ x_print_expansions(nwords, words, is_command, 1); - x_free_words(nwords, words); - redraw_line(0); - return -1; -@@ -2064,7 +2064,7 @@ print_expansions(struct edstate *e, int flags) - vi_error(); - return -1; - } -- x_print_expansions(nwords, words, is_command); -+ x_print_expansions(nwords, words, is_command, 1); - x_free_words(nwords, words); - redraw_line(0); - return 0; --- -1.7.5 - diff --git a/system/ksh-openbsd/patches/06-ksh-vi-compensate-for-cursor-move-on-command-mode.diff b/system/ksh-openbsd/patches/06-ksh-vi-compensate-for-cursor-move-on-command-mode.diff deleted file mode 100644 index ce51064a01..0000000000 --- a/system/ksh-openbsd/patches/06-ksh-vi-compensate-for-cursor-move-on-command-mode.diff +++ /dev/null @@ -1,55 +0,0 @@ -From fc2058b4b6a64d66fe1ee318bccea42b4569d31f Mon Sep 17 00:00:00 2001 -From: Alexander Polakov <polachok@gmail.com> -Date: Sun, 29 May 2011 19:23:17 +0400 -Subject: [PATCH 7/8] ksh/vi: compensate for cursor move on command mode - - * move completion cursor one position right if the - character is space - * when we enter command mode, cursor is moved one - position left, and the space on the end is "lost". - So we are trying to complete "ls" instead of file - while having "ls " and "file.c" when having "file.c ". ---- - vi.c | 15 ++++++++++++++- - 1 files changed, 14 insertions(+), 1 deletions(-) - -diff --git vi.c vi.c -index 95d192c..0bac6be 100644 ---- vi.c -+++ vi.c -@@ -1956,6 +1956,7 @@ complete_word(int command, int count, int flags) - int match_len; - int is_unique; - int is_command; -+ int pos; - - /* Undo previous completion */ - if (command == 0 && expanded == COMPLETE && buf) { -@@ -1974,11 +1975,23 @@ complete_word(int command, int count, int flags) - buf = 0; - } - -+ /* XXX: hack. When we enter command mode, the cursor is moved -+ * one position left. This means that the space at the end is -+ * eaten and file completion becomes command completion. -+ * (see x_locate_word() for more on this) -+ */ -+ pos = es->cursor; -+ if (command) { -+ pos += (isspace(es->cbuf[es->cursor]) ? 1 : 0); -+ if (pos > es->linelen) -+ pos = es->linelen; -+ } -+ - /* XCF_FULLPATH for count 'cause the menu printed by print_expansions() - * was done this way. - */ - nwords = x_cf_glob(XCF_COMMAND_FILE | (count ? XCF_FULLPATH : 0) | flags, -- es->cbuf, es->linelen, es->cursor, -+ es->cbuf, es->linelen, pos, - &start, &end, &words, &is_command); - if (nwords == 0) { - vi_error(); --- -1.7.5 - diff --git a/system/ksh-openbsd/patches/07-Remove-from-the-list-of-characters-blocking-addition.diff b/system/ksh-openbsd/patches/07-Remove-from-the-list-of-characters-blocking-addition.diff deleted file mode 100644 index 9326e8072d..0000000000 --- a/system/ksh-openbsd/patches/07-Remove-from-the-list-of-characters-blocking-addition.diff +++ /dev/null @@ -1,37 +0,0 @@ -From 5fc8a0ae3c807bd57c8e8d55531770914ea6670a Mon Sep 17 00:00:00 2001 -From: Alexander Polakov <polachok@gmail.com> -Date: Mon, 20 Jun 2011 00:35:46 +0400 -Subject: [PATCH 8/8] Remove $ from the list of characters blocking * - addition. - -This allows things like $HOME/bi<tab> complete to /home/username/bin. ---- - edit.c | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -diff --git edit.c edit.c -index 01c2fe6..2702dab 100644 ---- edit.c -+++ edit.c -@@ -627,14 +627,14 @@ add_glob(const char *str, int slen) - - /* - * If the pathname contains a wildcard (an unquoted '*', -- * '?', or '[') or parameter expansion ('$'), or a ~username -- * with no trailing slash, then it is globbed based on that -- * value (i.e., without the appended '*'). -+ * '?', or '[') or a ~username with no trailing slash, -+ * then it is globbed based on that value (i.e., without -+ * the appended '*'). - */ - for (s = toglob; *s; s++) { - if (*s == '\\' && s[1]) - s++; -- else if (*s == '*' || *s == '[' || *s == '?' || *s == '$' || -+ else if ((*s == '*' || *s == '[' || *s == '?') || - (s[1] == '(' /*)*/ && strchr("+@!", *s))) - break; - else if (*s == '/') --- -1.7.5 - diff --git a/system/ksh-openbsd/patches/08-new_history_implementation.diff b/system/ksh-openbsd/patches/08-new_history_implementation.diff deleted file mode 100644 index d083b42554..0000000000 --- a/system/ksh-openbsd/patches/08-new_history_implementation.diff +++ /dev/null @@ -1,584 +0,0 @@ -From: Marco Peereboom -To: tech@openbsd.org -Subject: ksh history corruption - -I have had enough of corrupt ksh history so I had a look at the code to -try to fix it. The magical code was very magical so I basically deleted -most of it and made ksh history into a flat text file. It handles -multiple ksh instances writing to the same text file with locks just -like the current ksh does. I haven't noticed any differences in -behavior running this. - -Code is much simpler and it shaves ~4k of the binary too. - -Index: alloc.c -=================================================================== -RCS file: /cvs/src/bin/ksh/alloc.c,v -retrieving revision 1.8 -diff -u -p -r1.8 alloc.c ---- alloc.c 21 Jul 2008 17:30:08 -0000 1.8 -+++ alloc.c 30 Aug 2011 18:05:47 -0000 -@@ -62,7 +62,7 @@ alloc(size_t size, Area *ap) - { - struct link *l; - -- l = malloc(sizeof(struct link) + size); -+ l = calloc(1, sizeof(struct link) + size); - if (l == NULL) - internal_errorf(1, "unable to allocate memory"); - l->next = ap->freelist; -Index: history.c -=================================================================== -RCS file: /cvs/src/bin/ksh/history.c,v -retrieving revision 1.39 -diff -u -p -r1.39 history.c ---- history.c 19 May 2010 17:36:08 -0000 1.39 -+++ history.c 31 Aug 2011 19:33:24 -0000 -@@ -11,8 +11,7 @@ - * a) the original in-memory history mechanism - * b) a more complicated mechanism done by pc@hillside.co.uk - * that more closely follows the real ksh way of doing -- * things. You need to have the mmap system call for this -- * to work on your system -+ * things. - */ - - #include "sh.h" -@@ -22,19 +21,10 @@ - # include <sys/file.h> - # include <sys/mman.h> - --/* -- * variables for handling the data file -- */ --static int histfd; --static int hsize; -- --static int hist_count_lines(unsigned char *, int); --static int hist_shrink(unsigned char *, int); --static unsigned char *hist_skip_back(unsigned char *,int *,int); --static void histload(Source *, unsigned char *, int); --static void histinsert(Source *, int, unsigned char *); --static void writehistfile(int, char *); --static int sprinkle(int); -+static void writehistfile(FILE *); -+static FILE *history_open(int *); -+static int history_load(FILE *, Source *); -+static void history_close(FILE *); - - static int hist_execute(char *); - static int hist_replace(char **, const char *, const char *, int); -@@ -45,8 +35,8 @@ static void histbackup(void); - static char **current; /* current position in history[] */ - static char *hname; /* current name of history file */ - static int hstarted; /* set after hist_init() called */ --static Source *hist_source; -- -+static Source *hist_source; -+static struct stat last_sb; - - int - c_fc(char **wp) -@@ -529,15 +519,10 @@ sethistfile(const char *name) - /* if the name is the same as the name we have */ - if (hname && strcmp(hname, name) == 0) - return; -- - /* - * its a new name - possibly - */ -- if (histfd) { -- /* yes the file is open */ -- (void) close(histfd); -- histfd = 0; -- hsize = 0; -+ if (hname) { - afree(hname, APERM); - hname = NULL; - /* let's reset the history */ -@@ -577,18 +562,26 @@ init_histvec(void) - void - histsave(int lno, const char *cmd, int dowrite) - { -- char **hp; -- char *c, *cp; -+ char **hp; -+ char *c, *cp; -+ int changed; -+ FILE *f = NULL; -+ -+ if (dowrite) { -+ f = history_open(&changed); -+ if (f && changed) { -+ /* reset history */ -+ histptr = history - 1; -+ hist_source->line = 0; -+ history_load(f, hist_source); -+ } -+ } - - c = str_save(cmd, APERM); - if ((cp = strchr(c, '\n')) != NULL) - *cp = '\0'; - -- if (histfd && dowrite) -- writehistfile(lno, c); -- - hp = histptr; -- - if (++hp >= history + histsize) { /* remove oldest command */ - afree((void*)*history, APERM); - for (hp = history; hp < history + histsize - 1; hp++) -@@ -596,371 +589,125 @@ histsave(int lno, const char *cmd, int d - } - *hp = c; - histptr = hp; --} -- --/* -- * Write history data to a file nominated by HISTFILE -- * if HISTFILE is unset then history still happens, but -- * the data is not written to a file -- * All copies of ksh looking at the file will maintain the -- * same history. This is ksh behaviour. -- * -- * This stuff uses mmap() -- * if your system ain't got it - then you'll have to undef HISTORYFILE -- */ - --/* -- * Open a history file -- * Format is: -- * Bytes 1, 2: HMAGIC - just to check that we are dealing with -- * the correct object -- * Then follows a number of stored commands -- * Each command is -- * <command byte><command number(4 bytes)><bytes><null> -- */ --#define HMAGIC1 0xab --#define HMAGIC2 0xcd --#define COMMAND 0xff -+ if (dowrite && f) { -+ writehistfile(f); -+ history_close(f); -+ } -+} - --void --hist_init(Source *s) -+static FILE * -+history_open(int *changed) - { -- unsigned char *base; -- int lines; -- int fd; -- -- if (Flag(FTALKING) == 0) -- return; -- -- hstarted = 1; -- -- hist_source = s; -- -- hname = str_val(global("HISTFILE")); -- if (hname == NULL) -- return; -- hname = str_save(hname, APERM); -+ int fd; -+ FILE *f = NULL; -+ struct stat sb; - -- retry: -- /* we have a file and are interactive */ -- if ((fd = open(hname, O_RDWR|O_CREAT|O_APPEND, 0600)) < 0) -- return; -- -- histfd = savefd(fd); -- if (histfd != fd) -+ if ((fd = open(hname, O_RDWR | O_CREAT | O_EXLOCK, 0600)) == -1) -+ return (NULL); -+ f = fdopen(fd, "r+"); -+ if (f == NULL) { - close(fd); -+ goto bad; -+ } - -- (void) flock(histfd, LOCK_EX); -+ if (fstat(fileno(f), &sb) == -1) -+ goto bad; -+ if (timespeccmp(&sb.st_mtim, &last_sb.st_mtim, ==)) -+ *changed = 0; -+ else -+ *changed = 1; - -- hsize = lseek(histfd, 0L, SEEK_END); -+ return (f); -+bad: -+ if (f) -+ fclose(f); - -- if (hsize == 0) { -- /* add magic */ -- if (sprinkle(histfd)) { -- hist_finish(); -- return; -- } -- } -- else if (hsize > 0) { -- /* -- * we have some data -- */ -- base = (unsigned char *)mmap(0, hsize, PROT_READ, -- MAP_FILE|MAP_PRIVATE, histfd, 0); -- /* -- * check on its validity -- */ -- if (base == MAP_FAILED || *base != HMAGIC1 || base[1] != HMAGIC2) { -- if (base != MAP_FAILED) -- munmap((caddr_t)base, hsize); -- hist_finish(); -- if (unlink(hname) != 0) -- return; -- goto retry; -- } -- if (hsize > 2) { -- lines = hist_count_lines(base+2, hsize-2); -- if (lines > histsize) { -- /* we need to make the file smaller */ -- if (hist_shrink(base, hsize)) -- if (unlink(hname) != 0) -- return; -- munmap((caddr_t)base, hsize); -- hist_finish(); -- goto retry; -- } -- } -- histload(hist_source, base+2, hsize-2); -- munmap((caddr_t)base, hsize); -- } -- (void) flock(histfd, LOCK_UN); -- hsize = lseek(histfd, 0L, SEEK_END); -+ return (NULL); - } - --typedef enum state { -- shdr, /* expecting a header */ -- sline, /* looking for a null byte to end the line */ -- sn1, /* bytes 1 to 4 of a line no */ -- sn2, sn3, sn4 --} State; -+static void -+history_close(FILE *f) -+{ -+ fflush(f); -+ fstat(fileno(f), &last_sb); -+ fclose(f); -+} - - static int --hist_count_lines(unsigned char *base, int bytes) -+history_load(FILE *f, Source *s) - { -- State state = shdr; -- int lines = 0; -+ char *p, line[LINE + 1]; -+ uint32_t i; - -- while (bytes--) { -- switch (state) { -- case shdr: -- if (*base == COMMAND) -- state = sn1; -+ /* just read it all; will auto resize history upon next command */ -+ for (i = 1; ; i++) { -+ p = fgets(line, sizeof line, f); -+ if (p == NULL || feof(f) || ferror(f)) - break; -- case sn1: -- state = sn2; break; -- case sn2: -- state = sn3; break; -- case sn3: -- state = sn4; break; -- case sn4: -- state = sline; break; -- case sline: -- if (*base == '\0') -- lines++, state = shdr; -+ if ((p = strchr(line, '\n')) == NULL) { -+ bi_errorf("history file is corrupt"); -+ return (1); - } -- base++; -+ *p = '\0'; -+ -+ s->line = i; -+ s->cmd_offset = i; -+ histsave(i, (char *)line, 0); - } -- return lines; -+ -+ return (0); - } - --/* -- * Shrink the history file to histsize lines -- */ --static int --hist_shrink(unsigned char *oldbase, int oldbytes) -+void -+hist_init(Source *s) - { -- int fd; -- char nfile[1024]; -- struct stat statb; -- unsigned char *nbase = oldbase; -- int nbytes = oldbytes; -- -- nbase = hist_skip_back(nbase, &nbytes, histsize); -- if (nbase == NULL) -- return 1; -- if (nbase == oldbase) -- return 0; -- -- /* -- * create temp file -- */ -- (void) shf_snprintf(nfile, sizeof(nfile), "%s.%d", hname, procpid); -- if ((fd = open(nfile, O_CREAT | O_TRUNC | O_WRONLY, 0600)) < 0) -- return 1; -+ FILE *f = NULL; -+ int changed; - -- if (sprinkle(fd)) { -- close(fd); -- unlink(nfile); -- return 1; -- } -- if (write(fd, nbase, nbytes) != nbytes) { -- close(fd); -- unlink(nfile); -- return 1; -- } -- /* -- * worry about who owns this file -- */ -- if (fstat(histfd, &statb) >= 0) -- fchown(fd, statb.st_uid, statb.st_gid); -- close(fd); -+ if (Flag(FTALKING) == 0) -+ return; - -- /* -- * rename -- */ -- if (rename(nfile, hname) < 0) -- return 1; -- return 0; --} -+ hstarted = 1; - -+ hist_source = s; - --/* -- * find a pointer to the data `no' back from the end of the file -- * return the pointer and the number of bytes left -- */ --static unsigned char * --hist_skip_back(unsigned char *base, int *bytes, int no) --{ -- int lines = 0; -- unsigned char *ep; -+ hname = str_val(global("HISTFILE")); -+ if (hname == NULL) -+ return; -+ hname = str_save(hname, APERM); - -- for (ep = base + *bytes; --ep > base; ) { -- /* this doesn't really work: the 4 byte line number that is -- * encoded after the COMMAND byte can itself contain the -- * COMMAND byte.... -- */ -- for (; ep > base && *ep != COMMAND; ep--) -- ; -- if (ep == base) -- break; -- if (++lines == no) { -- *bytes = *bytes - ((char *)ep - (char *)base); -- return ep; -- } -- } -- return NULL; --} -+ f = history_open(&changed); -+ if (f == NULL) -+ return; - --/* -- * load the history structure from the stored data -- */ --static void --histload(Source *s, unsigned char *base, int bytes) --{ -- State state; -- int lno = 0; -- unsigned char *line = NULL; -- -- for (state = shdr; bytes-- > 0; base++) { -- switch (state) { -- case shdr: -- if (*base == COMMAND) -- state = sn1; -- break; -- case sn1: -- lno = (((*base)&0xff)<<24); -- state = sn2; -- break; -- case sn2: -- lno |= (((*base)&0xff)<<16); -- state = sn3; -- break; -- case sn3: -- lno |= (((*base)&0xff)<<8); -- state = sn4; -- break; -- case sn4: -- lno |= (*base)&0xff; -- line = base+1; -- state = sline; -- break; -- case sline: -- if (*base == '\0') { -- /* worry about line numbers */ -- if (histptr >= history && lno-1 != s->line) { -- /* a replacement ? */ -- histinsert(s, lno, line); -- } -- else { -- s->line = lno; -- s->cmd_offset = lno; -- histsave(lno, (char *)line, 0); -- } -- state = shdr; -- } -- } -- } -+ history_load(f, s); -+ history_close(f); - } - --/* -- * Insert a line into the history at a specified number -- */ - static void --histinsert(Source *s, int lno, unsigned char *line) -+writehistfile(FILE *f) - { -- char **hp; -+ int i; -+ char *cmd; - -- if (lno >= s->line-(histptr-history) && lno <= s->line) { -- hp = &histptr[lno-s->line]; -- if (*hp) -- afree((void*)*hp, APERM); -- *hp = str_save((char *)line, APERM); -- } --} -+ if (ftruncate(fileno(f), 0) == -1) -+ return; -+ rewind(f); - --/* -- * write a command to the end of the history file -- * This *MAY* seem easy but it's also necessary to check -- * that the history file has not changed in size. -- * If it has - then some other shell has written to it -- * and we should read those commands to update our history -- */ --static void --writehistfile(int lno, char *cmd) --{ -- int sizenow; -- unsigned char *base; -- unsigned char *new; -- int bytes; -- unsigned char hdr[5]; -- -- (void) flock(histfd, LOCK_EX); -- sizenow = lseek(histfd, 0L, SEEK_END); -- if (sizenow != hsize) { -- /* -- * Things have changed -- */ -- if (sizenow > hsize) { -- /* someone has added some lines */ -- bytes = sizenow - hsize; -- base = (unsigned char *)mmap(0, sizenow, -- PROT_READ, MAP_FILE|MAP_PRIVATE, histfd, 0); -- if (base == MAP_FAILED) -- goto bad; -- new = base + hsize; -- if (*new != COMMAND) { -- munmap((caddr_t)base, sizenow); -- goto bad; -- } -- hist_source->line--; -- histload(hist_source, new, bytes); -- hist_source->line++; -- lno = hist_source->line; -- munmap((caddr_t)base, sizenow); -- hsize = sizenow; -- } else { -- /* it has shrunk */ -- /* but to what? */ -- /* we'll give up for now */ -- goto bad; -- } -+ for (i = 0; i < histsize; i++) { -+ cmd = history[i]; -+ if (cmd == NULL) -+ break; -+ if (fprintf(f, "%s\n", cmd) == -1) -+ return; - } -- /* -- * we can write our bit now -- */ -- hdr[0] = COMMAND; -- hdr[1] = (lno>>24)&0xff; -- hdr[2] = (lno>>16)&0xff; -- hdr[3] = (lno>>8)&0xff; -- hdr[4] = lno&0xff; -- (void) write(histfd, hdr, 5); -- (void) write(histfd, cmd, strlen(cmd)+1); -- hsize = lseek(histfd, 0L, SEEK_END); -- (void) flock(histfd, LOCK_UN); -- return; --bad: -- hist_finish(); - } - - void - hist_finish(void) - { -- (void) flock(histfd, LOCK_UN); -- (void) close(histfd); -- histfd = 0; - } -- --/* -- * add magic to the history file -- */ --static int --sprinkle(int fd) --{ -- static unsigned char mag[] = { HMAGIC1, HMAGIC2 }; -- -- return(write(fd, mag, 2) != 2); --} -- - #else /* HISTORY */ - - /* No history to be compiled in: dummy routines to avoid lots more ifdefs */ - diff --git a/system/ksh-openbsd/patches/09-nobeep_option.diff b/system/ksh-openbsd/patches/09-nobeep_option.diff deleted file mode 100644 index d34a43d634..0000000000 --- a/system/ksh-openbsd/patches/09-nobeep_option.diff +++ /dev/null @@ -1,330 +0,0 @@ -Index: emacs.c -=================================================================== -RCS file: /cvs/src/bin/ksh/emacs.c,v -retrieving revision 1.46 -diff -p -u -r1.46 emacs.c ---- emacs.c 10 Jun 2012 10:15:01 -0000 1.46 -+++ emacs.c 26 Nov 2012 14:25:51 -0000 -@@ -399,7 +399,8 @@ x_insert(int c) - * Should allow tab and control chars. - */ - if (c == 0) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return KSTD; - } - str[0] = c; -@@ -421,7 +422,8 @@ static int - x_do_ins(const char *cp, int len) - { - if (xep+len >= xend) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return -1; - } - -@@ -477,7 +479,8 @@ x_del_back(int c) - int col = xcp - xbuf; - - if (col == 0) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return KSTD; - } - if (x_arg > col) -@@ -493,7 +496,8 @@ x_del_char(int c) - int nleft = xep - xcp; - - if (!nleft) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return KSTD; - } - if (x_arg > nleft) -@@ -592,7 +596,8 @@ x_bword(void) - char *cp = xcp; - - if (cp == xbuf) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return 0; - } - while (x_arg--) { -@@ -616,7 +621,8 @@ x_fword(void) - char *cp = xcp; - - if (cp == xep) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return 0; - } - while (x_arg--) { -@@ -706,7 +712,8 @@ x_mv_back(int c) - int col = xcp - xbuf; - - if (col == 0) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return KSTD; - } - if (x_arg > col) -@@ -721,7 +728,8 @@ x_mv_forw(int c) - int nleft = xep - xcp; - - if (!nleft) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return KSTD; - } - if (x_arg > nleft) -@@ -741,7 +749,8 @@ x_search_char_forw(int c) - if (c < 0 || - ((cp = (cp == xep) ? NULL : strchr(cp + 1, c)) == NULL && - (cp = strchr(xbuf, c)) == NULL)) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return KSTD; - } - } -@@ -760,7 +769,8 @@ x_search_char_back(int c) - if (p-- == xbuf) - p = xep; - if (c < 0 || p == cp) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return KSTD; - } - if (*p == c) -@@ -818,7 +828,8 @@ x_load_hist(char **hp) - int oldsize; - - if (hp < history || hp > histptr) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return; - } - x_histp = hp; -@@ -902,7 +913,8 @@ x_search_hist(int c) - /* add char to pattern */ - /* overflow check... */ - if (p >= &pat[sizeof(pat) - 1]) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - continue; - } - *p++ = c, *p = '\0'; -@@ -943,7 +955,8 @@ x_search(char *pat, int sameline, int of - return i; - } - } -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - x_histp = histptr; - return -1; - } -@@ -1082,11 +1095,13 @@ x_transpose(int c) - * to the one they want. - */ - if (xcp == xbuf) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return KSTD; - } else if (xcp == xep || Flag(FGMACS)) { - if (xcp - xbuf == 1) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return KSTD; - } - /* Gosling/Unipress emacs style: Swap two characters before the -@@ -1207,7 +1222,8 @@ x_abort(int c) - static int - x_error(int c) - { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return KSTD; - } - -@@ -1624,7 +1640,8 @@ x_kill_region(int c) - char *xr; - - if (xmp == NULL) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return KSTD; - } - if (xmp > xcp) { -@@ -1646,7 +1663,8 @@ x_xchg_point_mark(int c) - char *tmp; - - if (xmp == NULL) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return KSTD; - } - tmp = xmp; -@@ -1749,7 +1767,8 @@ x_expand(int c) - &start, &end, &words, &is_command); - - if (nwords == 0) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return KSTD; - } - -@@ -1758,7 +1777,8 @@ x_expand(int c) - for (i = 0; i < nwords;) { - if (x_escape(words[i], strlen(words[i]), x_emacs_putbuf) < 0 || - (++i < nwords && x_ins(space) < 0)) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return KSTD; - } - } -@@ -1782,7 +1802,8 @@ do_complete(int flags, /* XCF_{COMMAND,F - &start, &end, &words, &is_command); - /* no match */ - if (nwords == 0) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return; - } - -@@ -1947,7 +1968,8 @@ x_set_arg(int c) - for (; c >= 0 && isdigit(c); c = x_e_getc(), first = 0) - n = n * 10 + (c - '0'); - if (c < 0 || first) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - x_arg = 1; - x_arg_defaulted = 1; - } else { -@@ -1969,7 +1991,8 @@ x_comment(int c) - int ret = x_do_comment(xbuf, xend - xbuf, &len); - - if (ret < 0) -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - else { - xep = xbuf + len; - *xep = '\0'; -@@ -2005,7 +2028,8 @@ x_prev_histword(int c) - - cp = *histptr; - if (!cp) -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - else if (x_arg_defaulted) { - rcp = &cp[strlen(cp) - 1]; - /* -@@ -2082,7 +2106,8 @@ x_fold_case(int c) - char *cp = xcp; - - if (cp == xep) { -- x_e_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_e_putc(BEL); - return KSTD; - } - while (x_arg--) { -Index: misc.c -=================================================================== -RCS file: /cvs/src/bin/ksh/misc.c,v -retrieving revision 1.37 -diff -p -u -r1.37 misc.c ---- misc.c 19 Apr 2009 20:34:05 -0000 1.37 -+++ misc.c 26 Nov 2012 14:25:51 -0000 -@@ -140,6 +140,7 @@ const struct option options[] = { - #else /* JOBS */ - { (char *) 0, 'm', 0 }, /* so FMONITOR not ifdef'd */ - #endif /* JOBS */ -+ { "nobeep", 0, OF_ANY }, - { "noclobber", 'C', OF_ANY }, - { "noexec", 'n', OF_ANY }, - { "noglob", 'f', OF_ANY }, -Index: sh.h -=================================================================== -RCS file: /cvs/src/bin/ksh/sh.h,v -retrieving revision 1.31 -diff -p -u -r1.31 sh.h ---- sh.h 10 Sep 2012 01:25:30 -0000 1.31 -+++ sh.h 26 Nov 2012 14:25:51 -0000 -@@ -185,6 +185,7 @@ enum sh_flag { - FLOGIN, /* -l: a login shell */ - FMARKDIRS, /* mark dirs with / in file name completion */ - FMONITOR, /* -m: job control monitoring */ -+ FNOBEEP, /* don't beep on bell */ - FNOCLOBBER, /* -C: don't overwrite existing files */ - FNOEXEC, /* -n: don't execute any commands */ - FNOGLOB, /* -f: don't do file globbing */ -Index: vi.c -=================================================================== -RCS file: /cvs/src/bin/ksh/vi.c,v -retrieving revision 1.26 -diff -p -u -r1.26 vi.c ---- vi.c 29 Jun 2009 22:50:19 -0000 1.26 -+++ vi.c 26 Nov 2012 14:25:51 -0000 -@@ -575,7 +575,12 @@ vi_insert(int ch) - es->cbuf[es->cursor] = undo->cbuf[es->cursor]; - } else { - if (es->cursor == 0) { -- /* x_putc(BEL); no annoying bell here */ -+ /* -+ * no annoying bell here -+ * -+ if (!Flag(FNOBEEP)) -+ x_putc(BEL); -+ */ - return 0; - } - if (inslen > 0) -@@ -2105,7 +2110,8 @@ vi_error(void) - { - /* Beem out of any macros as soon as an error occurs */ - vi_macro_reset(); -- x_putc(BEL); -+ if (!Flag(FNOBEEP)) -+ x_putc(BEL); - x_flush(); - } - -Index: ksh.1 -=================================================================== -RCS file: /cvs/src/bin/ksh/ksh.1,v -retrieving revision 1.144 -diff -p -u -r1.144 ksh.1 ---- ksh.1 8 Jul 2012 08:13:20 -0000 1.144 -+++ ksh.1 26 Nov 2012 19:44:32 -0000 -@@ -3705,6 +3704,8 @@ See above for a description of what this - The shell is a login shell. - This option can only be used when the shell is invoked. - See above for a description of what this means. -+.It Ic nobeep -+Do not beep on bell. - .It Ic nohup - Do not kill running jobs with a - .Dv SIGHUP diff --git a/system/ksh-openbsd/patches/linux/Makefile.diff b/system/ksh-openbsd/patches/linux/Makefile.diff deleted file mode 100644 index bbddf41fa2..0000000000 --- a/system/ksh-openbsd/patches/linux/Makefile.diff +++ /dev/null @@ -1,50 +0,0 @@ ---- ksh-openbsd_cvs/Makefile.orig 2012-09-07 10:54:21.889840298 +0200 -+++ ksh-openbsd_cvs.new/Makefile 2012-09-07 10:54:51.915839691 +0200 -@@ -1,21 +1,36 @@ --# $OpenBSD: Makefile,v 1.28 2012/04/30 03:51:29 djm Exp $ -+ifdef ${PREFIX} -+PREFIX=${PREFIX} -+else -+PREFIX=/usr -+endif -+BINDIR=${DESTDIR}/bin -+MANDIR=${DESTDIR}${PREFIX}/man - - PROG= ksh - SRCS= alloc.c c_ksh.c c_sh.c c_test.c c_ulimit.c edit.c emacs.c eval.c \ - exec.c expr.c history.c io.c jobs.c lex.c mail.c main.c mknod.c \ - misc.c path.c shf.c syn.c table.c trap.c tree.c tty.c var.c \ -- version.c vi.c -+ version.c vi.c strlcpy.c strlcat.c -+OBJS= alloc.o c_ksh.o c_sh.o c_test.o c_ulimit.o edit.o emacs.o eval.o \ -+ exec.o expr.o history.o io.o jobs.o lex.o mail.o main.o mknod.o \ -+ misc.o path.o shf.o syn.o table.o trap.o tree.o tty.o var.o \ -+ version.o vi.o strlcpy.o strlcat.o - --DEFS= -Wall --CFLAGS+=${DEFS} -I. -I${.CURDIR} -I${.CURDIR}/../../lib/libc/gen --MAN= ksh.1 sh.1 -- --LINKS= ${BINDIR}/ksh ${BINDIR}/rksh --LINKS+= ${BINDIR}/ksh ${BINDIR}/sh --MLINKS= ksh.1 rksh.1 -+all: $(PROG) -+ -+CFLAGS+=-Wall -+$(PROG): $(OBJS) -+ gcc $(OBJS) -lbsd -o ksh -+ -+install: -+ install -m755 -d $(BINDIR) -+ install -m755 --strip --no-target-directory ksh $(BINDIR)/pdksh -+ install -m755 -d $(MANDIR)/man1 -+ install -m644 --no-target-directory ksh.1 $(MANDIR)/man1/pdksh.1 -+ -+clean: -+ rm -f $(OBJS) $(PROG) - - check test: - /usr/bin/perl ${.CURDIR}/tests/th -s ${.CURDIR}/tests -p ./ksh -C \ - pdksh,sh,ksh,posix,posix-upu -- --.include <bsd.prog.mk> diff --git a/system/ksh-openbsd/patches/linux/c_sh_c.diff b/system/ksh-openbsd/patches/linux/c_sh_c.diff deleted file mode 100644 index 09b74c7a0b..0000000000 --- a/system/ksh-openbsd/patches/linux/c_sh_c.diff +++ /dev/null @@ -1,49 +0,0 @@ ---- ksh-openbsd_cvs/c_sh.c 2010-03-27 17:25:30.000000000 +0100 -+++ ksh-openbsd_cvs.new/c_sh.c 2010-04-01 21:01:24.132137763 +0200 -@@ -837,19 +837,13 @@ c_mknod(char **wp) - { - int argc, optc, ismkfifo = 0, ret; - char **argv; -- void *set = NULL; -- mode_t mode = 0, oldmode = 0; -+ mode_t mode = 0, old_umask = -1; - - while ((optc = ksh_getopt(wp, &builtin_opt, "m:")) != -1) { - switch (optc) { - case 'm': -- set = setmode(builtin_opt.optarg); -- if (set == NULL) { -- bi_errorf("invalid file mode"); -- return 1; -- } -- mode = getmode(set, DEFFILEMODE); -- free(set); -+ old_umask = umask(0); -+ mode |= strtoul(builtin_opt.optarg, NULL, 8); - break; - default: - goto usage; -@@ -866,18 +860,17 @@ c_mknod(char **wp) - } else if (argc != 4) - goto usage; - -- if (set) -- oldmode = umask(0); -- else -- mode = DEFFILEMODE; -+ if (old_umask == -1) -+ mode |= DEFFILEMODE; - - if (ismkfifo) - ret = domkfifo(argc, argv, mode); - else - ret = domknod(argc, argv, mode); - -- if (set) -- umask(oldmode); -+ if (old_umask != -1) -+ umask(old_umask); -+ - return ret; - usage: - builtin_argv0 = NULL; diff --git a/system/ksh-openbsd/patches/linux/charclass_h.diff b/system/ksh-openbsd/patches/linux/charclass_h.diff deleted file mode 100644 index 05e7957075..0000000000 --- a/system/ksh-openbsd/patches/linux/charclass_h.diff +++ /dev/null @@ -1,36 +0,0 @@ ---- ksh-openbsd_cvs/charclass.h 1970-01-01 01:00:00.000000000 +0100 -+++ ksh-openbsd_cvs.new/charclass.h 2010-04-01 21:01:24.132137763 +0200 -@@ -0,0 +1,33 @@ -+/* -+ * Public domain, 2008, Todd C. Miller <Todd.Miller@courtesan.com> -+ * -+ * $OpenBSD: charclass.h,v 1.1 2008/10/01 23:04:13 millert Exp $ -+ */ -+ -+#include <ctype.h> -+ -+#define isblank(c) __isctype((c), _ISblank) -+ -+/* -+ * POSIX character class support for fnmatch() and glob(). -+ */ -+static struct cclass { -+ const char *name; -+ int (*isctype)(int); -+} cclasses[] = { -+ { "alnum", isalnum }, -+ { "alpha", isalpha }, -+// { "blank", isblank }, -+ { "cntrl", iscntrl }, -+ { "digit", isdigit }, -+ { "graph", isgraph }, -+ { "lower", islower }, -+ { "print", isprint }, -+ { "punct", ispunct }, -+ { "space", isspace }, -+ { "upper", isupper }, -+ { "xdigit", isxdigit }, -+ { NULL, NULL } -+}; -+ -+#define NCCLASSES (sizeof(cclasses) / sizeof(cclasses[0]) - 1) diff --git a/system/ksh-openbsd/patches/linux/emacs_c.diff b/system/ksh-openbsd/patches/linux/emacs_c.diff deleted file mode 100644 index 2618cd03db..0000000000 --- a/system/ksh-openbsd/patches/linux/emacs_c.diff +++ /dev/null @@ -1,15 +0,0 @@ ---- ksh-openbsd_cvs/emacs.c 2010-02-23 12:49:15.000000000 +0100 -+++ ksh-openbsd_cvs.new/emacs.c 2010-04-01 21:01:24.133232595 +0200 -@@ -16,10 +16,11 @@ - - #include "sh.h" - #include <sys/stat.h> --#include <sys/queue.h> -+#include <bsd/sys/queue.h> - #include <ctype.h> - #include <locale.h> - #include "edit.h" -+#include "strlcpy.h" - - static Area aedit; - #define AEDIT &aedit /* area for kill ring and macro defns */ diff --git a/system/ksh-openbsd/patches/linux/eval_c.diff b/system/ksh-openbsd/patches/linux/eval_c.diff deleted file mode 100644 index 9d580d8a63..0000000000 --- a/system/ksh-openbsd/patches/linux/eval_c.diff +++ /dev/null @@ -1,19 +0,0 @@ ---- ksh.orig/eval.c.orig 2011-03-27 14:33:38.000000000 +0200 -+++ ksh/eval.c 2011-03-27 15:08:25.986119913 +0200 -@@ -8,6 +8,7 @@ - #include <pwd.h> - #include <dirent.h> - #include <sys/stat.h> -+#include "strlcpy.h" - - /* - * string expansion -@@ -692,7 +693,7 @@ - int c; - int state; /* next state: XBASE, XARG, XSUB, XNULLSUB */ - int stype; /* substitution type */ -- int slen; -+ int slen = 0; - char *p; - struct tbl *vp; - diff --git a/system/ksh-openbsd/patches/linux/history_c.diff b/system/ksh-openbsd/patches/linux/history_c.diff deleted file mode 100644 index 04731805a9..0000000000 --- a/system/ksh-openbsd/patches/linux/history_c.diff +++ /dev/null @@ -1,46 +0,0 @@ ---- ksh-openbsd_cvs/history.c 2010-02-23 12:49:16.000000000 +0100 -+++ ksh-openbsd_cvs.new/history.c 2010-04-01 21:01:24.133232595 +0200 -@@ -17,6 +17,7 @@ - - #include "sh.h" - #include <sys/stat.h> -+#include "strlcat.h" - - #ifdef HISTORY - # include <sys/file.h> -Linux specific modifications: - - #include stdint.h for uint32_t - - #define timespeccmp() which is sys/time.h in OpenBSD - - Linux doesn't have any LOCK flags for open(2), so use flock(2) instead - ---- ksh-openbsd_cvs/history.c 2011-09-01 08:09:51.486181269 +0200 -+++ ksh-openbsd_cvs.new/history.c 2011-09-01 08:08:59.657181265 +0200 -@@ -17,11 +17,17 @@ - #include "sh.h" - #include <sys/stat.h> - #include "strlcat.h" -+#include "stdint.h" - - #ifdef HISTORY - # include <sys/file.h> - # include <sys/mman.h> - -+#define timespeccmp(tsp, usp, cmp) \ -+ (((tsp)->tv_sec == (usp)->tv_sec) ? \ -+ ((tsp)->tv_nsec cmp (usp)->tv_nsec) : \ -+ ((tsp)->tv_sec cmp (usp)->tv_sec)) -+ - static void writehistfile(FILE *); - static FILE *history_open(int *); - static int history_load(FILE *, Source *); -@@ -604,7 +610,9 @@ - FILE *f = NULL; - struct stat sb; - -- if ((fd = open(hname, O_RDWR | O_CREAT | O_EXLOCK, 0600)) == -1) -+ if ((fd = open(hname, O_RDWR | O_CREAT, 0600)) == -1) -+ return (NULL); -+ if (flock(fd, LOCK_EX) == -1) - return (NULL); - f = fdopen(fd, "r+"); - if (f == NULL) { diff --git a/system/ksh-openbsd/patches/linux/jobs_c.diff b/system/ksh-openbsd/patches/linux/jobs_c.diff deleted file mode 100644 index e50ffd3a94..0000000000 --- a/system/ksh-openbsd/patches/linux/jobs_c.diff +++ /dev/null @@ -1,22 +0,0 @@ ---- ksh-openbsd_cvs/jobs.c 2010-02-23 12:49:17.000000000 +0100 -+++ ksh-openbsd_cvs.new/jobs.c 2010-04-01 21:01:24.133232595 +0200 -@@ -21,6 +21,19 @@ - #include <sys/time.h> - #include <sys/resource.h> - #include "tty.h" -+#include "strlcpy.h" -+ -+#ifndef CHILD_MAX -+# if defined(HAVE_SYSCONF) && defined(_SC_CHILD_MAX) -+# define CHILD_MAX sysconf(_SC_CHILD_MAX) -+# else /* _SC_CHILD_MAX */ -+# ifdef _POSIX_CHILD_MAX -+# define CHILD_MAX ((_POSIX_CHILD_MAX) * 2) -+# else /* _POSIX_CHILD_MAX */ -+# define CHILD_MAX 20 -+# endif /* _POSIX_CHILD_MAX */ -+# endif /* _SC_CHILD_MAX */ -+#endif /* !CHILD_MAX */ - - /* Order important! */ - #define PRUNNING 0 diff --git a/system/ksh-openbsd/patches/linux/lex_c.diff b/system/ksh-openbsd/patches/linux/lex_c.diff deleted file mode 100644 index 40fd4234f1..0000000000 --- a/system/ksh-openbsd/patches/linux/lex_c.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- ksh-openbsd_cvs/lex.c 2010-02-23 12:49:19.000000000 +0100 -+++ ksh-openbsd_cvs.new/lex.c 2010-04-01 21:01:24.134232647 +0200 -@@ -7,6 +7,8 @@ - #include "sh.h" - #include <libgen.h> - #include <ctype.h> -+#include <time.h> -+#include "strlcpy.h" - - - /* Structure to keep track of the lexing state and the various pieces of info diff --git a/system/ksh-openbsd/patches/linux/main_c.diff b/system/ksh-openbsd/patches/linux/main_c.diff deleted file mode 100644 index a5d90620c1..0000000000 --- a/system/ksh-openbsd/patches/linux/main_c.diff +++ /dev/null @@ -1,15 +0,0 @@ ---- ksh-openbsd_cvs/main.c 2010-02-23 12:49:19.000000000 +0100 -+++ ksh-openbsd_cvs.new/main.c 2010-04-01 21:01:24.134232647 +0200 -@@ -9,7 +9,12 @@ - #include "sh.h" - #include <sys/stat.h> - #include <pwd.h> -+#include "strlcpy.h" - -+/* on Linux we do not have _PW_NAME_LEN, but libc6 allows us 32 character usernames */ -+#ifndef _PW_NAME_LEN -+# define _PW_NAME_LEN 31 -+#endif - extern char **environ; - - /* diff --git a/system/ksh-openbsd/patches/linux/misc_c.diff b/system/ksh-openbsd/patches/linux/misc_c.diff deleted file mode 100644 index 9b09fba62c..0000000000 --- a/system/ksh-openbsd/patches/linux/misc_c.diff +++ /dev/null @@ -1,12 +0,0 @@ ---- ksh-openbsd_cvs/misc.c 2010-02-23 12:49:20.000000000 +0100 -+++ ksh-openbsd_cvs.new/misc.c 2010-04-01 21:01:24.134232647 +0200 -@@ -7,7 +7,9 @@ - #include "sh.h" - #include <ctype.h> - #include <sys/param.h> /* for MAXPATHLEN */ -+#include <grp.h> - #include "charclass.h" -+#include "strlcpy.h" - - short ctypes [UCHAR_MAX+1]; /* type bits for unsigned char */ - diff --git a/system/ksh-openbsd/patches/linux/posix_signals_h.diff b/system/ksh-openbsd/patches/linux/posix_signals_h.diff deleted file mode 100644 index 2d6b8cec4d..0000000000 --- a/system/ksh-openbsd/patches/linux/posix_signals_h.diff +++ /dev/null @@ -1,128 +0,0 @@ ---- ksh-openbsd_cvs/posix_signals.h 1970-01-01 01:00:00.000000000 +0100 -+++ ksh-openbsd_cvs.new/posix_signals.h 2010-04-01 21:01:24.134232647 +0200 -@@ -0,0 +1,125 @@ -+/* -+ * Copyright (c) 1988, 1993, 1994 -+ * The Regents of the University of California. All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without -+ * modification, are permitted provided that the following conditions -+ * are met: -+ * 1. Redistributions of source code must retain the above copyright -+ * notice, this list of conditions and the following disclaimer. -+ * 2. Redistributions in binary form must reproduce the above copyright -+ * notice, this list of conditions and the following disclaimer in the -+ * documentation and/or other materials provided with the distribution. -+ * 3. All advertising materials mentioning features or use of this software -+ * must display the following acknowledgement: -+ * This product includes software developed by the University of -+ * California, Berkeley and its contributors. -+ * 4. Neither the name of the University nor the names of its contributors -+ * may be used to endorse or promote products derived from this software -+ * without specific prior written permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -+ * SUCH DAMAGE. -+ */ -+/* -+ Taken from misc-utils/kill.c in the util-linux-ng package. -+ ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/ -+ */ -+ -+#ifndef POSIX_SIGNALS_H -+#define POSIX_SIGNALS_H -+ -+struct signv { -+ char *name; -+ int val; -+} sys_signame[NSIG] = { -+ /* POSIX signals */ -+ { "HUP", SIGHUP }, /* 1 */ -+ { "INT", SIGINT }, /* 2 */ -+ { "QUIT", SIGQUIT }, /* 3 */ -+ { "ILL", SIGILL }, /* 4 */ -+ { "ABRT", SIGABRT }, /* 6 */ -+ { "FPE", SIGFPE }, /* 8 */ -+ { "KILL", SIGKILL }, /* 9 */ -+ { "SEGV", SIGSEGV }, /* 11 */ -+ { "PIPE", SIGPIPE }, /* 13 */ -+ { "ALRM", SIGALRM }, /* 14 */ -+ { "TERM", SIGTERM }, /* 15 */ -+ { "USR1", SIGUSR1 }, /* 10 (arm,i386,m68k,ppc), 30 (alpha,sparc*), 16 (mips) */ -+ { "USR2", SIGUSR2 }, /* 12 (arm,i386,m68k,ppc), 31 (alpha,sparc*), 17 (mips) */ -+ { "CHLD", SIGCHLD }, /* 17 (arm,i386,m68k,ppc), 20 (alpha,sparc*), 18 (mips) */ -+ { "CONT", SIGCONT }, /* 18 (arm,i386,m68k,ppc), 19 (alpha,sparc*), 25 (mips) */ -+ { "STOP", SIGSTOP }, /* 19 (arm,i386,m68k,ppc), 17 (alpha,sparc*), 23 (mips) */ -+ { "TSTP", SIGTSTP }, /* 20 (arm,i386,m68k,ppc), 18 (alpha,sparc*), 24 (mips) */ -+ { "TTIN", SIGTTIN }, /* 21 (arm,i386,m68k,ppc,alpha,sparc*), 26 (mips) */ -+ { "TTOU", SIGTTOU }, /* 22 (arm,i386,m68k,ppc,alpha,sparc*), 27 (mips) */ -+ /* Miscellaneous other signals */ -+#ifdef SIGTRAP -+ { "TRAP", SIGTRAP }, /* 5 */ -+#endif -+#ifdef SIGIOT -+ { "IOT", SIGIOT }, /* 6, same as SIGABRT */ -+#endif -+#ifdef SIGEMT -+ { "EMT", SIGEMT }, /* 7 (mips,alpha,sparc*) */ -+#endif -+#ifdef SIGBUS -+ { "BUS", SIGBUS }, /* 7 (arm,i386,m68k,ppc), 10 (mips,alpha,sparc*) */ -+#endif -+#ifdef SIGSYS -+ { "SYS", SIGSYS }, /* 12 (mips,alpha,sparc*) */ -+#endif -+#ifdef SIGSTKFLT -+ { "STKFLT", SIGSTKFLT }, /* 16 (arm,i386,m68k,ppc) */ -+#endif -+#ifdef SIGURG -+ { "URG", SIGURG }, /* 23 (arm,i386,m68k,ppc), 16 (alpha,sparc*), 21 (mips) */ -+#endif -+#ifdef SIGIO -+ { "IO", SIGIO }, /* 29 (arm,i386,m68k,ppc), 23 (alpha,sparc*), 22 (mips) */ -+#endif -+#ifdef SIGPOLL -+ { "POLL", SIGPOLL }, /* same as SIGIO */ -+#endif -+#ifdef SIGCLD -+ { "CLD", SIGCLD }, /* same as SIGCHLD (mips) */ -+#endif -+#ifdef SIGXCPU -+ { "XCPU", SIGXCPU }, /* 24 (arm,i386,m68k,ppc,alpha,sparc*), 30 (mips) */ -+#endif -+#ifdef SIGXFSZ -+ { "XFSZ", SIGXFSZ }, /* 25 (arm,i386,m68k,ppc,alpha,sparc*), 31 (mips) */ -+#endif -+#ifdef SIGVTALRM -+ { "VTALRM", SIGVTALRM }, /* 26 (arm,i386,m68k,ppc,alpha,sparc*), 28 (mips) */ -+#endif -+#ifdef SIGPROF -+ { "PROF", SIGPROF }, /* 27 (arm,i386,m68k,ppc,alpha,sparc*), 29 (mips) */ -+#endif -+#ifdef SIGPWR -+ { "PWR", SIGPWR }, /* 30 (arm,i386,m68k,ppc), 29 (alpha,sparc*), 19 (mips) */ -+#endif -+#ifdef SIGINFO -+ { "INFO", SIGINFO }, /* 29 (alpha) */ -+#endif -+#ifdef SIGLOST -+ { "LOST", SIGLOST }, /* 29 (arm,i386,m68k,ppc,sparc*) */ -+#endif -+#ifdef SIGWINCH -+ { "WINCH", SIGWINCH }, /* 28 (arm,i386,m68k,ppc,alpha,sparc*), 20 (mips) */ -+#endif -+#ifdef SIGUNUSED -+ { "UNUSED", SIGUNUSED }, /* 31 (arm,i386,m68k,ppc) */ -+#endif -+}; /* sys_signame[] */ -+ -+#endif /* POSIX_SIGNALS_H */ diff --git a/system/ksh-openbsd/patches/linux/sh_h.diff b/system/ksh-openbsd/patches/linux/sh_h.diff deleted file mode 100644 index df6de9c4c9..0000000000 --- a/system/ksh-openbsd/patches/linux/sh_h.diff +++ /dev/null @@ -1,10 +0,0 @@ ---- ksh-openbsd_cvs/sh.h 2010-02-23 12:49:21.000000000 +0100 -+++ ksh-openbsd_cvs.new/sh.h 2010-04-01 21:01:24.135232661 +0200 -@@ -16,6 +16,7 @@ - #include <stdbool.h> - #include <stddef.h> - #include <stdlib.h> -+#define __USE_GNU /* needed for setresuid() and setresgid() */ - #include <unistd.h> - #include <string.h> - #include <stdarg.h> diff --git a/system/ksh-openbsd/patches/linux/strlcat_c.diff b/system/ksh-openbsd/patches/linux/strlcat_c.diff deleted file mode 100644 index 1137522fcb..0000000000 --- a/system/ksh-openbsd/patches/linux/strlcat_c.diff +++ /dev/null @@ -1,65 +0,0 @@ ---- ksh-openbsd_cvs/strlcat.c 1970-01-01 01:00:00.000000000 +0100 -+++ ksh-openbsd_cvs.new/strlcat.c 2010-04-01 21:01:24.135232661 +0200 -@@ -0,0 +1,62 @@ -+/* $OpenBSD: strlcat.c,v 1.13 2005/08/08 08:05:37 espie Exp $ */ -+ -+/* -+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> -+ * -+ * Permission to use, copy, modify, and distribute this software for any -+ * purpose with or without fee is hereby granted, provided that the above -+ * copyright notice and this permission notice appear in all copies. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+/* OPENBSD ORIGINAL: lib/libc/string/strlcat.c */ -+ -+// #include "includes.h" -+#ifndef HAVE_STRLCAT -+ -+#include <sys/types.h> -+#include <string.h> -+ -+/* -+ * Appends src to string dst of size siz (unlike strncat, siz is the -+ * full size of dst, not space left). At most siz-1 characters -+ * will be copied. Always NUL terminates (unless siz <= strlen(dst)). -+ * Returns strlen(src) + MIN(siz, strlen(initial dst)). -+ * If retval >= siz, truncation occurred. -+ */ -+size_t -+strlcat(char *dst, const char *src, size_t siz) -+{ -+ char *d = dst; -+ const char *s = src; -+ size_t n = siz; -+ size_t dlen; -+ -+ /* Find the end of dst and adjust bytes left but don't go past end */ -+ while (n-- != 0 && *d != '\0') -+ d++; -+ dlen = d - dst; -+ n = siz - dlen; -+ -+ if (n == 0) -+ return(dlen + strlen(s)); -+ while (*s != '\0') { -+ if (n != 1) { -+ *d++ = *s; -+ n--; -+ } -+ s++; -+ } -+ *d = '\0'; -+ -+ return(dlen + (s - src)); /* count does not include NUL */ -+} -+ -+#endif /* !HAVE_STRLCAT */ diff --git a/system/ksh-openbsd/patches/linux/strlcat_h.diff b/system/ksh-openbsd/patches/linux/strlcat_h.diff deleted file mode 100644 index 60eb6361f7..0000000000 --- a/system/ksh-openbsd/patches/linux/strlcat_h.diff +++ /dev/null @@ -1,7 +0,0 @@ ---- ksh-openbsd_cvs/strlcat.h 1970-01-01 01:00:00.000000000 +0100 -+++ ksh-openbsd_cvs.new/strlcat.h 2010-04-01 21:01:24.135232661 +0200 -@@ -0,0 +1,4 @@ -+#ifndef STRLCAT_H -+#define STRLCAT_H -+size_t strlcat(char *, const char *, size_t); -+#endif /* STRLCAT_H */ diff --git a/system/ksh-openbsd/patches/linux/strlcpy_c.diff b/system/ksh-openbsd/patches/linux/strlcpy_c.diff deleted file mode 100644 index a08f2614bf..0000000000 --- a/system/ksh-openbsd/patches/linux/strlcpy_c.diff +++ /dev/null @@ -1,61 +0,0 @@ ---- ksh-openbsd_cvs/strlcpy.c 1970-01-01 01:00:00.000000000 +0100 -+++ ksh-openbsd_cvs.new/strlcpy.c 2010-04-01 21:01:24.145380963 +0200 -@@ -0,0 +1,58 @@ -+/* $OpenBSD: strlcpy.c,v 1.10 2005/08/08 08:05:37 espie Exp $ */ -+ -+/* -+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> -+ * -+ * Permission to use, copy, modify, and distribute this software for any -+ * purpose with or without fee is hereby granted, provided that the above -+ * copyright notice and this permission notice appear in all copies. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+/* OPENBSD ORIGINAL: lib/libc/string/strlcpy.c */ -+ -+// #include "includes.h" -+#ifndef HAVE_STRLCPY -+ -+#include <sys/types.h> -+#include <string.h> -+ -+/* -+ * Copy src to string dst of size siz. At most siz-1 characters -+ * will be copied. Always NUL terminates (unless siz == 0). -+ * Returns strlen(src); if retval >= siz, truncation occurred. -+ */ -+size_t -+strlcpy(char *dst, const char *src, size_t siz) -+{ -+ char *d = dst; -+ const char *s = src; -+ size_t n = siz; -+ -+ /* Copy as many bytes as will fit */ -+ if (n != 0 && --n != 0) { -+ do { -+ if ((*d++ = *s++) == 0) -+ break; -+ } while (--n != 0); -+ } -+ -+ /* Not enough room in dst, add NUL and traverse rest of src */ -+ if (n == 0) { -+ if (siz != 0) -+ *d = '\0'; /* NUL-terminate dst */ -+ while (*s++) -+ ; -+ } -+ -+ return(s - src - 1); /* count does not include NUL */ -+} -+ -+#endif /* !HAVE_STRLCPY */ diff --git a/system/ksh-openbsd/patches/linux/strlcpy_h.diff b/system/ksh-openbsd/patches/linux/strlcpy_h.diff deleted file mode 100644 index d9f75cd41e..0000000000 --- a/system/ksh-openbsd/patches/linux/strlcpy_h.diff +++ /dev/null @@ -1,7 +0,0 @@ ---- ksh-openbsd_cvs/strlcpy.h 1970-01-01 01:00:00.000000000 +0100 -+++ ksh-openbsd_cvs.new/strlcpy.h 2010-04-01 21:01:24.145380963 +0200 -@@ -0,0 +1,4 @@ -+#ifndef STRLCPY_H -+#define STRLCPY_H -+size_t strlcpy(char *, const char *, size_t); -+#endif /* STRLCPY_H */ diff --git a/system/ksh-openbsd/patches/linux/trap_c.diff b/system/ksh-openbsd/patches/linux/trap_c.diff deleted file mode 100644 index 10f067ff06..0000000000 --- a/system/ksh-openbsd/patches/linux/trap_c.diff +++ /dev/null @@ -1,45 +0,0 @@ ---- ksh-openbsd_cvs/trap.c 2010-02-23 12:49:23.000000000 +0100 -+++ ksh-openbsd_cvs.new/trap.c 2010-04-01 21:30:25.819238979 +0200 -@@ -5,6 +5,7 @@ - */ - - #include "sh.h" -+#include "posix_signals.h" /* sys_signame[] */ - - Trap sigtraps[NSIG + 1]; - -@@ -13,20 +14,29 @@ static struct sigaction Sigact_ign, Siga - void - inittraps(void) - { -- int i; -+ int i, j; - -- /* Populate sigtraps based on sys_signame and sys_siglist. */ -- for (i = 0; i <= NSIG; i++) { -+ /* Populate sigtraps based on posix_signals.h */ -+ for (i = 1; i < NSIG; i++) { - sigtraps[i].signal = i; - if (i == SIGERR_) { - sigtraps[i].name = "ERR"; - sigtraps[i].mess = "Error handler"; - } else { -- sigtraps[i].name = sys_signame[i]; -- sigtraps[i].mess = sys_siglist[i]; -+ for(j = 0; j < NSIG; j++) /* find the corresponding SIGNAL number's name in the sys_signame[] array */ -+ { -+ if( sys_signame[j].val == sigtraps[i].signal ) /* we got a match */ -+ { -+ sigtraps[i].name = sys_signame[j].name; -+ break; -+ } -+ } -+ sigtraps[i].mess = strsignal(sigtraps[i].signal); - } - } -+ sigtraps[SIGEXIT_].signal = SIGEXIT_; - sigtraps[SIGEXIT_].name = "EXIT"; /* our name for signal 0 */ -+ sigtraps[SIGEXIT_].mess = "Exited"; - - sigemptyset(&Sigact_ign.sa_mask); - Sigact_ign.sa_flags = 0; /* interruptible */ diff --git a/system/ksh-openbsd/patches/linux/var_c.diff b/system/ksh-openbsd/patches/linux/var_c.diff deleted file mode 100644 index 9483a3b4ce..0000000000 --- a/system/ksh-openbsd/patches/linux/var_c.diff +++ /dev/null @@ -1,53 +0,0 @@ ---- ksh-openbsd_cvs/var.c 2010-02-23 12:49:23.000000000 +0100 -+++ ksh-openbsd_cvs.new/var.c 2010-04-01 21:01:24.145380963 +0200 -@@ -5,6 +5,7 @@ - #include "ksh_limval.h" - #include <sys/stat.h> - #include <ctype.h> -+#include "strlcpy.h" - - /* - * Variables -@@ -865,12 +866,6 @@ makenv(void) - } - - /* -- * Someone has set the srand() value, therefore from now on -- * we return values from rand() instead of arc4random() -- */ --int use_rand = 0; -- --/* - * Called after a fork in parent to bump the random number generator. - * Done to ensure children will not get the same random number sequence - * if the parent doesn't use $RANDOM. -@@ -878,8 +873,7 @@ int use_rand = 0; - void - change_random(void) - { -- if (use_rand) -- rand(); -+ rand(); - } - - /* -@@ -926,10 +920,7 @@ getspec(struct tbl *vp) - break; - case V_RANDOM: - vp->flag &= ~SPECIAL; -- if (use_rand) -- setint(vp, (long) (rand() & 0x7fff)); -- else -- setint(vp, (long) (arc4random() & 0x7fff)); -+ setint(vp, (long) (rand() & 0x7fff)); - vp->flag |= SPECIAL; - break; - #ifdef HISTORY -@@ -1030,7 +1021,6 @@ setspec(struct tbl *vp) - case V_RANDOM: - vp->flag &= ~SPECIAL; - srand((unsigned int)intval(vp)); -- use_rand = 1; - vp->flag |= SPECIAL; - break; - case V_SECONDS: diff --git a/system/ksh-openbsd/patches/linux/vi_c.diff b/system/ksh-openbsd/patches/linux/vi_c.diff deleted file mode 100644 index 9372933d8e..0000000000 --- a/system/ksh-openbsd/patches/linux/vi_c.diff +++ /dev/null @@ -1,10 +0,0 @@ ---- ksh-openbsd_cvs/vi.c 2010-02-23 12:49:24.000000000 +0100 -+++ ksh-openbsd_cvs.new/vi.c 2010-04-01 21:01:24.146107949 +0200 -@@ -13,6 +13,7 @@ - #include <ctype.h> - #include <sys/stat.h> /* completion */ - #include "edit.h" -+#include "strlcpy.h" - - #define CMDLEN 2048 - #define Ctrl(c) (c&0x1f) |