Reapply removal of code from 90ties for OS/2 Cygwin AIX HPUX SCOUnix
Added missing #endif terminator in emacs.c
This commit is contained in:
parent
266bea007e
commit
eb13ce8ce3
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: c_ksh.c,v 1.22 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: c_ksh.c,v 1.23 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* built-in Korn commands: c_*
|
* built-in Korn commands: c_*
|
||||||
|
@ -6,17 +6,13 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: c_ksh.c,v 1.22 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: c_ksh.c,v 1.23 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
#include "ksh_stat.h"
|
#include "ksh_stat.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
#ifdef __CYGWIN__
|
|
||||||
#include <sys/cygwin.h>
|
|
||||||
#endif /* __CYGWIN__ */
|
|
||||||
|
|
||||||
int
|
int
|
||||||
c_cd(wp)
|
c_cd(wp)
|
||||||
char **wp;
|
char **wp;
|
||||||
|
@ -145,15 +141,7 @@ c_cd(wp)
|
||||||
setstr(oldpwd_s, current_wd, KSH_RETURN_ERROR);
|
setstr(oldpwd_s, current_wd, KSH_RETURN_ERROR);
|
||||||
|
|
||||||
if (!ISABSPATH(Xstring(xs, xp))) {
|
if (!ISABSPATH(Xstring(xs, xp))) {
|
||||||
#ifdef OS2
|
|
||||||
/* simplify_path() doesn't know about os/2's drive contexts,
|
|
||||||
* so it can't set current_wd when changing to a:foo.
|
|
||||||
* Handle this by calling getcwd()...
|
|
||||||
*/
|
|
||||||
pwd = ksh_get_wd((char *) 0, 0);
|
|
||||||
#else /* OS2 */
|
|
||||||
pwd = (char *) 0;
|
pwd = (char *) 0;
|
||||||
#endif /* OS2 */
|
|
||||||
} else
|
} else
|
||||||
#ifdef S_ISLNK
|
#ifdef S_ISLNK
|
||||||
if (!physical || !(pwd = get_phys_path(Xstring(xs, xp))))
|
if (!physical || !(pwd = get_phys_path(Xstring(xs, xp))))
|
||||||
|
@ -162,12 +150,7 @@ c_cd(wp)
|
||||||
|
|
||||||
/* Set PWD */
|
/* Set PWD */
|
||||||
if (pwd) {
|
if (pwd) {
|
||||||
#ifdef __CYGWIN__
|
|
||||||
char ptmp[PATH]; /* larger than MAX_PATH */
|
|
||||||
cygwin_conv_to_full_posix_path(pwd, ptmp);
|
|
||||||
#else /* __CYGWIN__ */
|
|
||||||
char *ptmp = pwd;
|
char *ptmp = pwd;
|
||||||
#endif /* __CYGWIN__ */
|
|
||||||
set_current_wd(ptmp);
|
set_current_wd(ptmp);
|
||||||
/* Ignore failure (happens if readonly or integer) */
|
/* Ignore failure (happens if readonly or integer) */
|
||||||
setstr(pwd_s, ptmp, KSH_RETURN_ERROR);
|
setstr(pwd_s, ptmp, KSH_RETURN_ERROR);
|
||||||
|
@ -241,7 +224,6 @@ c_print(wp)
|
||||||
#define PO_PMINUSMINUS BIT(2) /* print a -- argument */
|
#define PO_PMINUSMINUS BIT(2) /* print a -- argument */
|
||||||
#define PO_HIST BIT(3) /* print to history instead of stdout */
|
#define PO_HIST BIT(3) /* print to history instead of stdout */
|
||||||
#define PO_COPROC BIT(4) /* printing to coprocess: block SIGPIPE */
|
#define PO_COPROC BIT(4) /* printing to coprocess: block SIGPIPE */
|
||||||
#define PO_FSLASH BIT(5) /* swap slash for backslash (for os2 ) */
|
|
||||||
int fd = 1;
|
int fd = 1;
|
||||||
int flags = PO_EXPAND|PO_NL;
|
int flags = PO_EXPAND|PO_NL;
|
||||||
char *s;
|
char *s;
|
||||||
|
@ -282,11 +264,7 @@ c_print(wp)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
int optc;
|
int optc;
|
||||||
#if OS2
|
|
||||||
const char *options = "Rnpfrsu,"; /* added f flag */
|
|
||||||
#else
|
|
||||||
const char *options = "Rnprsu,";
|
const char *options = "Rnprsu,";
|
||||||
#endif
|
|
||||||
while ((optc = ksh_getopt(wp, &builtin_opt, options)) != EOF)
|
while ((optc = ksh_getopt(wp, &builtin_opt, options)) != EOF)
|
||||||
switch (optc) {
|
switch (optc) {
|
||||||
case 'R': /* fake BSD echo command */
|
case 'R': /* fake BSD echo command */
|
||||||
|
@ -297,11 +275,6 @@ c_print(wp)
|
||||||
case 'e':
|
case 'e':
|
||||||
flags |= PO_EXPAND;
|
flags |= PO_EXPAND;
|
||||||
break;
|
break;
|
||||||
#ifdef OS2
|
|
||||||
case 'f':
|
|
||||||
flags |= PO_FSLASH;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
case 'n':
|
case 'n':
|
||||||
flags &= ~PO_NL;
|
flags &= ~PO_NL;
|
||||||
break;
|
break;
|
||||||
|
@ -347,19 +320,12 @@ c_print(wp)
|
||||||
s = *wp;
|
s = *wp;
|
||||||
while ((c = *s++) != '\0') {
|
while ((c = *s++) != '\0') {
|
||||||
Xcheck(xs, xp);
|
Xcheck(xs, xp);
|
||||||
#ifdef OS2
|
|
||||||
if ((flags & PO_FSLASH) && c == '\\')
|
|
||||||
if (*s == '\\')
|
|
||||||
*s++;
|
|
||||||
else
|
|
||||||
c = '/';
|
|
||||||
#endif /* OS2 */
|
|
||||||
if ((flags & PO_EXPAND) && c == '\\') {
|
if ((flags & PO_EXPAND) && c == '\\') {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
switch ((c = *s++)) {
|
switch ((c = *s++)) {
|
||||||
/* Oddly enough, \007 seems more portable than
|
/* Oddly enough, \007 seems more portable than
|
||||||
* \a (due to HP-UX cc, Ultrix cc, old pcc's,
|
* \a (due to Ultrix cc, old pcc's,
|
||||||
* etc.).
|
* etc.).
|
||||||
*/
|
*/
|
||||||
case 'a': c = '\007'; break;
|
case 'a': c = '\007'; break;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: c_sh.c,v 1.18 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: c_sh.c,v 1.19 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* built-in Bourne commands
|
* built-in Bourne commands
|
||||||
|
@ -6,7 +6,7 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: c_sh.c,v 1.18 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: c_sh.c,v 1.19 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -331,9 +331,6 @@ c_read(wp)
|
||||||
while (1) {
|
while (1) {
|
||||||
c = shf_getc(shf);
|
c = shf_getc(shf);
|
||||||
if (c == '\0'
|
if (c == '\0'
|
||||||
#ifdef OS2
|
|
||||||
|| c == '\r'
|
|
||||||
#endif /* OS2 */
|
|
||||||
)
|
)
|
||||||
continue;
|
continue;
|
||||||
if (c == EOF && shf_error(shf)
|
if (c == EOF && shf_error(shf)
|
||||||
|
@ -905,13 +902,5 @@ const struct builtin shbuiltins [] = {
|
||||||
{"ulimit", c_ulimit},
|
{"ulimit", c_ulimit},
|
||||||
{"+umask", c_umask},
|
{"+umask", c_umask},
|
||||||
{"*=unset", c_unset},
|
{"*=unset", c_unset},
|
||||||
#ifdef OS2
|
|
||||||
/* In OS2, the first line of a file can be "extproc name", which
|
|
||||||
* tells the command interpreter (cmd.exe) to use name to execute
|
|
||||||
* the file. For this to be useful, ksh must ignore commands
|
|
||||||
* starting with extproc and this does the trick...
|
|
||||||
*/
|
|
||||||
{"extproc", c_label},
|
|
||||||
#endif /* OS2 */
|
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: c_ulimit.c,v 1.14 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: c_ulimit.c,v 1.15 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
ulimit -- handle "ulimit" builtin
|
ulimit -- handle "ulimit" builtin
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: c_ulimit.c,v 1.14 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: c_ulimit.c,v 1.15 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -113,9 +113,6 @@ c_ulimit(wp)
|
||||||
# ifdef UL_GETBREAK /* osf/1 */
|
# ifdef UL_GETBREAK /* osf/1 */
|
||||||
{ "vmemory(maxaddr)", ULIMIT, UL_GETBREAK, -1, 1, 'v' },
|
{ "vmemory(maxaddr)", ULIMIT, UL_GETBREAK, -1, 1, 'v' },
|
||||||
# else /* UL_GETBREAK */
|
# else /* UL_GETBREAK */
|
||||||
# ifdef UL_GETMAXBRK /* hpux */
|
|
||||||
{ "vmemory(maxaddr)", ULIMIT, UL_GETMAXBRK, -1, 1, 'v' },
|
|
||||||
# endif /* UL_GETMAXBRK */
|
|
||||||
# endif /* UL_GETBREAK */
|
# endif /* UL_GETBREAK */
|
||||||
# endif /* UL_GMEMLIM */
|
# endif /* UL_GMEMLIM */
|
||||||
#endif /* RLIMIT_VMEM */
|
#endif /* RLIMIT_VMEM */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: config.h,v 1.13 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: config.h,v 1.14 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/* config.h. Generated automatically by configure. */
|
/* config.h. Generated automatically by configure. */
|
||||||
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
||||||
|
@ -11,13 +11,6 @@
|
||||||
#ifndef CONFIG_H
|
#ifndef CONFIG_H
|
||||||
#define CONFIG_H
|
#define CONFIG_H
|
||||||
|
|
||||||
/* Define if on AIX 3.
|
|
||||||
System headers sometimes define this.
|
|
||||||
We just want to avoid a redefinition error message. */
|
|
||||||
#ifndef _ALL_SOURCE
|
|
||||||
/* #undef _ALL_SOURCE */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define if the closedir function returns void instead of int. */
|
/* Define if the closedir function returns void instead of int. */
|
||||||
/* #undef CLOSEDIR_VOID */
|
/* #undef CLOSEDIR_VOID */
|
||||||
|
|
||||||
|
@ -178,15 +171,9 @@
|
||||||
/* Define if the pgrp of setpgrp() can't be the pid of a zombie process */
|
/* Define if the pgrp of setpgrp() can't be the pid of a zombie process */
|
||||||
/* #undef NEED_PGRP_SYNC */
|
/* #undef NEED_PGRP_SYNC */
|
||||||
|
|
||||||
/* Define if you arg running SCO unix */
|
|
||||||
/* #undef OS_SCO */
|
|
||||||
|
|
||||||
/* Define if you arg running ISC unix */
|
/* Define if you arg running ISC unix */
|
||||||
/* #undef OS_ISC */
|
/* #undef OS_ISC */
|
||||||
|
|
||||||
/* Define if you arg running OS2 with the EMX library */
|
|
||||||
/* #undef OS2 */
|
|
||||||
|
|
||||||
/* Define if you have a POSIX.1 compatible <sys/wait.h> */
|
/* Define if you have a POSIX.1 compatible <sys/wait.h> */
|
||||||
#define POSIX_SYS_WAIT 1
|
#define POSIX_SYS_WAIT 1
|
||||||
|
|
||||||
|
@ -200,10 +187,6 @@
|
||||||
#define DEFAULT_PATH "/bin:/usr/bin:/sbin:/usr/sbin"
|
#define DEFAULT_PATH "/bin:/usr/bin:/sbin:/usr/sbin"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Define if your C library's getwd/getcwd function dumps core in unreadable
|
|
||||||
* directories. */
|
|
||||||
/* #undef HPUX_GETWD_BUG */
|
|
||||||
|
|
||||||
/* Include ksh features? */
|
/* Include ksh features? */
|
||||||
#define KSH 1
|
#define KSH 1
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: edit.c,v 1.29 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: edit.c,v 1.30 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Command line editing - common code
|
* Command line editing - common code
|
||||||
|
@ -7,7 +7,7 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: edit.c,v 1.29 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: edit.c,v 1.30 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,10 +19,6 @@ __RCSID("$NetBSD: edit.c,v 1.29 2017/06/22 14:11:27 kamil Exp $");
|
||||||
#define EXTERN
|
#define EXTERN
|
||||||
#include "edit.h"
|
#include "edit.h"
|
||||||
#undef EXTERN
|
#undef EXTERN
|
||||||
#ifdef OS_SCO /* SCO Unix 3.2v4.1 */
|
|
||||||
# include <sys/stream.h> /* needed for <sys/ptem.h> */
|
|
||||||
# include <sys/ptem.h> /* needed for struct winsize */
|
|
||||||
#endif /* OS_SCO */
|
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "ksh_stat.h"
|
#include "ksh_stat.h"
|
||||||
|
@ -161,10 +157,6 @@ x_read(buf, len)
|
||||||
int
|
int
|
||||||
x_getc()
|
x_getc()
|
||||||
{
|
{
|
||||||
#ifdef OS2
|
|
||||||
unsigned char c = _read_kbd(0, 1, 0);
|
|
||||||
return c == 0 ? 0xE0 : c;
|
|
||||||
#else /* OS2 */
|
|
||||||
char c;
|
char c;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
|
@ -177,7 +169,6 @@ x_getc()
|
||||||
if (n != 1)
|
if (n != 1)
|
||||||
return -1;
|
return -1;
|
||||||
return (int) (unsigned char) c;
|
return (int) (unsigned char) c;
|
||||||
#endif /* OS2 */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -293,11 +284,6 @@ x_mode(onoff)
|
||||||
|
|
||||||
set_tty(tty_fd, &cb, TF_WAIT);
|
set_tty(tty_fd, &cb, TF_WAIT);
|
||||||
|
|
||||||
#ifdef __CYGWIN__
|
|
||||||
if (edchars.eof == '\0')
|
|
||||||
edchars.eof = '\4';
|
|
||||||
#endif /* __CYGWIN__ */
|
|
||||||
|
|
||||||
/* Convert unset values to internal `unset' value */
|
/* Convert unset values to internal `unset' value */
|
||||||
if (edchars.erase == vdisable_c)
|
if (edchars.erase == vdisable_c)
|
||||||
edchars.erase = -1;
|
edchars.erase = -1;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: emacs.c,v 1.34 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: emacs.c,v 1.35 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Emacs-like command line editing and history
|
* Emacs-like command line editing and history
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: emacs.c,v 1.34 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: emacs.c,v 1.35 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,17 +62,8 @@ struct x_defbindings {
|
||||||
#define is_cfs(c) (c == ' ' || c == '\t' || c == '"' || c == '\'')
|
#define is_cfs(c) (c == ' ' || c == '\t' || c == '"' || c == '\'')
|
||||||
#define is_mfs(c) (!(isalnum((unsigned char)c) || c == '_' || c == '$')) /* Separator for motion */
|
#define is_mfs(c) (!(isalnum((unsigned char)c) || c == '_' || c == '$')) /* Separator for motion */
|
||||||
|
|
||||||
#ifdef OS2
|
|
||||||
/* Deal with 8 bit chars & an extra prefix for function key (these two
|
|
||||||
* changes increase memory usage from 9,216 bytes to 24,416 bytes...)
|
|
||||||
*/
|
|
||||||
# define CHARMASK 0xFF /* 8-bit ASCII character mask */
|
|
||||||
# define X_NTABS 4 /* normal, meta1, meta2, meta3 */
|
|
||||||
static int x_prefix3 = 0xE0;
|
|
||||||
#else /* OS2 */
|
|
||||||
# define CHARMASK 0xFF /* 8-bit character mask */
|
# define CHARMASK 0xFF /* 8-bit character mask */
|
||||||
# define X_NTABS 3 /* normal, meta1, meta2 */
|
# define X_NTABS 3 /* normal, meta1, meta2 */
|
||||||
#endif /* OS2 */
|
|
||||||
#define X_TABSZ (CHARMASK+1) /* size of keydef tables etc */
|
#define X_TABSZ (CHARMASK+1) /* size of keydef tables etc */
|
||||||
|
|
||||||
/* Arguments for do_complete()
|
/* Arguments for do_complete()
|
||||||
|
@ -233,10 +224,6 @@ static const struct x_ftab x_ftab[] = {
|
||||||
{ x_debug_info, "debug-info", 0 },
|
{ x_debug_info, "debug-info", 0 },
|
||||||
#else
|
#else
|
||||||
{ 0, 0, 0 },
|
{ 0, 0, 0 },
|
||||||
#endif
|
|
||||||
#ifdef OS2
|
|
||||||
{ x_meta3, "prefix-3", XF_PREFIX },
|
|
||||||
#else
|
|
||||||
{ 0, 0, 0 },
|
{ 0, 0, 0 },
|
||||||
#endif
|
#endif
|
||||||
/* @END-FUNC-TAB@ */
|
/* @END-FUNC-TAB@ */
|
||||||
|
@ -316,13 +303,6 @@ static struct x_defbindings const x_defbindings[] = {
|
||||||
{ XFUNC_fold_lower, 1, 'l' },
|
{ XFUNC_fold_lower, 1, 'l' },
|
||||||
{ XFUNC_fold_capitalize, 1, 'C' },
|
{ XFUNC_fold_capitalize, 1, 'C' },
|
||||||
{ XFUNC_fold_capitalize, 1, 'c' },
|
{ XFUNC_fold_capitalize, 1, 'c' },
|
||||||
#ifdef OS2
|
|
||||||
{ XFUNC_meta3, 0, 0xE0 },
|
|
||||||
{ XFUNC_mv_back, 3, 'K' },
|
|
||||||
{ XFUNC_mv_forw, 3, 'M' },
|
|
||||||
{ XFUNC_next_com, 3, 'P' },
|
|
||||||
{ XFUNC_prev_com, 3, 'H' },
|
|
||||||
#endif /* OS2 */
|
|
||||||
/* These for ansi arrow keys: arguablely shouldn't be here by
|
/* These for ansi arrow keys: arguablely shouldn't be here by
|
||||||
* default, but its simpler/faster/smaller than using termcap
|
* default, but its simpler/faster/smaller than using termcap
|
||||||
* entries.
|
* entries.
|
||||||
|
@ -1209,16 +1189,6 @@ x_meta2(c)
|
||||||
return KSTD;
|
return KSTD;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OS2
|
|
||||||
static int
|
|
||||||
x_meta3(c)
|
|
||||||
int c;
|
|
||||||
{
|
|
||||||
x_curprefix = 3;
|
|
||||||
return KSTD;
|
|
||||||
}
|
|
||||||
#endif /* OS2 */
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_kill(c)
|
x_kill(c)
|
||||||
int c;
|
int c;
|
||||||
|
@ -1358,11 +1328,6 @@ x_mapin(cp, area)
|
||||||
/* XXX -- should handle \^ escape? */
|
/* XXX -- should handle \^ escape? */
|
||||||
if (*cp == '^') {
|
if (*cp == '^') {
|
||||||
cp++;
|
cp++;
|
||||||
#ifdef OS2
|
|
||||||
if (*cp == '0') /* To define function keys */
|
|
||||||
*op++ = 0xE0;
|
|
||||||
else
|
|
||||||
#endif /* OS2 */
|
|
||||||
if (*cp >= '?') /* includes '?'; ASCII */
|
if (*cp >= '?') /* includes '?'; ASCII */
|
||||||
*op++ = CTRL(*cp);
|
*op++ = CTRL(*cp);
|
||||||
else {
|
else {
|
||||||
|
@ -1385,12 +1350,6 @@ x_mapout(c)
|
||||||
static char buf[8];
|
static char buf[8];
|
||||||
register char *p = buf;
|
register char *p = buf;
|
||||||
|
|
||||||
#ifdef OS2
|
|
||||||
if (c == 0xE0) {
|
|
||||||
*p++ = '^';
|
|
||||||
*p++ = '0';
|
|
||||||
} else
|
|
||||||
#endif /* OS2 */
|
|
||||||
if (iscntrl((unsigned char)c)) {
|
if (iscntrl((unsigned char)c)) {
|
||||||
*p++ = '^';
|
*p++ = '^';
|
||||||
*p++ = UNCTRL(c);
|
*p++ = UNCTRL(c);
|
||||||
|
@ -1408,10 +1367,7 @@ x_print(prefix, key)
|
||||||
shprintf("%s", x_mapout(x_prefix1));
|
shprintf("%s", x_mapout(x_prefix1));
|
||||||
if (prefix == 2)
|
if (prefix == 2)
|
||||||
shprintf("%s", x_mapout(x_prefix2));
|
shprintf("%s", x_mapout(x_prefix2));
|
||||||
#ifdef OS2
|
|
||||||
if (prefix == 3)
|
|
||||||
shprintf("%s", x_mapout(x_prefix3));
|
|
||||||
#endif /* OS2 */
|
|
||||||
shprintf("%s = ", x_mapout(key));
|
shprintf("%s = ", x_mapout(key));
|
||||||
if (x_tab[prefix][key] != XFUNC_ins_string)
|
if (x_tab[prefix][key] != XFUNC_ins_string)
|
||||||
shprintf("%s\n", x_ftab[x_tab[prefix][key]].xf_name);
|
shprintf("%s\n", x_ftab[x_tab[prefix][key]].xf_name);
|
||||||
|
@ -1464,10 +1420,6 @@ x_bind(a1, a2, macro, list)
|
||||||
prefix = 1;
|
prefix = 1;
|
||||||
else if (x_tab[prefix][key] == XFUNC_meta2)
|
else if (x_tab[prefix][key] == XFUNC_meta2)
|
||||||
prefix = 2;
|
prefix = 2;
|
||||||
#ifdef OS2
|
|
||||||
else if (x_tab[prefix][key] == XFUNC_meta3)
|
|
||||||
prefix = 3;
|
|
||||||
#endif /* OS2 */
|
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: eval.c,v 1.18 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: eval.c,v 1.19 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Expansion - quoting, separation, substitution, globbing
|
* Expansion - quoting, separation, substitution, globbing
|
||||||
|
@ -6,7 +6,7 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: eval.c,v 1.18 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: eval.c,v 1.19 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
@ -1062,15 +1062,7 @@ globit(xs, xpp, sp, wp, check)
|
||||||
*xp = '\0';
|
*xp = '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef OS2 /* Done this way to avoid bug in gcc 2.7.2... */
|
|
||||||
/* Ugly kludge required for command
|
|
||||||
* completion - see how search_access()
|
|
||||||
* is implemented for OS/2...
|
|
||||||
*/
|
|
||||||
# define KLUDGE_VAL 4
|
|
||||||
#else /* OS2 */
|
|
||||||
# define KLUDGE_VAL 0
|
# define KLUDGE_VAL 0
|
||||||
#endif /* OS2 */
|
|
||||||
XPput(*wp, str_nsave(Xstring(*xs, xp), Xlength(*xs, xp)
|
XPput(*wp, str_nsave(Xstring(*xs, xp), Xlength(*xs, xp)
|
||||||
+ KLUDGE_VAL, ATEMP));
|
+ KLUDGE_VAL, ATEMP));
|
||||||
return;
|
return;
|
||||||
|
@ -1296,10 +1288,6 @@ homedir(name)
|
||||||
|
|
||||||
ap = tenter(&homedirs, name, hash(name));
|
ap = tenter(&homedirs, name, hash(name));
|
||||||
if (!(ap->flag & ISSET)) {
|
if (!(ap->flag & ISSET)) {
|
||||||
#ifdef OS2
|
|
||||||
/* No usernames in OS2 - punt */
|
|
||||||
return NULL;
|
|
||||||
#else /* OS2 */
|
|
||||||
struct passwd *pw;
|
struct passwd *pw;
|
||||||
size_t n;
|
size_t n;
|
||||||
|
|
||||||
|
@ -1315,7 +1303,6 @@ homedir(name)
|
||||||
ap->val.s = str_save(pw->pw_dir, APERM);
|
ap->val.s = str_save(pw->pw_dir, APERM);
|
||||||
}
|
}
|
||||||
ap->flag |= DEFINED|ISSET|ALLOC;
|
ap->flag |= DEFINED|ISSET|ALLOC;
|
||||||
#endif /* OS2 */
|
|
||||||
}
|
}
|
||||||
return ap->val.s;
|
return ap->val.s;
|
||||||
}
|
}
|
||||||
|
|
150
bin/ksh/exec.c
150
bin/ksh/exec.c
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: exec.c,v 1.17 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: exec.c,v 1.18 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* execute command tree
|
* execute command tree
|
||||||
|
@ -6,7 +6,7 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: exec.c,v 1.17 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: exec.c,v 1.18 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,10 +38,6 @@ static int dbteste_eval ARGS((Test_env *, Test_op, const char *,
|
||||||
const char *, int));
|
const char *, int));
|
||||||
static void dbteste_error ARGS((Test_env *, int, const char *));
|
static void dbteste_error ARGS((Test_env *, int, const char *));
|
||||||
#endif /* KSH */
|
#endif /* KSH */
|
||||||
#ifdef OS2
|
|
||||||
static int search_access1 ARGS((const char *, int, int *));
|
|
||||||
#endif /* OS2 */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* handle systems that don't have F_SETFD
|
* handle systems that don't have F_SETFD
|
||||||
|
@ -424,8 +420,7 @@ execute(t, flags)
|
||||||
#endif
|
#endif
|
||||||
restoresigs();
|
restoresigs();
|
||||||
cleanup_proc_env();
|
cleanup_proc_env();
|
||||||
/* XINTACT bit is for OS2 */
|
ksh_execve(t->str, t->args, ap, flags);
|
||||||
ksh_execve(t->str, t->args, ap, (flags & XINTACT) ? 1 : 0);
|
|
||||||
if (errno == ENOEXEC)
|
if (errno == ENOEXEC)
|
||||||
scriptexec(t, ap);
|
scriptexec(t, ap);
|
||||||
else
|
else
|
||||||
|
@ -782,32 +777,16 @@ scriptexec(tp, ap)
|
||||||
(void) close(fd);
|
(void) close(fd);
|
||||||
}
|
}
|
||||||
if ((buf[0] == '#' && buf[1] == '!' && (cp = &buf[2]))
|
if ((buf[0] == '#' && buf[1] == '!' && (cp = &buf[2]))
|
||||||
# ifdef OS2
|
|
||||||
|| (strncmp(buf, "extproc", 7) == 0 && isspace((unsigned char)buf[7])
|
|
||||||
&& (cp = &buf[7]))
|
|
||||||
# endif /* OS2 */
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
while (*cp && (*cp == ' ' || *cp == '\t'))
|
while (*cp && (*cp == ' ' || *cp == '\t'))
|
||||||
cp++;
|
cp++;
|
||||||
if (*cp && *cp != '\n') {
|
if (*cp && *cp != '\n') {
|
||||||
char *a0 = cp, *a1 = (char *) 0;
|
char *a0 = cp, *a1 = (char *) 0;
|
||||||
# ifdef OS2
|
|
||||||
char *a2 = cp;
|
|
||||||
# endif /* OS2 */
|
|
||||||
|
|
||||||
while (*cp && *cp != '\n' && *cp != ' '
|
while (*cp && *cp != '\n' && *cp != ' '
|
||||||
&& *cp != '\t')
|
&& *cp != '\t')
|
||||||
{
|
{
|
||||||
# ifdef OS2
|
|
||||||
/* Allow shell search without prepended path
|
|
||||||
* if shell with / in pathname cannot be found.
|
|
||||||
* Use / explicitly so \ can be used if explicit
|
|
||||||
* needs to be forced.
|
|
||||||
*/
|
|
||||||
if (*cp == '/')
|
|
||||||
a2 = cp + 1;
|
|
||||||
# endif /* OS2 */
|
|
||||||
cp++;
|
cp++;
|
||||||
}
|
}
|
||||||
if (*cp && *cp != '\n') {
|
if (*cp && *cp != '\n') {
|
||||||
|
@ -826,38 +805,9 @@ scriptexec(tp, ap)
|
||||||
*cp = '\0';
|
*cp = '\0';
|
||||||
if (a1)
|
if (a1)
|
||||||
*tp->args-- = a1;
|
*tp->args-- = a1;
|
||||||
# ifdef OS2
|
|
||||||
if (a0 != a2) {
|
|
||||||
char *tmp_a0 = str_nsave(a0,
|
|
||||||
strlen(a0) + 5, ATEMP);
|
|
||||||
if (search_access(tmp_a0, X_OK,
|
|
||||||
(int *) 0))
|
|
||||||
a0 = a2;
|
|
||||||
afree(tmp_a0, ATEMP);
|
|
||||||
}
|
|
||||||
# endif /* OS2 */
|
|
||||||
shellv = a0;
|
shellv = a0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# ifdef OS2
|
|
||||||
} else {
|
|
||||||
/* Use ksh documented shell default if present
|
|
||||||
* else use OS2_SHELL which is assumed to need
|
|
||||||
* the /c option and '\' as dir separator.
|
|
||||||
*/
|
|
||||||
char *p = shellv;
|
|
||||||
|
|
||||||
shellv = str_val(global("EXECSHELL"));
|
|
||||||
if (shellv && *shellv)
|
|
||||||
shellv = search(shellv, path, X_OK, (int *) 0);
|
|
||||||
if (!shellv || !*shellv) {
|
|
||||||
shellv = p;
|
|
||||||
*tp->args-- = "/c";
|
|
||||||
for (p = tp->str; *p; p++)
|
|
||||||
if (*p == '/')
|
|
||||||
*p = '\\';
|
|
||||||
}
|
|
||||||
# endif /* OS2 */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* SHARPBANG */
|
#endif /* SHARPBANG */
|
||||||
|
@ -1116,7 +1066,6 @@ search_access(pathx, mode, errnop)
|
||||||
int mode;
|
int mode;
|
||||||
int *errnop; /* set if candidate found, but not suitable */
|
int *errnop; /* set if candidate found, but not suitable */
|
||||||
{
|
{
|
||||||
#ifndef OS2
|
|
||||||
int ret, err = 0;
|
int ret, err = 0;
|
||||||
struct stat statb;
|
struct stat statb;
|
||||||
|
|
||||||
|
@ -1136,74 +1085,8 @@ search_access(pathx, mode, errnop)
|
||||||
if (err && errnop && !*errnop)
|
if (err && errnop && !*errnop)
|
||||||
*errnop = err;
|
*errnop = err;
|
||||||
return ret;
|
return ret;
|
||||||
#else /* !OS2 */
|
|
||||||
/*
|
|
||||||
* NOTE: ASSUMES path can be modified and has enough room at the
|
|
||||||
* end of the string for a suffix (ie, 4 extra characters).
|
|
||||||
* Certain code knows this (eg, eval.c(globit()),
|
|
||||||
* exec.c(search())).
|
|
||||||
*/
|
|
||||||
static char *xsuffixes[] = { ".ksh", ".exe", ".", ".sh", ".cmd",
|
|
||||||
".com", ".bat", (char *) 0
|
|
||||||
};
|
|
||||||
static char *rsuffixes[] = { ".ksh", ".", ".sh", ".cmd", ".bat",
|
|
||||||
(char *) 0
|
|
||||||
};
|
|
||||||
int i;
|
|
||||||
char *mpath = (char *) pathx;
|
|
||||||
char *tp = mpath + strlen(mpath);
|
|
||||||
char *p;
|
|
||||||
char **sfx;
|
|
||||||
|
|
||||||
/* If a suffix has been specified, check if it is one of the
|
|
||||||
* suffixes that indicate the file is executable - if so, change
|
|
||||||
* the access test to R_OK...
|
|
||||||
* This code assumes OS/2 files can have only one suffix...
|
|
||||||
*/
|
|
||||||
if ((p = strrchr((p = ksh_strrchr_dirsep(mpath)) ? p : mpath, '.'))) {
|
|
||||||
if (mode == X_OK)
|
|
||||||
mode = R_OK;
|
|
||||||
return search_access1(mpath, mode, errnop);
|
|
||||||
}
|
|
||||||
/* Try appending the various suffixes. Different suffixes for
|
|
||||||
* read and execute 'cause we don't want to read an executable...
|
|
||||||
*/
|
|
||||||
sfx = mode == R_OK ? rsuffixes : xsuffixes;
|
|
||||||
for (i = 0; sfx[i]; i++) {
|
|
||||||
strcpy(tp, p = sfx[i]);
|
|
||||||
if (search_access1(mpath, R_OK, errnop) == 0)
|
|
||||||
return 0;
|
|
||||||
*tp = '\0';
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
#endif /* !OS2 */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OS2
|
|
||||||
static int
|
|
||||||
search_access1(pathx, mode, errnop)
|
|
||||||
const char *pathx;
|
|
||||||
int mode;
|
|
||||||
int *errnop; /* set if candidate found, but not suitable */
|
|
||||||
{
|
|
||||||
int ret, err = 0;
|
|
||||||
struct stat statb;
|
|
||||||
|
|
||||||
if (stat(pathx, &statb) < 0)
|
|
||||||
return -1;
|
|
||||||
ret = eaccess(pathx, mode);
|
|
||||||
if (ret < 0)
|
|
||||||
err = errno; /* File exists, but we can't access it */
|
|
||||||
else if (!S_ISREG(statb.st_mode)) {
|
|
||||||
ret = -1;
|
|
||||||
err = S_ISDIR(statb.st_mode) ? EISDIR : EACCES;
|
|
||||||
}
|
|
||||||
if (err && errnop && !*errnop)
|
|
||||||
*errnop = err;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
#endif /* OS2 */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* search for command with PATH
|
* search for command with PATH
|
||||||
*/
|
*/
|
||||||
|
@ -1221,25 +1104,7 @@ search(name, pathx, mode, errnop)
|
||||||
|
|
||||||
if (errnop)
|
if (errnop)
|
||||||
*errnop = 0;
|
*errnop = 0;
|
||||||
#ifdef OS2
|
|
||||||
/* Xinit() allocates 8 additional bytes, so appended suffixes won't
|
|
||||||
* overflow the memory.
|
|
||||||
*/
|
|
||||||
namelen = strlen(name) + 1;
|
|
||||||
Xinit(xs, xp, namelen, ATEMP);
|
|
||||||
memcpy(Xstring(xs, xp), name, namelen);
|
|
||||||
|
|
||||||
if (ksh_strchr_dirsep(name)) {
|
|
||||||
if (search_access(Xstring(xs, xp), mode, errnop) >= 0)
|
|
||||||
return Xstring(xs, xp); /* not Xclose() - see above */
|
|
||||||
Xfree(xs, xp);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Look in current context always. (os2 style) */
|
|
||||||
if (search_access(Xstring(xs, xp), mode, errnop) == 0)
|
|
||||||
return Xstring(xs, xp); /* not Xclose() - xp may be wrong */
|
|
||||||
#else /* OS2 */
|
|
||||||
if (ksh_strchr_dirsep(name)) {
|
if (ksh_strchr_dirsep(name)) {
|
||||||
if (search_access(name, mode, errnop) == 0)
|
if (search_access(name, mode, errnop) == 0)
|
||||||
return (char *)__UNCONST(name);
|
return (char *)__UNCONST(name);
|
||||||
|
@ -1248,7 +1113,6 @@ search(name, pathx, mode, errnop)
|
||||||
|
|
||||||
namelen = strlen(name) + 1;
|
namelen = strlen(name) + 1;
|
||||||
Xinit(xs, xp, 128, ATEMP);
|
Xinit(xs, xp, 128, ATEMP);
|
||||||
#endif /* OS2 */
|
|
||||||
|
|
||||||
sp = pathx;
|
sp = pathx;
|
||||||
while (sp != NULL) {
|
while (sp != NULL) {
|
||||||
|
@ -1265,11 +1129,7 @@ search(name, pathx, mode, errnop)
|
||||||
XcheckN(xs, xp, namelen);
|
XcheckN(xs, xp, namelen);
|
||||||
memcpy(xp, name, namelen);
|
memcpy(xp, name, namelen);
|
||||||
if (search_access(Xstring(xs, xp), mode, errnop) == 0)
|
if (search_access(Xstring(xs, xp), mode, errnop) == 0)
|
||||||
#ifdef OS2
|
|
||||||
return Xstring(xs, xp); /* Not Xclose() - see above */
|
|
||||||
#else /* OS2 */
|
|
||||||
return Xclose(xs, xp + namelen);
|
return Xclose(xs, xp + namelen);
|
||||||
#endif /* OS2 */
|
|
||||||
if (*sp++ == '\0')
|
if (*sp++ == '\0')
|
||||||
sp = NULL;
|
sp = NULL;
|
||||||
}
|
}
|
||||||
|
@ -1382,10 +1242,6 @@ iosetup(iop, tp)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
u = open(cp, flags, 0666);
|
u = open(cp, flags, 0666);
|
||||||
#ifdef OS2
|
|
||||||
if (u < 0 && strcmp(cp, "/dev/null") == 0)
|
|
||||||
u = open("nul", flags, 0666);
|
|
||||||
#endif /* OS2 */
|
|
||||||
}
|
}
|
||||||
if (u < 0) {
|
if (u < 0) {
|
||||||
/* herein() may already have printed message */
|
/* herein() may already have printed message */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: history.c,v 1.14 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: history.c,v 1.15 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* command history
|
* command history
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: history.c,v 1.14 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: history.c,v 1.15 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,11 +30,7 @@ __RCSID("$NetBSD: history.c,v 1.14 2017/06/22 14:11:27 kamil Exp $");
|
||||||
# ifdef EASY_HISTORY
|
# ifdef EASY_HISTORY
|
||||||
|
|
||||||
# ifndef HISTFILE
|
# ifndef HISTFILE
|
||||||
# ifdef OS2
|
|
||||||
# define HISTFILE "history.ksh"
|
|
||||||
# else /* OS2 */
|
|
||||||
# define HISTFILE ".pdksh_history"
|
# define HISTFILE ".pdksh_history"
|
||||||
# endif /* OS2 */
|
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
20
bin/ksh/io.c
20
bin/ksh/io.c
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: io.c,v 1.11 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: io.c,v 1.12 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* shell buffered IO and formatted output
|
* shell buffered IO and formatted output
|
||||||
|
@ -6,7 +6,7 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: io.c,v 1.11 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: io.c,v 1.12 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -370,20 +370,7 @@ check_fd(name, mode, emsgp)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
fl &= O_ACCMODE;
|
fl &= O_ACCMODE;
|
||||||
#ifdef OS2
|
|
||||||
if (mode == W_OK ) {
|
|
||||||
if (setmode(fd, O_TEXT) == -1) {
|
|
||||||
if (emsgp)
|
|
||||||
*emsgp = "couldn't set write mode";
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
} else if (mode == R_OK)
|
|
||||||
if (setmode(fd, O_BINARY) == -1) {
|
|
||||||
if (emsgp)
|
|
||||||
*emsgp = "couldn't set read mode";
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#else /* OS2 */
|
|
||||||
/* X_OK is a kludge to disable this check for dups (x<&1):
|
/* X_OK is a kludge to disable this check for dups (x<&1):
|
||||||
* historical shells never did this check (XXX don't know what
|
* historical shells never did this check (XXX don't know what
|
||||||
* posix has to say).
|
* posix has to say).
|
||||||
|
@ -398,7 +385,6 @@ check_fd(name, mode, emsgp)
|
||||||
: "fd not open for writing";
|
: "fd not open for writing";
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif /* OS2 */
|
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
#ifdef KSH
|
#ifdef KSH
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: jobs.c,v 1.12 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: jobs.c,v 1.13 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Process and job control
|
* Process and job control
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: jobs.c,v 1.12 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: jobs.c,v 1.13 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -648,10 +648,6 @@ exchild(t, flags, close_fd)
|
||||||
Flag(FMONITOR) = 0;
|
Flag(FMONITOR) = 0;
|
||||||
#endif /* JOBS */
|
#endif /* JOBS */
|
||||||
Flag(FTALKING) = 0;
|
Flag(FTALKING) = 0;
|
||||||
#ifdef OS2
|
|
||||||
if (tty_fd >= 0)
|
|
||||||
flags |= XINTACT;
|
|
||||||
#endif /* OS2 */
|
|
||||||
tty_close();
|
tty_close();
|
||||||
cleartraps();
|
cleartraps();
|
||||||
execute(t, (flags & XERROK) | XEXEC); /* no return */
|
execute(t, (flags & XERROK) | XEXEC); /* no return */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: lex.c,v 1.17 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: lex.c,v 1.18 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* lexical analysis and source input
|
* lexical analysis and source input
|
||||||
|
@ -6,7 +6,7 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: lex.c,v 1.17 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: lex.c,v 1.18 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -220,12 +220,6 @@ yylex(cf)
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case '\\':
|
case '\\':
|
||||||
c = getsc();
|
c = getsc();
|
||||||
#ifdef OS2
|
|
||||||
if (isalnum((unsigned char)c)) {
|
|
||||||
*wp++ = CHAR, *wp++ = '\\';
|
|
||||||
*wp++ = CHAR, *wp++ = c;
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
if (c) /* trailing \ is lost */
|
if (c) /* trailing \ is lost */
|
||||||
*wp++ = QCHAR, *wp++ = c;
|
*wp++ = QCHAR, *wp++ = c;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: main.c,v 1.17 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: main.c,v 1.18 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* startup, main loop, environments and error handling
|
* startup, main loop, environments and error handling
|
||||||
|
@ -7,7 +7,7 @@
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: main.c,v 1.17 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: main.c,v 1.18 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -106,11 +106,6 @@ main(int argc, char *argv[])
|
||||||
/* chmem_push("+c", 1); */
|
/* chmem_push("+c", 1); */
|
||||||
#endif /* MEM_DEBUG */
|
#endif /* MEM_DEBUG */
|
||||||
|
|
||||||
#ifdef OS2
|
|
||||||
setmode (0, O_BINARY);
|
|
||||||
setmode (1, O_TEXT);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* make sure argv[] is sane */
|
/* make sure argv[] is sane */
|
||||||
if (!*argv) {
|
if (!*argv) {
|
||||||
static const char *empty_argv[] = {
|
static const char *empty_argv[] = {
|
||||||
|
@ -303,18 +298,7 @@ main(int argc, char *argv[])
|
||||||
kshname = argv[argi++];
|
kshname = argv[argi++];
|
||||||
} else if (argi < argc && !Flag(FSTDIN)) {
|
} else if (argi < argc && !Flag(FSTDIN)) {
|
||||||
s = pushs(SFILE, ATEMP);
|
s = pushs(SFILE, ATEMP);
|
||||||
#ifdef OS2
|
|
||||||
/* a bug in os2 extproc shell processing doesn't
|
|
||||||
* pass full pathnames so we have to search for it.
|
|
||||||
* This changes the behavior of 'ksh arg' to search
|
|
||||||
* the users search path but it can't be helped.
|
|
||||||
*/
|
|
||||||
s->file = search(argv[argi++], path, R_OK, (int *) 0);
|
|
||||||
if (!s->file || !*s->file)
|
|
||||||
s->file = argv[argi - 1];
|
|
||||||
#else
|
|
||||||
s->file = argv[argi++];
|
s->file = argv[argi++];
|
||||||
#endif /* OS2 */
|
|
||||||
s->u.shf = shf_open(s->file, O_RDONLY, 0, SHF_MAPHI|SHF_CLEXEC);
|
s->u.shf = shf_open(s->file, O_RDONLY, 0, SHF_MAPHI|SHF_CLEXEC);
|
||||||
if (s->u.shf == NULL) {
|
if (s->u.shf == NULL) {
|
||||||
exstat = 127; /* POSIX */
|
exstat = 127; /* POSIX */
|
||||||
|
@ -374,27 +358,10 @@ main(int argc, char *argv[])
|
||||||
warningf(FALSE, "Cannot determine current working directory");
|
warningf(FALSE, "Cannot determine current working directory");
|
||||||
|
|
||||||
if (Flag(FLOGIN)) {
|
if (Flag(FLOGIN)) {
|
||||||
#ifdef OS2
|
|
||||||
char *profile;
|
|
||||||
|
|
||||||
/* Try to find a profile - first see if $INIT has a value,
|
|
||||||
* then try /etc/profile.ksh, then c:/usr/etc/profile.ksh.
|
|
||||||
*/
|
|
||||||
if (!Flag(FPRIVILEGED)
|
|
||||||
&& strcmp(profile = substitute("$INIT/profile.ksh", 0),
|
|
||||||
"/profile.ksh"))
|
|
||||||
include(profile, 0, (char **) 0, 1);
|
|
||||||
else if (include("/etc/profile.ksh", 0, (char **) 0, 1) < 0)
|
|
||||||
include("c:/usr/etc/profile.ksh", 0, (char **) 0, 1);
|
|
||||||
if (!Flag(FPRIVILEGED))
|
|
||||||
include(substitute("$HOME/profile.ksh", 0), 0,
|
|
||||||
(char **) 0, 1);
|
|
||||||
#else /* OS2 */
|
|
||||||
include(KSH_SYSTEM_PROFILE, 0, (char **) 0, 1);
|
include(KSH_SYSTEM_PROFILE, 0, (char **) 0, 1);
|
||||||
if (!Flag(FPRIVILEGED))
|
if (!Flag(FPRIVILEGED))
|
||||||
include(substitute("$HOME/.profile", 0), 0,
|
include(substitute("$HOME/.profile", 0), 0,
|
||||||
(char **) 0, 1);
|
(char **) 0, 1);
|
||||||
#endif /* OS2 */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Flag(FPRIVILEGED))
|
if (Flag(FPRIVILEGED))
|
||||||
|
@ -418,11 +385,9 @@ main(int argc, char *argv[])
|
||||||
env_file = substitute(env_file, DOTILDE);
|
env_file = substitute(env_file, DOTILDE);
|
||||||
if (*env_file != '\0')
|
if (*env_file != '\0')
|
||||||
include(env_file, 0, (char **) 0, 1);
|
include(env_file, 0, (char **) 0, 1);
|
||||||
#ifdef OS2
|
|
||||||
else if (Flag(FTALKING))
|
else if (Flag(FTALKING))
|
||||||
include(substitute("$HOME/kshrc.ksh", 0), 0,
|
include(substitute("$HOME/kshrc.ksh", 0), 0,
|
||||||
(char **) 0, 1);
|
(char **) 0, 1);
|
||||||
#endif /* OS2 */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_restricted(argv[0]) || is_restricted(str_val(global("SHELL"))))
|
if (is_restricted(argv[0]) || is_restricted(str_val(global("SHELL"))))
|
||||||
|
@ -804,44 +769,9 @@ static void
|
||||||
remove_temps(tp)
|
remove_temps(tp)
|
||||||
struct temp *tp;
|
struct temp *tp;
|
||||||
{
|
{
|
||||||
#ifdef OS2
|
|
||||||
static struct temp *delayed_remove;
|
|
||||||
struct temp *t, **tprev;
|
|
||||||
|
|
||||||
if (delayed_remove) {
|
|
||||||
for (tprev = &delayed_remove, t = delayed_remove; t; t = *tprev)
|
|
||||||
/* No need to check t->pid here... */
|
|
||||||
if (unlink(t->name) >= 0 || errno == ENOENT) {
|
|
||||||
*tprev = t->next;
|
|
||||||
afree(t, APERM);
|
|
||||||
} else
|
|
||||||
tprev = &t->next;
|
|
||||||
}
|
|
||||||
#endif /* OS2 */
|
|
||||||
|
|
||||||
for (; tp != NULL; tp = tp->next)
|
for (; tp != NULL; tp = tp->next)
|
||||||
if (tp->pid == procpid) {
|
if (tp->pid == procpid) {
|
||||||
#ifdef OS2
|
|
||||||
/* OS/2 (and dos) do not allow files that are currently
|
|
||||||
* open to be removed, so we cache it away for future
|
|
||||||
* removal.
|
|
||||||
* XXX should only do this if errno
|
|
||||||
* is Efile-still-open-can't-remove
|
|
||||||
* (but I don't know what that is...)
|
|
||||||
*/
|
|
||||||
if (unlink(tp->name) < 0 && errno != ENOENT) {
|
|
||||||
t = (struct temp *) alloc(
|
|
||||||
sizeof(struct temp) + strlen(tp->name) + 1,
|
|
||||||
APERM);
|
|
||||||
memset(t, 0, sizeof(struct temp));
|
|
||||||
t->name = (char *) &t[1];
|
|
||||||
strlcpy(t->name, tp->name, strlen(tp->name) + 1);
|
|
||||||
t->next = delayed_remove;
|
|
||||||
delayed_remove = t;
|
|
||||||
}
|
|
||||||
#else /* OS2 */
|
|
||||||
unlink(tp->name);
|
unlink(tp->name);
|
||||||
#endif /* OS2 */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: misc.c,v 1.20 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: misc.c,v 1.21 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Miscellaneous functions
|
* Miscellaneous functions
|
||||||
|
@ -6,7 +6,7 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: misc.c,v 1.20 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: misc.c,v 1.21 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -323,14 +323,10 @@ change_flag(f, what, newval)
|
||||||
#endif /* EDIT */
|
#endif /* EDIT */
|
||||||
/* Turning off -p? */
|
/* Turning off -p? */
|
||||||
if (f == FPRIVILEGED && oldval && !newval) {
|
if (f == FPRIVILEGED && oldval && !newval) {
|
||||||
#ifdef OS2
|
|
||||||
;
|
|
||||||
#else /* OS2 */
|
|
||||||
seteuid(ksheuid = getuid());
|
seteuid(ksheuid = getuid());
|
||||||
setuid(ksheuid);
|
setuid(ksheuid);
|
||||||
setegid(getgid());
|
setegid(getgid());
|
||||||
setgid(getgid());
|
setgid(getgid());
|
||||||
#endif /* OS2 */
|
|
||||||
} else if (f == FPOSIX && newval) {
|
} else if (f == FPOSIX && newval) {
|
||||||
#ifdef BRACE_EXPAND
|
#ifdef BRACE_EXPAND
|
||||||
Flag(FBRACEEXPAND) = 0
|
Flag(FBRACEEXPAND) = 0
|
||||||
|
@ -1288,25 +1284,6 @@ reset_nonblock(fd)
|
||||||
# define MAXPATHLEN PATH
|
# define MAXPATHLEN PATH
|
||||||
#endif /* MAXPATHLEN */
|
#endif /* MAXPATHLEN */
|
||||||
|
|
||||||
#ifdef HPUX_GETWD_BUG
|
|
||||||
# include "ksh_dir.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Work around bug in hpux 10.x C library - getwd/getcwd dump core
|
|
||||||
* if current directory is not readable. Done in macro 'cause code
|
|
||||||
* is needed in GETWD and GETCWD cases.
|
|
||||||
*/
|
|
||||||
# define HPUX_GETWD_BUG_CODE \
|
|
||||||
{ \
|
|
||||||
DIR *d = ksh_opendir("."); \
|
|
||||||
if (!d) \
|
|
||||||
return (char *) 0; \
|
|
||||||
closedir(d); \
|
|
||||||
}
|
|
||||||
#else /* HPUX_GETWD_BUG */
|
|
||||||
# define HPUX_GETWD_BUG_CODE
|
|
||||||
#endif /* HPUX_GETWD_BUG */
|
|
||||||
|
|
||||||
/* Like getcwd(), except bsize is ignored if buf is 0 (MAXPATHLEN is used) */
|
/* Like getcwd(), except bsize is ignored if buf is 0 (MAXPATHLEN is used) */
|
||||||
char *
|
char *
|
||||||
ksh_get_wd(buf, bsize)
|
ksh_get_wd(buf, bsize)
|
||||||
|
@ -1317,9 +1294,6 @@ ksh_get_wd(buf, bsize)
|
||||||
char *b;
|
char *b;
|
||||||
char *ret;
|
char *ret;
|
||||||
|
|
||||||
/* Before memory allocated */
|
|
||||||
HPUX_GETWD_BUG_CODE
|
|
||||||
|
|
||||||
/* Assume getcwd() available */
|
/* Assume getcwd() available */
|
||||||
if (!buf) {
|
if (!buf) {
|
||||||
bsize = MAXPATHLEN;
|
bsize = MAXPATHLEN;
|
||||||
|
@ -1342,9 +1316,6 @@ ksh_get_wd(buf, bsize)
|
||||||
char *b;
|
char *b;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
/* Before memory allocated */
|
|
||||||
HPUX_GETWD_BUG_CODE
|
|
||||||
|
|
||||||
if (buf && bsize > MAXPATHLEN)
|
if (buf && bsize > MAXPATHLEN)
|
||||||
b = buf;
|
b = buf;
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/* $NetBSD: path.c,v 1.11 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: path.c,v 1.12 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: path.c,v 1.11 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: path.c,v 1.12 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -130,10 +130,6 @@ simplify_path(pathx)
|
||||||
|
|
||||||
if ((isrooted = ISROOTEDPATH(pathx)))
|
if ((isrooted = ISROOTEDPATH(pathx)))
|
||||||
very_start++;
|
very_start++;
|
||||||
#if defined (OS2) || defined (__CYGWIN__)
|
|
||||||
if (pathx[0] && pathx[1] == ':') /* skip a: */
|
|
||||||
very_start += 2;
|
|
||||||
#endif /* OS2 || __CYGWIN__ */
|
|
||||||
|
|
||||||
/* Before After
|
/* Before After
|
||||||
* /foo/ /foo
|
* /foo/ /foo
|
||||||
|
@ -143,19 +139,8 @@ simplify_path(pathx)
|
||||||
* .. ..
|
* .. ..
|
||||||
* ./foo foo
|
* ./foo foo
|
||||||
* foo/../../../bar ../../bar
|
* foo/../../../bar ../../bar
|
||||||
* OS2 and CYGWIN:
|
|
||||||
* a:/foo/../.. a:/
|
|
||||||
* a:. a:
|
|
||||||
* a:.. a:..
|
|
||||||
* a:foo/../../blah a:../blah
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef __CYGWIN__
|
|
||||||
/* preserve leading double-slash on pathnames (for UNC paths) */
|
|
||||||
if (pathx[0] && ISDIRSEP(pathx[0]) && pathx[1] && ISDIRSEP(pathx[1]))
|
|
||||||
very_start++;
|
|
||||||
#endif /* __CYGWIN__ */
|
|
||||||
|
|
||||||
for (cur = t = start = very_start; ; ) {
|
for (cur = t = start = very_start; ; ) {
|
||||||
/* treat multiple '/'s as one '/' */
|
/* treat multiple '/'s as one '/' */
|
||||||
while (ISDIRSEP(*t))
|
while (ISDIRSEP(*t))
|
||||||
|
|
49
bin/ksh/sh.h
49
bin/ksh/sh.h
|
@ -1,10 +1,10 @@
|
||||||
/* $NetBSD: sh.h,v 1.11 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: sh.h,v 1.12 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Public Domain Bourne/Korn shell
|
* Public Domain Bourne/Korn shell
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: sh.h,v 1.11 2017/06/22 14:11:27 kamil Exp $ */
|
/* $Id: sh.h,v 1.12 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
#include "config.h" /* system and option configuration info */
|
#include "config.h" /* system and option configuration info */
|
||||||
|
|
||||||
|
@ -203,9 +203,6 @@ typedef RETSIGTYPE (*handler_t) ARGS((int)); /* signal handler */
|
||||||
#endif /* !HAVE_KILLPG */
|
#endif /* !HAVE_KILLPG */
|
||||||
|
|
||||||
/* Special cases for execve(2) */
|
/* Special cases for execve(2) */
|
||||||
#ifdef OS2
|
|
||||||
extern int ksh_execve(char *cmd, char **args, char **env, int flags);
|
|
||||||
#else /* OS2 */
|
|
||||||
# if defined(OS_ISC) && defined(_POSIX_SOURCE)
|
# if defined(OS_ISC) && defined(_POSIX_SOURCE)
|
||||||
/* Kludge for ISC 3.2 (and other versions?) so programs will run correctly. */
|
/* Kludge for ISC 3.2 (and other versions?) so programs will run correctly. */
|
||||||
# define ksh_execve(p, av, ev, flags) \
|
# define ksh_execve(p, av, ev, flags) \
|
||||||
|
@ -217,7 +214,6 @@ extern int ksh_execve(char *cmd, char **args, char **env, int flags);
|
||||||
# else /* OS_ISC && _POSIX */
|
# else /* OS_ISC && _POSIX */
|
||||||
# define ksh_execve(p, av, ev, flags) execve(p, av, ev)
|
# define ksh_execve(p, av, ev, flags) execve(p, av, ev)
|
||||||
# endif /* OS_ISC && _POSIX */
|
# endif /* OS_ISC && _POSIX */
|
||||||
#endif /* OS2 */
|
|
||||||
|
|
||||||
/* this is a hang-over from older versions of the os2 port */
|
/* this is a hang-over from older versions of the os2 port */
|
||||||
#define ksh_dupbase(fd, base) fcntl(fd, F_DUPFD, base)
|
#define ksh_dupbase(fd, base) fcntl(fd, F_DUPFD, base)
|
||||||
|
@ -273,19 +269,10 @@ extern int dup2 ARGS((int, int));
|
||||||
# define EXTERN_DEFINED
|
# define EXTERN_DEFINED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef OS2
|
|
||||||
# define inDOS() (!(_emx_env & 0x200))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef EXECSHELL
|
#ifndef EXECSHELL
|
||||||
/* shell to exec scripts (see also $SHELL initialization in main.c) */
|
/* shell to exec scripts (see also $SHELL initialization in main.c) */
|
||||||
# ifdef OS2
|
|
||||||
# define EXECSHELL (inDOS() ? "c:\\command.com" : "c:\\os2\\cmd.exe")
|
|
||||||
# define EXECSHELL_STR (inDOS() ? "COMSPEC" : "OS2_SHELL")
|
|
||||||
# else /* OS2 */
|
|
||||||
# define EXECSHELL "/bin/sh"
|
# define EXECSHELL "/bin/sh"
|
||||||
# define EXECSHELL_STR "EXECSHELL"
|
# define EXECSHELL_STR "EXECSHELL"
|
||||||
# endif /* OS2 */
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ISABSPATH() means path is fully and completely specified,
|
/* ISABSPATH() means path is fully and completely specified,
|
||||||
|
@ -296,48 +283,19 @@ extern int dup2 ARGS((int, int));
|
||||||
* unix /foo yes yes no
|
* unix /foo yes yes no
|
||||||
* unix foo no no yes
|
* unix foo no no yes
|
||||||
* unix ../foo no no yes
|
* unix ../foo no no yes
|
||||||
* os2+cyg a:/foo yes yes no
|
|
||||||
* os2+cyg a:foo no no no
|
|
||||||
* os2+cyg /foo no yes no
|
|
||||||
* os2+cyg foo no no yes
|
|
||||||
* os2+cyg ../foo no no yes
|
|
||||||
* cyg //foo yes yes no
|
|
||||||
*/
|
*/
|
||||||
#ifdef OS2
|
|
||||||
# define PATHSEP ';'
|
|
||||||
# define DIRSEP '/' /* even though \ is native */
|
|
||||||
# define DIRSEPSTR "\\"
|
|
||||||
# define ISDIRSEP(c) ((c) == '\\' || (c) == '/')
|
|
||||||
# define ISABSPATH(s) (((s)[0] && (s)[1] == ':' && ISDIRSEP((s)[2])))
|
|
||||||
# define ISROOTEDPATH(s) (ISDIRSEP((s)[0]) || ISABSPATH(s))
|
|
||||||
# define ISRELPATH(s) (!(s)[0] || ((s)[1] != ':' && !ISDIRSEP((s)[0])))
|
|
||||||
# define FILECHCONV(c) (isascii(c) && isupper(c) ? tolower(c) : c)
|
|
||||||
# define FILECMP(s1, s2) stricmp(s1, s2)
|
|
||||||
# define FILENCMP(s1, s2, n) strnicmp(s1, s2, n)
|
|
||||||
extern char *ksh_strchr_dirsep(const char *path);
|
|
||||||
extern char *ksh_strrchr_dirsep(const char *path);
|
|
||||||
# define chdir _chdir2
|
|
||||||
# define getcwd _getcwd2
|
|
||||||
#else
|
|
||||||
# define PATHSEP ':'
|
# define PATHSEP ':'
|
||||||
# define DIRSEP '/'
|
# define DIRSEP '/'
|
||||||
# define DIRSEPSTR "/"
|
# define DIRSEPSTR "/"
|
||||||
# define ISDIRSEP(c) ((c) == '/')
|
# define ISDIRSEP(c) ((c) == '/')
|
||||||
#ifdef __CYGWIN__
|
|
||||||
# define ISABSPATH(s) \
|
|
||||||
(((s)[0] && (s)[1] == ':' && ISDIRSEP((s)[2])) || ISDIRSEP((s)[0]))
|
|
||||||
# define ISRELPATH(s) (!(s)[0] || ((s)[1] != ':' && !ISDIRSEP((s)[0])))
|
|
||||||
#else /* __CYGWIN__ */
|
|
||||||
# define ISABSPATH(s) ISDIRSEP((s)[0])
|
# define ISABSPATH(s) ISDIRSEP((s)[0])
|
||||||
# define ISRELPATH(s) (!ISABSPATH(s))
|
# define ISRELPATH(s) (!ISABSPATH(s))
|
||||||
#endif /* __CYGWIN__ */
|
|
||||||
# define ISROOTEDPATH(s) ISABSPATH(s)
|
# define ISROOTEDPATH(s) ISABSPATH(s)
|
||||||
# define FILECHCONV(c) c
|
# define FILECHCONV(c) c
|
||||||
# define FILECMP(s1, s2) strcmp(s1, s2)
|
# define FILECMP(s1, s2) strcmp(s1, s2)
|
||||||
# define FILENCMP(s1, s2, n) strncmp(s1, s2, n)
|
# define FILENCMP(s1, s2, n) strncmp(s1, s2, n)
|
||||||
# define ksh_strchr_dirsep(p) strchr(p, DIRSEP)
|
# define ksh_strchr_dirsep(p) strchr(p, DIRSEP)
|
||||||
# define ksh_strrchr_dirsep(p) strrchr(p, DIRSEP)
|
# define ksh_strrchr_dirsep(p) strrchr(p, DIRSEP)
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef int bool_t;
|
typedef int bool_t;
|
||||||
#define FALSE 0
|
#define FALSE 0
|
||||||
|
@ -587,10 +545,7 @@ typedef struct trap {
|
||||||
EXTERN int volatile trap; /* traps pending? */
|
EXTERN int volatile trap; /* traps pending? */
|
||||||
EXTERN int volatile intrsig; /* pending trap interrupts executing command */
|
EXTERN int volatile intrsig; /* pending trap interrupts executing command */
|
||||||
EXTERN int volatile fatal_trap;/* received a fatal signal */
|
EXTERN int volatile fatal_trap;/* received a fatal signal */
|
||||||
#ifndef FROM_TRAP_C
|
|
||||||
/* Kludge to avoid bogus re-declaration of sigtraps[] error on AIX 3.2.5 */
|
|
||||||
extern Trap sigtraps[SIGNALS+1];
|
extern Trap sigtraps[SIGNALS+1];
|
||||||
#endif /* !FROM_TRAP_C */
|
|
||||||
|
|
||||||
#ifdef KSH
|
#ifdef KSH
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: shf.c,v 1.9 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: shf.c,v 1.10 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Shell file I/O routines
|
* Shell file I/O routines
|
||||||
|
@ -6,7 +6,7 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: shf.c,v 1.9 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: shf.c,v 1.10 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -577,13 +577,6 @@ shf_getse(buf, bsize, shf)
|
||||||
shf->rnleft -= ncopy;
|
shf->rnleft -= ncopy;
|
||||||
buf += ncopy;
|
buf += ncopy;
|
||||||
bsize -= ncopy;
|
bsize -= ncopy;
|
||||||
#ifdef OS2
|
|
||||||
if (end && buf > orig_buf + 1 && buf[-2] == '\r') {
|
|
||||||
buf--;
|
|
||||||
bsize++;
|
|
||||||
buf[-1] = '\n';
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} while (!end && bsize);
|
} while (!end && bsize);
|
||||||
*buf = '\0';
|
*buf = '\0';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: trap.c,v 1.10 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: trap.c,v 1.11 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* signal handling
|
* signal handling
|
||||||
|
@ -6,12 +6,9 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: trap.c,v 1.10 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: trap.c,v 1.11 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Kludge to avoid bogus re-declaration of sigtraps[] error on AIX 3.2.5 */
|
|
||||||
#define FROM_TRAP_C
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
/* Table is indexed by signal number
|
/* Table is indexed by signal number
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
/* $NetBSD: tree.h,v 1.6 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: tree.h,v 1.7 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* command trees for compile/execute
|
* command trees for compile/execute
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: tree.h,v 1.6 2017/06/22 14:11:27 kamil Exp $ */
|
/* $Id: tree.h,v 1.7 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
#define NOBLOCK ((struct op *)NULL)
|
#define NOBLOCK ((struct op *)NULL)
|
||||||
#define NOWORD ((char *)NULL)
|
#define NOWORD ((char *)NULL)
|
||||||
|
@ -110,7 +110,6 @@ struct ioword {
|
||||||
#define XERROK BIT(8) /* non-zero exit ok (for set -e) */
|
#define XERROK BIT(8) /* non-zero exit ok (for set -e) */
|
||||||
#define XCOPROC BIT(9) /* starting a co-process */
|
#define XCOPROC BIT(9) /* starting a co-process */
|
||||||
#define XTIME BIT(10) /* timing TCOM command */
|
#define XTIME BIT(10) /* timing TCOM command */
|
||||||
#define XINTACT BIT(11) /* OS2: proc started from interactive session */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* flags to control expansion of words (assumed by t->evalflags to fit
|
* flags to control expansion of words (assumed by t->evalflags to fit
|
||||||
|
|
31
bin/ksh/vi.c
31
bin/ksh/vi.c
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: vi.c,v 1.15 2017/06/22 14:11:27 kamil Exp $ */
|
/* $NetBSD: vi.c,v 1.16 2017/06/22 14:20:46 kamil Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* vi command editing
|
* vi command editing
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: vi.c,v 1.15 2017/06/22 14:11:27 kamil Exp $");
|
__RCSID("$NetBSD: vi.c,v 1.16 2017/06/22 14:20:46 kamil Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -274,32 +274,8 @@ vi_hook(ch)
|
||||||
}
|
}
|
||||||
switch (vi_insert(ch)) {
|
switch (vi_insert(ch)) {
|
||||||
case -1:
|
case -1:
|
||||||
#ifdef OS2
|
|
||||||
/* Arrow keys generate 0xe0X, where X is H.. */
|
|
||||||
state = VCMD;
|
|
||||||
argc1 = 1;
|
|
||||||
switch (x_getc()) {
|
|
||||||
case 'H':
|
|
||||||
*curcmd='k';
|
|
||||||
break;
|
|
||||||
case 'K':
|
|
||||||
*curcmd='h';
|
|
||||||
break;
|
|
||||||
case 'P':
|
|
||||||
*curcmd='j';
|
|
||||||
break;
|
|
||||||
case 'M':
|
|
||||||
*curcmd='l';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
vi_error();
|
|
||||||
state = VNORMAL;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#else /* OS2 */
|
|
||||||
vi_error();
|
vi_error();
|
||||||
state = VNORMAL;
|
state = VNORMAL;
|
||||||
#endif /* OS2 */
|
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
if (state == VLIT) {
|
if (state == VLIT) {
|
||||||
|
@ -657,9 +633,6 @@ vi_insert(ch)
|
||||||
saved_inslen = 0;
|
saved_inslen = 0;
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
|
|
||||||
#ifdef OS2
|
|
||||||
case 224: /* function key prefix */
|
|
||||||
#endif /* OS2 */
|
|
||||||
case '\0':
|
case '\0':
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue