more easy OS/2 fixes

From: KO Myung-Hun <komh@chollian.net>
This commit is contained in:
tg 2015-07-09 19:46:43 +00:00
parent 041666eefb
commit 950827394b
5 changed files with 35 additions and 9 deletions

View File

@ -1,5 +1,5 @@
#!/bin/sh #!/bin/sh
srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.684 2015/07/09 19:28:17 tg Exp $' srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.685 2015/07/09 19:46:40 tg Exp $'
#- #-
# Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
# 2011, 2012, 2013, 2014, 2015 # 2011, 2012, 2013, 2014, 2015
@ -836,6 +836,8 @@ OS/2)
check_categories="$check_categories nosymlink" check_categories="$check_categories nosymlink"
: ${CC=gcc} : ${CC=gcc}
: ${SIZE=: size} : ${SIZE=: size}
add_cppflags -DMKSH_UNEMPLOYED
add_cppflags -DMKSH_NOPROSPECTOFWORK
;; ;;
OSF1) OSF1)
HAVE_SIG_T=0 # incompatible HAVE_SIG_T=0 # incompatible

13
exec.c
View File

@ -23,7 +23,7 @@
#include "sh.h" #include "sh.h"
__RCSID("$MirOS: src/bin/mksh/exec.c,v 1.155 2015/07/06 17:48:31 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/exec.c,v 1.156 2015/07/09 19:46:41 tg Exp $");
#ifndef MKSH_DEFAULT_EXECSHELL #ifndef MKSH_DEFAULT_EXECSHELL
#define MKSH_DEFAULT_EXECSHELL "/bin/sh" #define MKSH_DEFAULT_EXECSHELL "/bin/sh"
@ -930,10 +930,15 @@ scriptexec(struct op *tp, const char **ap)
/* restore begin of shebang position (buf+0 or buf+3) */ /* restore begin of shebang position (buf+0 or buf+3) */
cp = buf + n; cp = buf + n;
/* bail out if no shebang magic found */ /* bail out if no shebang magic found */
if ((cp[0] != '#') || (cp[1] != '!')) if (cp[0] == '#' && cp[1] == '!')
goto noshebang;
cp += 2; cp += 2;
#ifdef __OS2__
else if (!strncmp(cp, Textproc, 7) &&
(cp[7] == ' ' || cp[7] == '\t'))
cp += 8;
#endif
else
goto noshebang;
/* skip whitespace before shell name */ /* skip whitespace before shell name */
while (*cp == ' ' || *cp == '\t') while (*cp == ' ' || *cp == '\t')
++cp; ++cp;

View File

@ -38,7 +38,7 @@
#endif #endif
#endif #endif
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.277 2015/07/06 17:48:32 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.278 2015/07/09 19:46:41 tg Exp $");
#if HAVE_KILLPG #if HAVE_KILLPG
/* /*
@ -160,6 +160,9 @@ const struct builtin mkshbuiltins[] = {
#ifdef __MirBSD__ #ifdef __MirBSD__
/* alias to "true" for historical reasons */ /* alias to "true" for historical reasons */
{"domainname", c_true}, {"domainname", c_true},
#endif
#ifdef __OS2__
{Textproc, c_true},
#endif #endif
{NULL, (int (*)(const char **))NULL} {NULL, (int (*)(const char **))NULL}
}; };

14
main.c
View File

@ -34,7 +34,7 @@
#include <locale.h> #include <locale.h>
#endif #endif
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.297 2015/07/09 19:28:20 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/main.c,v 1.298 2015/07/09 19:46:42 tg Exp $");
extern char **environ; extern char **environ;
@ -454,7 +454,19 @@ main_init(int argc, const char *argv[], Source **sp, struct block **lp)
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 OS/2 extproc (like shebang) handling makes
* it not pass the full pathname of a script, so we need
* to search for it. This changes the behaviour of a
* simple "mksh foo", but can't be helped.
*/
s->file = search_path(argv[argi++], path, X_OK, NULL);
if (!s->file || !*s->file)
s->file = argv[argi - 1];
#else
s->file = argv[argi++]; s->file = argv[argi++];
#endif
s->u.shf = shf_open(s->file, O_RDONLY, 0, s->u.shf = shf_open(s->file, O_RDONLY, 0,
SHF_MAPHI | SHF_CLEXEC); SHF_MAPHI | SHF_CLEXEC);
if (s->u.shf == NULL) { if (s->u.shf == NULL) {

8
sh.h
View File

@ -169,7 +169,7 @@
#endif #endif
#ifdef EXTERN #ifdef EXTERN
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.735 2015/07/09 19:28:21 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/sh.h,v 1.736 2015/07/09 19:46:43 tg Exp $");
#endif #endif
#define MKSH_VERSION "R51 2015/07/06" #define MKSH_VERSION "R51 2015/07/06"
@ -253,7 +253,8 @@ typedef MKSH_TYPEDEF_SSIZE_T ssize_t;
/* extra types */ /* extra types */
#if !HAVE_GETRUSAGE /* getrusage does not exist on OS/2 kLIBC */
#if !HAVE_GETRUSAGE && !defined(__OS2__)
#undef rusage #undef rusage
#undef RUSAGE_SELF #undef RUSAGE_SELF
#undef RUSAGE_CHILDREN #undef RUSAGE_CHILDREN
@ -829,6 +830,9 @@ EXTERN const char T_typeset[] E_INIT("=typeset");
EXTERN const char Talias[] E_INIT("alias"); EXTERN const char Talias[] E_INIT("alias");
EXTERN const char Tunalias[] E_INIT("unalias"); EXTERN const char Tunalias[] E_INIT("unalias");
EXTERN const char Tcat[] E_INIT("cat"); EXTERN const char Tcat[] E_INIT("cat");
#ifdef __OS2__
EXTERN const char Textproc[] E_INIT("extproc");
#endif
EXTERN const char Tsgset[] E_INIT("*=set"); EXTERN const char Tsgset[] E_INIT("*=set");
#define Tset (Tsgset + 2) /* "set" */ #define Tset (Tsgset + 2) /* "set" */
EXTERN const char Tsgexport[] E_INIT("*=export"); EXTERN const char Tsgexport[] E_INIT("*=export");