re-vamp __attribute__ handling; let this pass on HP-UX bundled compiler
as well as HP aCC
This commit is contained in:
80
Build.sh
80
Build.sh
@ -1,5 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.432 2009/12/12 21:17:25 tg Exp $'
|
srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.433 2009/12/12 22:27:02 tg Exp $'
|
||||||
#-
|
#-
|
||||||
# Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
# Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||||
# Thorsten Glaser <tg@mirbsd.org>
|
# Thorsten Glaser <tg@mirbsd.org>
|
||||||
@ -161,6 +161,8 @@ ac_testn() {
|
|||||||
fi
|
fi
|
||||||
test ugcc=$phase$ct && $CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN scn.c \
|
test ugcc=$phase$ct && $CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN scn.c \
|
||||||
$LIBS 2>&1 | grep 'unrecogni[sz]ed' >/dev/null 2>&1 && fv=$fr
|
$LIBS 2>&1 | grep 'unrecogni[sz]ed' >/dev/null 2>&1 && fv=$fr
|
||||||
|
test uhpcc=$phase$ct && $CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN scn.c \
|
||||||
|
$LIBS 2>&1 | grep 'unsupported' >/dev/null 2>&1 && fv=$fr
|
||||||
rm -f scn.c scn.o ${tcfn}*
|
rm -f scn.c scn.o ${tcfn}*
|
||||||
ac_testdone
|
ac_testdone
|
||||||
}
|
}
|
||||||
@ -785,7 +787,9 @@ test x"$i" = x"" && if test $ct = sunpro; then
|
|||||||
ac_flags - 1 otwo -xO2 <x
|
ac_flags - 1 otwo -xO2 <x
|
||||||
rm -f x
|
rm -f x
|
||||||
elif test $ct = hpcc; then
|
elif test $ct = hpcc; then
|
||||||
|
phase=u
|
||||||
ac_flags 1 otwo +O2
|
ac_flags 1 otwo +O2
|
||||||
|
phase=x
|
||||||
elif test $ct = xlc; then
|
elif test $ct = xlc; then
|
||||||
ac_flags 1 othree "-O3 -qstrict"
|
ac_flags 1 othree "-O3 -qstrict"
|
||||||
test 1 = $HAVE_CAN_OTHREE || ac_flags 1 otwo -O2
|
test 1 = $HAVE_CAN_OTHREE || ac_flags 1 otwo -O2
|
||||||
@ -816,8 +820,10 @@ elif test $ct = sunpro; then
|
|||||||
ac_flags 1 v -v
|
ac_flags 1 v -v
|
||||||
ac_flags 1 xc99 -xc99 'for support of ISO C99'
|
ac_flags 1 xc99 -xc99 'for support of ISO C99'
|
||||||
elif test $ct = hpcc; then
|
elif test $ct = hpcc; then
|
||||||
|
phase=u
|
||||||
ac_flags 1 agcc -Agcc 'for support of GCC extensions'
|
ac_flags 1 agcc -Agcc 'for support of GCC extensions'
|
||||||
ac_flags 1 ac99 -AC99 'for support of ISO C99'
|
ac_flags 1 ac99 -AC99 'for support of ISO C99'
|
||||||
|
phase=x
|
||||||
elif test $ct = dec; then
|
elif test $ct = dec; then
|
||||||
ac_flags 0 verb -verbose
|
ac_flags 0 verb -verbose
|
||||||
ac_flags 1 rodata -readonly_strings
|
ac_flags 1 rodata -readonly_strings
|
||||||
@ -873,7 +879,50 @@ NOWARN=$DOWARN
|
|||||||
#
|
#
|
||||||
# Compiler: check for stuff that only generates warnings
|
# Compiler: check for stuff that only generates warnings
|
||||||
#
|
#
|
||||||
ac_test attribute '' 'for basic __attribute__((...)) support' <<-'EOF'
|
ac_test attribute_bounded '' 'for __attribute__((bounded))' <<-'EOF'
|
||||||
|
#if defined(__GNUC__) && (__GNUC__ < 2)
|
||||||
|
/* force a failure: gcc 1.42 has a false positive here */
|
||||||
|
int main(void) { return (thiswillneverbedefinedIhope()); }
|
||||||
|
#else
|
||||||
|
#include <string.h>
|
||||||
|
#undef __attribute__
|
||||||
|
int xcopy(const void *, void *, size_t)
|
||||||
|
__attribute__((bounded (buffer, 1, 3)))
|
||||||
|
__attribute__((bounded (buffer, 2, 3)));
|
||||||
|
int main(int ac, char *av[]) { return (xcopy(av[0], av[--ac], 1)); }
|
||||||
|
int xcopy(const void *s, void *d, size_t n) {
|
||||||
|
memmove(d, s, n); return ((int)n);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
EOF
|
||||||
|
ac_test attribute_format '' 'for __attribute__((format))' <<-'EOF'
|
||||||
|
#if defined(__GNUC__) && (__GNUC__ < 2)
|
||||||
|
/* force a failure: gcc 1.42 has a false positive here */
|
||||||
|
int main(void) { return (thiswillneverbedefinedIhope()); }
|
||||||
|
#else
|
||||||
|
#include <stdio.h>
|
||||||
|
#undef __attribute__
|
||||||
|
#undef printf
|
||||||
|
extern int printf(const char *format, ...)
|
||||||
|
__attribute__((format (printf, 1, 2)));
|
||||||
|
int main(int ac, char **av) { return (printf("%s%d", *av, ac)); }
|
||||||
|
#endif
|
||||||
|
EOF
|
||||||
|
ac_test attribute_nonnull '' 'for __attribute__((nonnull))' <<-'EOF'
|
||||||
|
#if defined(__GNUC__) && (__GNUC__ < 2)
|
||||||
|
/* force a failure: gcc 1.42 has a false positive here */
|
||||||
|
int main(void) { return (thiswillneverbedefinedIhope()); }
|
||||||
|
#else
|
||||||
|
int foo(char *s1, char *s2) __attribute__((nonnull));
|
||||||
|
int bar(char *s1, char *s2) __attribute__((nonnull (1, 2)));
|
||||||
|
int baz(char *s) __attribute__((nonnull (1)));
|
||||||
|
int foo(char *s1, char *s2) { return (bar(s2, s1)); }
|
||||||
|
int bar(char *s1, char *s2) { return (baz(s1) - baz(s2)); }
|
||||||
|
int baz(char *s) { return (*s); }
|
||||||
|
int main(int ac, char **av) { return (ac == foo(av[0], av[ac-1])); }
|
||||||
|
#endif
|
||||||
|
EOF
|
||||||
|
ac_test attribute_noreturn '' 'for __attribute__((noreturn))' <<-'EOF'
|
||||||
#if defined(__GNUC__) && (__GNUC__ < 2)
|
#if defined(__GNUC__) && (__GNUC__ < 2)
|
||||||
/* force a failure: gcc 1.42 has a false positive here */
|
/* force a failure: gcc 1.42 has a false positive here */
|
||||||
int main(void) { return (thiswillneverbedefinedIhope()); }
|
int main(void) { return (thiswillneverbedefinedIhope()); }
|
||||||
@ -885,22 +934,23 @@ ac_test attribute '' 'for basic __attribute__((...)) support' <<-'EOF'
|
|||||||
void fnord(void) { exit(0); }
|
void fnord(void) { exit(0); }
|
||||||
#endif
|
#endif
|
||||||
EOF
|
EOF
|
||||||
|
ac_test attribute_unused '' 'for __attribute__((unused))' <<-'EOF'
|
||||||
ac_test attribute_bounded attribute 0 'for __attribute__((bounded))' <<-'EOF'
|
#if defined(__GNUC__) && (__GNUC__ < 2)
|
||||||
#include <string.h>
|
/* force a failure: gcc 1.42 has a false positive here */
|
||||||
#undef __attribute__
|
int main(void) { return (thiswillneverbedefinedIhope()); }
|
||||||
int xcopy(const void *, void *, size_t)
|
#else
|
||||||
__attribute__((bounded (buffer, 1, 3)))
|
int main(int ac __attribute__((unused)), char **av
|
||||||
__attribute__((bounded (buffer, 2, 3)));
|
__attribute__((unused))) { return (0); }
|
||||||
int main(int ac, char *av[]) { return (xcopy(av[0], av[--ac], 1)); }
|
#endif
|
||||||
int xcopy(const void *s, void *d, size_t n) {
|
|
||||||
memmove(d, s, n); return ((int)n);
|
|
||||||
}
|
|
||||||
EOF
|
EOF
|
||||||
|
ac_test attribute_used '' 'for __attribute__((used))' <<-'EOF'
|
||||||
ac_test attribute_used attribute 0 'for __attribute__((used))' <<-'EOF'
|
#if defined(__GNUC__) && (__GNUC__ < 2)
|
||||||
|
/* force a failure: gcc 1.42 has a false positive here */
|
||||||
|
int main(void) { return (thiswillneverbedefinedIhope()); }
|
||||||
|
#else
|
||||||
static const char fnord[] __attribute__((used)) = "42";
|
static const char fnord[] __attribute__((used)) = "42";
|
||||||
int main(void) { return (0); }
|
int main(void) { return (0); }
|
||||||
|
#endif
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# End of tests run with -Werror
|
# End of tests run with -Werror
|
||||||
|
18
Makefile
18
Makefile
@ -1,4 +1,4 @@
|
|||||||
# $MirOS: src/bin/mksh/Makefile,v 1.78 2009/08/27 16:52:12 tg Exp $
|
# $MirOS: src/bin/mksh/Makefile,v 1.79 2009/12/12 22:27:03 tg Exp $
|
||||||
#-
|
#-
|
||||||
# Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
# Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||||
# Thorsten Glaser <tg@mirbsd.org>
|
# Thorsten Glaser <tg@mirbsd.org>
|
||||||
@ -27,9 +27,10 @@ SRCS= edit.c eval.c exec.c expr.c funcs.c histrap.c jobs.c \
|
|||||||
lalloc.c lex.c main.c misc.c shf.c syn.c tree.c var.c
|
lalloc.c lex.c main.c misc.c shf.c syn.c tree.c var.c
|
||||||
.if !make(test-build)
|
.if !make(test-build)
|
||||||
CPPFLAGS+= -DMKSH_ASSUME_UTF8 \
|
CPPFLAGS+= -DMKSH_ASSUME_UTF8 \
|
||||||
-DHAVE_ATTRIBUTE=1 -DHAVE_ATTRIBUTE_BOUNDED=1 \
|
-DHAVE_ATTRIBUTE_BOUNDED=1 -DHAVE_ATTRIBUTE_FORMAT=1 \
|
||||||
-DHAVE_ATTRIBUTE_USED=1 -DHAVE_SYS_PARAM_H=1 \
|
-DHAVE_ATTRIBUTE_NONNULL=1 -DHAVE_ATTRIBUTE_NORETURN=1 \
|
||||||
-DHAVE_SYS_MKDEV_H=0 -DHAVE_SYS_MMAN_H=1 \
|
-DHAVE_ATTRIBUTE_UNUSED=1 -DHAVE_ATTRIBUTE_USED=1 \
|
||||||
|
-DHAVE_SYS_PARAM_H=1 -DHAVE_SYS_MKDEV_H=0 -DHAVE_SYS_MMAN_H=1 \
|
||||||
-DHAVE_SYS_SYSMACROS_H=0 -DHAVE_LIBGEN_H=1 -DHAVE_LIBUTIL_H=0 \
|
-DHAVE_SYS_SYSMACROS_H=0 -DHAVE_LIBGEN_H=1 -DHAVE_LIBUTIL_H=0 \
|
||||||
-DHAVE_PATHS_H=1 -DHAVE_STDBOOL_H=1 -DHAVE_STRINGS_H=1 \
|
-DHAVE_PATHS_H=1 -DHAVE_STDBOOL_H=1 -DHAVE_STRINGS_H=1 \
|
||||||
-DHAVE_GRP_H=1 -DHAVE_ULIMIT_H=0 -DHAVE_VALUES_H=0 \
|
-DHAVE_GRP_H=1 -DHAVE_ULIMIT_H=0 -DHAVE_VALUES_H=0 \
|
||||||
@ -37,11 +38,10 @@ CPPFLAGS+= -DMKSH_ASSUME_UTF8 \
|
|||||||
-DHAVE_SYS_SIGNAME=1 -DHAVE_SYS_SIGLIST=1 -DHAVE_STRSIGNAL=0 \
|
-DHAVE_SYS_SIGNAME=1 -DHAVE_SYS_SIGLIST=1 -DHAVE_STRSIGNAL=0 \
|
||||||
-DHAVE_ARC4RANDOM=1 -DHAVE_ARC4RANDOM_PUSHB=1 \
|
-DHAVE_ARC4RANDOM=1 -DHAVE_ARC4RANDOM_PUSHB=1 \
|
||||||
-DHAVE_GETRUSAGE=1 -DHAVE_KILLPG=1 -DHAVE_MKNOD=1 \
|
-DHAVE_GETRUSAGE=1 -DHAVE_KILLPG=1 -DHAVE_MKNOD=1 \
|
||||||
-DHAVE_MKSTEMP=1 -DHAVE_NICE=1 -DHAVE_REALPATH=1 \
|
-DHAVE_MKSTEMP=1 -DHAVE_NICE=1 -DHAVE_REVOKE=1 \
|
||||||
-DHAVE_REVOKE=1 -DHAVE_SETLOCALE_CTYPE=0 \
|
-DHAVE_SETLOCALE_CTYPE=0 -DHAVE_LANGINFO_CODESET=0 \
|
||||||
-DHAVE_LANGINFO_CODESET=0 -DHAVE_SETMODE=1 \
|
-DHAVE_SETMODE=1 -DHAVE_SETRESUGID=1 -DHAVE_SETGROUPS=1 \
|
||||||
-DHAVE_SETRESUGID=1 -DHAVE_SETGROUPS=1 -DHAVE_STRCASESTR=1 \
|
-DHAVE_STRCASESTR=1 -DHAVE_STRLCPY=1 -DHAVE_ARC4RANDOM_DECL=1 \
|
||||||
-DHAVE_STRLCPY=1 -DHAVE_ARC4RANDOM_DECL=1 \
|
|
||||||
-DHAVE_ARC4RANDOM_PUSHB_DECL=1 -DHAVE_FLOCK_DECL=1 \
|
-DHAVE_ARC4RANDOM_PUSHB_DECL=1 -DHAVE_FLOCK_DECL=1 \
|
||||||
-DHAVE_REVOKE_DECL=1 -DHAVE_SYS_SIGLIST_DECL=1 \
|
-DHAVE_REVOKE_DECL=1 -DHAVE_SYS_SIGLIST_DECL=1 \
|
||||||
-DHAVE_PERSISTENT_HISTORY=1
|
-DHAVE_PERSISTENT_HISTORY=1
|
||||||
|
4
check.t
4
check.t
@ -1,4 +1,4 @@
|
|||||||
# $MirOS: src/bin/mksh/check.t,v 1.348 2009/12/05 17:43:43 tg Exp $
|
# $MirOS: src/bin/mksh/check.t,v 1.349 2009/12/12 22:27:03 tg Exp $
|
||||||
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
|
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
|
||||||
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
|
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
|
||||||
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
||||||
@ -25,7 +25,7 @@
|
|||||||
# http://www.research.att.com/~gsf/public/ifs.sh
|
# http://www.research.att.com/~gsf/public/ifs.sh
|
||||||
|
|
||||||
expected-stdout:
|
expected-stdout:
|
||||||
@(#)MIRBSD KSH R39 2009/12/05
|
@(#)MIRBSD KSH R39 2009/12/12
|
||||||
description:
|
description:
|
||||||
Check version of shell.
|
Check version of shell.
|
||||||
stdin:
|
stdin:
|
||||||
|
128
edit.c
128
edit.c
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.186 2009/12/05 22:19:41 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.187 2009/12/12 22:27:05 tg Exp $");
|
||||||
|
|
||||||
/* tty driver characters we are interested in */
|
/* tty driver characters we are interested in */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -71,16 +71,16 @@ static int x_vi(char *, size_t);
|
|||||||
|
|
||||||
static int path_order_cmp(const void *aa, const void *bb);
|
static int path_order_cmp(const void *aa, const void *bb);
|
||||||
static char *add_glob(const char *, int)
|
static char *add_glob(const char *, int)
|
||||||
__attribute__((nonnull (1)))
|
MKSH_A_NONNULL((nonnull (1)))
|
||||||
__bound_att__((bounded (string, 1, 2)));
|
MKSH_A_BOUNDED(string, 1, 2);
|
||||||
static void glob_table(const char *, XPtrV *, struct table *);
|
static void glob_table(const char *, XPtrV *, struct table *);
|
||||||
static void glob_path(int flags, const char *, XPtrV *, const char *);
|
static void glob_path(int flags, const char *, XPtrV *, const char *);
|
||||||
static int x_file_glob(int, const char *, int, char ***)
|
static int x_file_glob(int, const char *, int, char ***)
|
||||||
__attribute__((nonnull (2)))
|
MKSH_A_NONNULL((nonnull (2)))
|
||||||
__bound_att__((bounded (string, 2, 3)));
|
MKSH_A_BOUNDED(string, 2, 3);
|
||||||
static int x_command_glob(int, const char *, int, char ***)
|
static int x_command_glob(int, const char *, int, char ***)
|
||||||
__attribute__((nonnull (2)))
|
MKSH_A_NONNULL((nonnull (2)))
|
||||||
__bound_att__((bounded (string, 2, 3)));
|
MKSH_A_BOUNDED(string, 2, 3);
|
||||||
static int x_locate_word(const char *, int, int, int *, bool *);
|
static int x_locate_word(const char *, int, int, int *, bool *);
|
||||||
|
|
||||||
static int x_e_getmbc(char *);
|
static int x_e_getmbc(char *);
|
||||||
@ -254,7 +254,7 @@ x_print_expansions(int nwords, char * const *words, bool is_command)
|
|||||||
* - returns number of matching strings
|
* - returns number of matching strings
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
x_file_glob(int flags __unused, const char *str, int slen, char ***wordsp)
|
x_file_glob(int flags MKSH_A_UNUSED, const char *str, int slen, char ***wordsp)
|
||||||
{
|
{
|
||||||
char *toglob, **words;
|
char *toglob, **words;
|
||||||
int nwords, i, idx;
|
int nwords, i, idx;
|
||||||
@ -861,12 +861,12 @@ int x_bind(const char *, const char *, bool, bool)
|
|||||||
#else
|
#else
|
||||||
int x_bind(const char *, const char *, bool)
|
int x_bind(const char *, const char *, bool)
|
||||||
#endif
|
#endif
|
||||||
__attribute__((nonnull (1, 2)));
|
MKSH_A_NONNULL((nonnull (1, 2)));
|
||||||
static int x_match(char *, char *);
|
static int x_match(char *, char *);
|
||||||
static void x_redraw(int);
|
static void x_redraw(int);
|
||||||
static void x_push(int);
|
static void x_push(int);
|
||||||
static char *x_mapin(const char *, Area *)
|
static char *x_mapin(const char *, Area *)
|
||||||
__attribute__((nonnull (1)));
|
MKSH_A_NONNULL((nonnull (1)));
|
||||||
static char *x_mapout(int);
|
static char *x_mapout(int);
|
||||||
static void x_mapout2(int, char **);
|
static void x_mapout2(int, char **);
|
||||||
static void x_print(int, int);
|
static void x_print(int, int);
|
||||||
@ -1252,7 +1252,7 @@ x_ins(const char *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_del_back(int c __unused)
|
x_del_back(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
@ -1268,7 +1268,7 @@ x_del_back(int c __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_del_char(int c __unused)
|
x_del_char(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
char *cp, *cp2;
|
char *cp, *cp2;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@ -1360,28 +1360,28 @@ x_delete(int nc, int push)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_del_bword(int c __unused)
|
x_del_bword(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_delete(x_bword(), true);
|
x_delete(x_bword(), true);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_mv_bword(int c __unused)
|
x_mv_bword(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_bword();
|
x_bword();
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_mv_fword(int c __unused)
|
x_mv_fword(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_fword(1);
|
x_fword(1);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_del_fword(int c __unused)
|
x_del_fword(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_delete(x_fword(0), true);
|
x_delete(x_fword(0), true);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
@ -1536,7 +1536,7 @@ x_zotc3(char **cp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_mv_back(int c __unused)
|
x_mv_back(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
if (xcp == xbuf) {
|
if (xcp == xbuf) {
|
||||||
x_e_putc2(7);
|
x_e_putc2(7);
|
||||||
@ -1551,7 +1551,7 @@ x_mv_back(int c __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_mv_forw(int c __unused)
|
x_mv_forw(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
char *cp = xcp, *cp2;
|
char *cp = xcp, *cp2;
|
||||||
|
|
||||||
@ -1570,7 +1570,7 @@ x_mv_forw(int c __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_search_char_forw(int c __unused)
|
x_search_char_forw(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
char *cp = xcp;
|
char *cp = xcp;
|
||||||
char tmp[4];
|
char tmp[4];
|
||||||
@ -1592,7 +1592,7 @@ x_search_char_forw(int c __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_search_char_back(int c __unused)
|
x_search_char_back(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
char *cp = xcp, *p, tmp[4];
|
char *cp = xcp, *p, tmp[4];
|
||||||
bool b;
|
bool b;
|
||||||
@ -1627,7 +1627,7 @@ x_search_char_back(int c __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_newline(int c __unused)
|
x_newline(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_e_putc2('\r');
|
x_e_putc2('\r');
|
||||||
x_e_putc2('\n');
|
x_e_putc2('\n');
|
||||||
@ -1637,7 +1637,7 @@ x_newline(int c __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_end_of_text(int c __unused)
|
x_end_of_text(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_zotc2(edchars.eof);
|
x_zotc2(edchars.eof);
|
||||||
x_putc('\r');
|
x_putc('\r');
|
||||||
@ -1647,28 +1647,28 @@ x_end_of_text(int c __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_beg_hist(int c __unused)
|
x_beg_hist(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_load_hist(history);
|
x_load_hist(history);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_end_hist(int c __unused)
|
x_end_hist(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_load_hist(histptr);
|
x_load_hist(histptr);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_prev_com(int c __unused)
|
x_prev_com(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_load_hist(x_histp - x_arg);
|
x_load_hist(x_histp - x_arg);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_next_com(int c __unused)
|
x_next_com(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_load_hist(x_histp + x_arg);
|
x_load_hist(x_histp + x_arg);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
@ -1679,7 +1679,7 @@ x_next_com(int c __unused)
|
|||||||
* want so we'll simply go to the oldest one.
|
* want so we'll simply go to the oldest one.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
x_goto_hist(int c __unused)
|
x_goto_hist(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
if (x_arg_defaulted)
|
if (x_arg_defaulted)
|
||||||
x_load_hist(history);
|
x_load_hist(history);
|
||||||
@ -1719,7 +1719,7 @@ x_load_hist(char **hp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_nl_next_com(int c __unused)
|
x_nl_next_com(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_nextcmd = source->line - (histptr - x_histp) + 1;
|
x_nextcmd = source->line - (histptr - x_histp) + 1;
|
||||||
return (x_newline('\n'));
|
return (x_newline('\n'));
|
||||||
@ -1842,14 +1842,14 @@ x_search(char *pat, int sameline, int offset)
|
|||||||
#ifndef MKSH_SMALL
|
#ifndef MKSH_SMALL
|
||||||
/* anchored search up from current line */
|
/* anchored search up from current line */
|
||||||
static int
|
static int
|
||||||
x_search_hist_up(int c __unused)
|
x_search_hist_up(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
return (x_search_dir(-1));
|
return (x_search_dir(-1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* anchored search down from current line */
|
/* anchored search down from current line */
|
||||||
static int
|
static int
|
||||||
x_search_hist_dn(int c __unused)
|
x_search_hist_dn(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
return (x_search_dir(1));
|
return (x_search_dir(1));
|
||||||
}
|
}
|
||||||
@ -1886,7 +1886,7 @@ x_match(char *str, char *pat)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_del_line(int c __unused)
|
x_del_line(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
@ -1905,28 +1905,28 @@ x_del_line(int c __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_mv_end(int c __unused)
|
x_mv_end(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_goto(xep);
|
x_goto(xep);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_mv_begin(int c __unused)
|
x_mv_begin(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_goto(xbuf);
|
x_goto(xbuf);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_draw_line(int c __unused)
|
x_draw_line(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_redraw(-1);
|
x_redraw(-1);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_cls(int c __unused)
|
x_cls(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* in later versions we might use libtermcap for this, but since external
|
* in later versions we might use libtermcap for this, but since external
|
||||||
@ -2018,7 +2018,7 @@ x_redraw(int limit)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_transpose(int c __unused)
|
x_transpose(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
unsigned int tmpa, tmpb;
|
unsigned int tmpa, tmpb;
|
||||||
|
|
||||||
@ -2083,28 +2083,28 @@ x_transpose(int c __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_literal(int c __unused)
|
x_literal(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_curprefix = -1;
|
x_curprefix = -1;
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_meta1(int c __unused)
|
x_meta1(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_curprefix = 1;
|
x_curprefix = 1;
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_meta2(int c __unused)
|
x_meta2(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_curprefix = 2;
|
x_curprefix = 2;
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_kill(int c __unused)
|
x_kill(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
int col = xcp - xbuf;
|
int col = xcp - xbuf;
|
||||||
int lastcol = xep - xbuf;
|
int lastcol = xep - xbuf;
|
||||||
@ -2136,7 +2136,7 @@ x_push(int nchars)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_yank(int c __unused)
|
x_yank(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
if (killsp == 0)
|
if (killsp == 0)
|
||||||
killtp = KILLSIZE;
|
killtp = KILLSIZE;
|
||||||
@ -2154,7 +2154,7 @@ x_yank(int c __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_meta_yank(int c __unused)
|
x_meta_yank(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
@ -2179,7 +2179,7 @@ x_meta_yank(int c __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_abort(int c __unused)
|
x_abort(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
/* x_zotc(c); */
|
/* x_zotc(c); */
|
||||||
xlp = xep = xcp = xbp = xbuf;
|
xlp = xep = xcp = xbp = xbuf;
|
||||||
@ -2190,7 +2190,7 @@ x_abort(int c __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_error(int c __unused)
|
x_error(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_e_putc2(7);
|
x_e_putc2(7);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
@ -2466,14 +2466,14 @@ bind_if_not_bound(int p, int k, int func)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_set_mark(int c __unused)
|
x_set_mark(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
xmp = xcp;
|
xmp = xcp;
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_kill_region(int c __unused)
|
x_kill_region(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
int rsize;
|
int rsize;
|
||||||
char *xr;
|
char *xr;
|
||||||
@ -2496,7 +2496,7 @@ x_kill_region(int c __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_xchg_point_mark(int c __unused)
|
x_xchg_point_mark(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
char *tmp;
|
char *tmp;
|
||||||
|
|
||||||
@ -2511,7 +2511,7 @@ x_xchg_point_mark(int c __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_noop(int c __unused)
|
x_noop(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
@ -2520,56 +2520,56 @@ x_noop(int c __unused)
|
|||||||
* File/command name completion routines
|
* File/command name completion routines
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
x_comp_comm(int c __unused)
|
x_comp_comm(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
do_complete(XCF_COMMAND, CT_COMPLETE);
|
do_complete(XCF_COMMAND, CT_COMPLETE);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_list_comm(int c __unused)
|
x_list_comm(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
do_complete(XCF_COMMAND, CT_LIST);
|
do_complete(XCF_COMMAND, CT_LIST);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_complete(int c __unused)
|
x_complete(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
do_complete(XCF_COMMAND_FILE, CT_COMPLETE);
|
do_complete(XCF_COMMAND_FILE, CT_COMPLETE);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_enumerate(int c __unused)
|
x_enumerate(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
do_complete(XCF_COMMAND_FILE, CT_LIST);
|
do_complete(XCF_COMMAND_FILE, CT_LIST);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_comp_file(int c __unused)
|
x_comp_file(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
do_complete(XCF_FILE, CT_COMPLETE);
|
do_complete(XCF_FILE, CT_COMPLETE);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_list_file(int c __unused)
|
x_list_file(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
do_complete(XCF_FILE, CT_LIST);
|
do_complete(XCF_FILE, CT_LIST);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_comp_list(int c __unused)
|
x_comp_list(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
do_complete(XCF_COMMAND_FILE, CT_COMPLIST);
|
do_complete(XCF_COMMAND_FILE, CT_COMPLIST);
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_expand(int c __unused)
|
x_expand(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
char **words;
|
char **words;
|
||||||
int start, end, nwords, i;
|
int start, end, nwords, i;
|
||||||
@ -2818,7 +2818,7 @@ x_set_arg(int c)
|
|||||||
|
|
||||||
/* Comment or uncomment the current line. */
|
/* Comment or uncomment the current line. */
|
||||||
static int
|
static int
|
||||||
x_comment(int c __unused)
|
x_comment(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
int oldsize = x_size_str(xbuf);
|
int oldsize = x_size_str(xbuf);
|
||||||
int len = xep - xbuf;
|
int len = xep - xbuf;
|
||||||
@ -2839,7 +2839,7 @@ x_comment(int c __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_version(int c __unused)
|
x_version(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
char *o_xbuf = xbuf, *o_xend = xend;
|
char *o_xbuf = xbuf, *o_xend = xend;
|
||||||
char *o_xbp = xbp, *o_xep = xep, *o_xcp = xcp;
|
char *o_xbp = xbp, *o_xep = xep, *o_xcp = xcp;
|
||||||
@ -2873,7 +2873,7 @@ x_version(int c __unused)
|
|||||||
|
|
||||||
#ifndef MKSH_SMALL
|
#ifndef MKSH_SMALL
|
||||||
static int
|
static int
|
||||||
x_edit_line(int c __unused)
|
x_edit_line(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
if (x_arg_defaulted) {
|
if (x_arg_defaulted) {
|
||||||
if (xep == xbuf) {
|
if (xep == xbuf) {
|
||||||
@ -2914,7 +2914,7 @@ x_edit_line(int c __unused)
|
|||||||
* KSTD
|
* KSTD
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
x_prev_histword(int c __unused)
|
x_prev_histword(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
char *rcp, *cp;
|
char *rcp, *cp;
|
||||||
char **xhp;
|
char **xhp;
|
||||||
@ -2972,21 +2972,21 @@ x_prev_histword(int c __unused)
|
|||||||
#ifndef MKSH_SMALL
|
#ifndef MKSH_SMALL
|
||||||
/* Uppercase N(1) words */
|
/* Uppercase N(1) words */
|
||||||
static int
|
static int
|
||||||
x_fold_upper(int c __unused)
|
x_fold_upper(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
return (x_fold_case('U'));
|
return (x_fold_case('U'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Lowercase N(1) words */
|
/* Lowercase N(1) words */
|
||||||
static int
|
static int
|
||||||
x_fold_lower(int c __unused)
|
x_fold_lower(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
return (x_fold_case('L'));
|
return (x_fold_case('L'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Lowercase N(1) words */
|
/* Lowercase N(1) words */
|
||||||
static int
|
static int
|
||||||
x_fold_capitalise(int c __unused)
|
x_fold_capitalise(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
return (x_fold_case('C'));
|
return (x_fold_case('C'));
|
||||||
}
|
}
|
||||||
@ -5168,7 +5168,7 @@ complete_word(int cmd, int count)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
print_expansions(struct edstate *est, int cmd __unused)
|
print_expansions(struct edstate *est, int cmd MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
int start, end, nwords;
|
int start, end, nwords;
|
||||||
char **words;
|
char **words;
|
||||||
|
5
exec.c
5
exec.c
@ -22,12 +22,11 @@
|
|||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/exec.c,v 1.71 2009/12/05 17:43:46 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/exec.c,v 1.72 2009/12/12 22:27:06 tg Exp $");
|
||||||
|
|
||||||
static int comexec(struct op *, struct tbl *volatile, const char **,
|
static int comexec(struct op *, struct tbl *volatile, const char **,
|
||||||
int volatile, volatile int *);
|
int volatile, volatile int *);
|
||||||
static void scriptexec(struct op *, const char **)
|
static void scriptexec(struct op *, const char **) MKSH_A_NORETURN;
|
||||||
__attribute__((noreturn));
|
|
||||||
static int call_builtin(struct tbl *, const char **);
|
static int call_builtin(struct tbl *, const char **);
|
||||||
static int iosetup(struct ioword *, struct tbl *);
|
static int iosetup(struct ioword *, struct tbl *);
|
||||||
static int herein(const char *, int);
|
static int herein(const char *, int);
|
||||||
|
4
expr.c
4
expr.c
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/expr.c,v 1.41 2009/12/08 19:23:34 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/expr.c,v 1.42 2009/12/12 22:27:06 tg Exp $");
|
||||||
|
|
||||||
/* The order of these enums is constrained by the order of opinfo[] */
|
/* The order of these enums is constrained by the order of opinfo[] */
|
||||||
enum token {
|
enum token {
|
||||||
@ -160,7 +160,7 @@ enum error_type {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void evalerr(Expr_state *, enum error_type, const char *)
|
static void evalerr(Expr_state *, enum error_type, const char *)
|
||||||
__attribute__((noreturn));
|
MKSH_A_NORETURN;
|
||||||
static struct tbl *evalexpr(Expr_state *, int);
|
static struct tbl *evalexpr(Expr_state *, int);
|
||||||
static void exprtoken(Expr_state *);
|
static void exprtoken(Expr_state *);
|
||||||
static struct tbl *do_ppmm(Expr_state *, enum token, struct tbl *, bool);
|
static struct tbl *do_ppmm(Expr_state *, enum token, struct tbl *, bool);
|
||||||
|
15
funcs.c
15
funcs.c
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.146 2009/12/05 17:43:46 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.147 2009/12/12 22:27:07 tg Exp $");
|
||||||
|
|
||||||
#if HAVE_KILLPG
|
#if HAVE_KILLPG
|
||||||
/*
|
/*
|
||||||
@ -173,7 +173,8 @@ static const char *ptest_getopnd(Test_env *, Test_op, bool);
|
|||||||
static void ptest_error(Test_env *, int, const char *);
|
static void ptest_error(Test_env *, int, const char *);
|
||||||
static char *kill_fmt_entry(char *, int, int, const void *);
|
static char *kill_fmt_entry(char *, int, int, const void *);
|
||||||
static void p_time(struct shf *, bool, long, int, int,
|
static void p_time(struct shf *, bool, long, int, int,
|
||||||
const char *, const char *) __attribute__((nonnull (6, 7)));
|
const char *, const char *)
|
||||||
|
MKSH_A_NONNULL((nonnull (6, 7)));
|
||||||
static char *do_realpath(const char *);
|
static char *do_realpath(const char *);
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
@ -723,7 +724,7 @@ s_get(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
s_put(int c __unused)
|
s_put(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
--s_ptr;
|
--s_ptr;
|
||||||
}
|
}
|
||||||
@ -2422,7 +2423,7 @@ p_time(struct shf *shf, bool posix, long tv_sec, int tv_usec, int width,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
c_times(const char **wp __unused)
|
c_times(const char **wp MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
struct rusage usage;
|
struct rusage usage;
|
||||||
|
|
||||||
@ -2548,7 +2549,7 @@ timex_hook(struct op *t, char **volatile *app)
|
|||||||
|
|
||||||
/* exec with no args - args case is taken care of in comexec() */
|
/* exec with no args - args case is taken care of in comexec() */
|
||||||
int
|
int
|
||||||
c_exec(const char **wp __unused)
|
c_exec(const char **wp MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -2658,7 +2659,7 @@ c_mknod(const char **wp)
|
|||||||
|
|
||||||
/* dummy function, special case in comexec() */
|
/* dummy function, special case in comexec() */
|
||||||
int
|
int
|
||||||
c_builtin(const char **wp __unused)
|
c_builtin(const char **wp MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
@ -3075,7 +3076,7 @@ ptest_isa(Test_env *te, Test_meta meta)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
ptest_getopnd(Test_env *te, Test_op op, bool do_eval __unused)
|
ptest_getopnd(Test_env *te, Test_op op, bool do_eval MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
if (te->pos.wp >= te->wp_end)
|
if (te->pos.wp >= te->wp_end)
|
||||||
return (op == TO_FILTT ? "1" : NULL);
|
return (op == TO_FILTT ? "1" : NULL);
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
#include <sys/file.h>
|
#include <sys/file.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/histrap.c,v 1.89 2009/10/02 18:08:33 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/histrap.c,v 1.90 2009/12/12 22:27:08 tg Exp $");
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* MirOS: This is the default mapping type, and need not be specified.
|
* MirOS: This is the default mapping type, and need not be specified.
|
||||||
@ -597,7 +597,7 @@ init_histvec(void)
|
|||||||
* save command in history
|
* save command in history
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
histsave(int *lnp, const char *cmd, bool dowrite __unused, bool ignoredups)
|
histsave(int *lnp, const char *cmd, bool dowrite MKSH_A_UNUSED, bool ignoredups)
|
||||||
{
|
{
|
||||||
char **hp;
|
char **hp;
|
||||||
char *c, *cp;
|
char *c, *cp;
|
||||||
@ -1088,7 +1088,7 @@ alarm_init(void)
|
|||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
static void
|
static void
|
||||||
alarm_catcher(int sig __unused)
|
alarm_catcher(int sig MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
int errno_ = errno;
|
int errno_ = errno;
|
||||||
|
|
||||||
|
4
jobs.c
4
jobs.c
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/jobs.c,v 1.65 2009/12/12 17:45:42 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/jobs.c,v 1.66 2009/12/12 22:27:08 tg Exp $");
|
||||||
|
|
||||||
#if HAVE_KILLPG
|
#if HAVE_KILLPG
|
||||||
#define mksh_killpg killpg
|
#define mksh_killpg killpg
|
||||||
@ -1103,7 +1103,7 @@ j_waitj(Job *j,
|
|||||||
*/
|
*/
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
static void
|
static void
|
||||||
j_sigchld(int sig __unused)
|
j_sigchld(int sig MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
int errno_ = errno;
|
int errno_ = errno;
|
||||||
Job *j;
|
Job *j;
|
||||||
|
81
sh.h
81
sh.h
@ -91,22 +91,36 @@
|
|||||||
#include <values.h>
|
#include <values.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAVE_ATTRIBUTE
|
|
||||||
#undef __attribute__
|
#undef __attribute__
|
||||||
#else
|
|
||||||
#define __attribute__(x) /* nothing */
|
|
||||||
#endif
|
|
||||||
#undef __unused
|
|
||||||
#define __unused __attribute__((unused))
|
|
||||||
#if HAVE_ATTRIBUTE_BOUNDED
|
#if HAVE_ATTRIBUTE_BOUNDED
|
||||||
#define __bound_att__(x) __attribute__(x)
|
#define MKSH_A_BOUNDED(x,y,z) __attribute__((bounded (x, y, z)))
|
||||||
#else
|
#else
|
||||||
#define __bound_att__(x) /* nothing */
|
#define MKSH_A_BOUNDED(x,y,z) /* nothing */
|
||||||
|
#endif
|
||||||
|
#if HAVE_ATTRIBUTE_FORMAT
|
||||||
|
#define MKSH_A_FORMAT(x,y,z) __attribute__((format (x, y, z)))
|
||||||
|
#else
|
||||||
|
#define MKSH_A_FORMAT(x,y,z) /* nothing */
|
||||||
|
#endif
|
||||||
|
#if HAVE_ATTRIBUTE_NONNULL
|
||||||
|
#define MKSH_A_NONNULL(a) __attribute__(a)
|
||||||
|
#else
|
||||||
|
#define MKSH_A_NONNULL(a) /* nothing */
|
||||||
|
#endif
|
||||||
|
#if HAVE_ATTRIBUTE_NORETURN
|
||||||
|
#define MKSH_A_NORETURN __attribute__((noreturn))
|
||||||
|
#else
|
||||||
|
#define MKSH_A_NORETURN /* nothing */
|
||||||
|
#endif
|
||||||
|
#if HAVE_ATTRIBUTE_UNUSED
|
||||||
|
#define MKSH_A_UNUSED __attribute__((unused))
|
||||||
|
#else
|
||||||
|
#define MKSH_A_UNUSED /* nothing */
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_ATTRIBUTE_USED
|
#if HAVE_ATTRIBUTE_USED
|
||||||
#define __attribute____used__ __attribute__((used))
|
#define MKSH_A_USED __attribute__((used))
|
||||||
#else
|
#else
|
||||||
#define __attribute____used__ /* nothing */
|
#define MKSH_A_USED /* nothing */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined(MirBSD) && (MirBSD >= 0x09A1))
|
#if (defined(MirBSD) && (MirBSD >= 0x09A1))
|
||||||
@ -127,16 +141,16 @@
|
|||||||
#define __IDSTRING_EXPAND(l,p) __IDSTRING_CONCAT(l,p)
|
#define __IDSTRING_EXPAND(l,p) __IDSTRING_CONCAT(l,p)
|
||||||
#define __IDSTRING(prefix, string) \
|
#define __IDSTRING(prefix, string) \
|
||||||
static const char __IDSTRING_EXPAND(__LINE__,prefix) [] \
|
static const char __IDSTRING_EXPAND(__LINE__,prefix) [] \
|
||||||
__attribute____used__ = "@(""#)" #prefix ": " string
|
MKSH_A_USED = "@(""#)" #prefix ": " string
|
||||||
#define __COPYRIGHT(x) __IDSTRING(copyright,x)
|
#define __COPYRIGHT(x) __IDSTRING(copyright,x)
|
||||||
#define __RCSID(x) __IDSTRING(rcsid,x)
|
#define __RCSID(x) __IDSTRING(rcsid,x)
|
||||||
#define __SCCSID(x) __IDSTRING(sccsid,x)
|
#define __SCCSID(x) __IDSTRING(sccsid,x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef EXTERN
|
#ifdef EXTERN
|
||||||
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.369 2009/12/05 22:19:42 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.370 2009/12/12 22:27:09 tg Exp $");
|
||||||
#endif
|
#endif
|
||||||
#define MKSH_VERSION "R39 2009/12/05"
|
#define MKSH_VERSION "R39 2009/12/12"
|
||||||
|
|
||||||
#ifndef MKSH_INCLUDES_ONLY
|
#ifndef MKSH_INCLUDES_ONLY
|
||||||
|
|
||||||
@ -263,7 +277,7 @@ typedef int bool;
|
|||||||
#if !HAVE_ARC4RANDOM_DECL
|
#if !HAVE_ARC4RANDOM_DECL
|
||||||
extern u_int32_t arc4random(void);
|
extern u_int32_t arc4random(void);
|
||||||
extern void arc4random_addrandom(unsigned char *, int)
|
extern void arc4random_addrandom(unsigned char *, int)
|
||||||
__bound_att__((bounded (string, 1, 2)));
|
MKSH_A_BOUNDED(string, 1, 2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !HAVE_ARC4RANDOM_PUSHB_DECL
|
#if !HAVE_ARC4RANDOM_PUSHB_DECL
|
||||||
@ -1469,8 +1483,8 @@ int j_stopped_running(void);
|
|||||||
/* lex.c */
|
/* lex.c */
|
||||||
int yylex(int);
|
int yylex(int);
|
||||||
void yyerror(const char *, ...)
|
void yyerror(const char *, ...)
|
||||||
__attribute__((noreturn))
|
MKSH_A_NORETURN
|
||||||
__attribute__((format (printf, 1, 2)));
|
MKSH_A_FORMAT(printf, 1, 2);
|
||||||
Source *pushs(int, Area *);
|
Source *pushs(int, Area *);
|
||||||
void set_prompt(int, Source *);
|
void set_prompt(int, Source *);
|
||||||
void pprompt(const char *, int);
|
void pprompt(const char *, int);
|
||||||
@ -1479,33 +1493,32 @@ int promptlen(const char *);
|
|||||||
int include(const char *, int, const char **, int);
|
int include(const char *, int, const char **, int);
|
||||||
int command(const char *);
|
int command(const char *);
|
||||||
int shell(Source *volatile, int volatile);
|
int shell(Source *volatile, int volatile);
|
||||||
void unwind(int)
|
void unwind(int) MKSH_A_NORETURN;
|
||||||
__attribute__((noreturn));
|
|
||||||
void newenv(int);
|
void newenv(int);
|
||||||
void quitenv(struct shf *);
|
void quitenv(struct shf *);
|
||||||
void cleanup_parents_env(void);
|
void cleanup_parents_env(void);
|
||||||
void cleanup_proc_env(void);
|
void cleanup_proc_env(void);
|
||||||
void errorf(const char *, ...)
|
void errorf(const char *, ...)
|
||||||
__attribute__((noreturn))
|
MKSH_A_NORETURN
|
||||||
__attribute__((format (printf, 1, 2)));
|
MKSH_A_FORMAT(printf, 1, 2);
|
||||||
void warningf(bool, const char *, ...)
|
void warningf(bool, const char *, ...)
|
||||||
__attribute__((format (printf, 2, 3)));
|
MKSH_A_FORMAT(printf, 2, 3);
|
||||||
void bi_errorf(const char *, ...)
|
void bi_errorf(const char *, ...)
|
||||||
__attribute__((format (printf, 1, 2)));
|
MKSH_A_FORMAT(printf, 1, 2);
|
||||||
#define errorfz() errorf("\1")
|
#define errorfz() errorf("\1")
|
||||||
#define bi_errorfz() bi_errorf("\1")
|
#define bi_errorfz() bi_errorf("\1")
|
||||||
void internal_verrorf(const char *, va_list)
|
void internal_verrorf(const char *, va_list)
|
||||||
__attribute__((format (printf, 1, 0)));
|
MKSH_A_FORMAT(printf, 1, 0);
|
||||||
void internal_errorf(const char *, ...)
|
void internal_errorf(const char *, ...)
|
||||||
__attribute__((noreturn))
|
MKSH_A_NORETURN
|
||||||
__attribute__((format (printf, 1, 2)));
|
MKSH_A_FORMAT(printf, 1, 2);
|
||||||
void internal_warningf(const char *, ...)
|
void internal_warningf(const char *, ...)
|
||||||
__attribute__((format (printf, 1, 2)));
|
MKSH_A_FORMAT(printf, 1, 2);
|
||||||
void error_prefix(bool);
|
void error_prefix(bool);
|
||||||
void shellf(const char *, ...)
|
void shellf(const char *, ...)
|
||||||
__attribute__((format (printf, 1, 2)));
|
MKSH_A_FORMAT(printf, 1, 2);
|
||||||
void shprintf(const char *, ...)
|
void shprintf(const char *, ...)
|
||||||
__attribute__((format (printf, 1, 2)));
|
MKSH_A_FORMAT(printf, 1, 2);
|
||||||
int can_seek(int);
|
int can_seek(int);
|
||||||
void initio(void);
|
void initio(void);
|
||||||
int ksh_dup2(int, int, bool);
|
int ksh_dup2(int, int, bool);
|
||||||
@ -1553,7 +1566,7 @@ void print_columns(struct shf *, int,
|
|||||||
const void *, int, int, bool);
|
const void *, int, int, bool);
|
||||||
void strip_nuls(char *, int);
|
void strip_nuls(char *, int);
|
||||||
int blocking_read(int, char *, int)
|
int blocking_read(int, char *, int)
|
||||||
__bound_att__((bounded (buffer, 2, 3)));
|
MKSH_A_BOUNDED(buffer, 2, 3);
|
||||||
int reset_nonblock(int);
|
int reset_nonblock(int);
|
||||||
char *ksh_get_wd(size_t *);
|
char *ksh_get_wd(size_t *);
|
||||||
int make_path(const char *, const char *, char **, XString *, int *);
|
int make_path(const char *, const char *, char **, XString *, int *);
|
||||||
@ -1581,14 +1594,14 @@ int shf_putchar(int, struct shf *);
|
|||||||
int shf_puts(const char *, struct shf *);
|
int shf_puts(const char *, struct shf *);
|
||||||
int shf_write(const char *, int, struct shf *);
|
int shf_write(const char *, int, struct shf *);
|
||||||
int shf_fprintf(struct shf *, const char *, ...)
|
int shf_fprintf(struct shf *, const char *, ...)
|
||||||
__attribute__((format (printf, 2, 3)));
|
MKSH_A_FORMAT(printf, 2, 3);
|
||||||
int shf_snprintf(char *, int, const char *, ...)
|
int shf_snprintf(char *, int, const char *, ...)
|
||||||
__attribute__((format (printf, 3, 4)))
|
MKSH_A_FORMAT(printf, 3, 4)
|
||||||
__bound_att__((bounded (string, 1, 2)));
|
MKSH_A_BOUNDED(string, 1, 2);
|
||||||
char *shf_smprintf(const char *, ...)
|
char *shf_smprintf(const char *, ...)
|
||||||
__attribute__((format (printf, 1, 2)));
|
MKSH_A_FORMAT(printf, 1, 2);
|
||||||
int shf_vfprintf(struct shf *, const char *, va_list)
|
int shf_vfprintf(struct shf *, const char *, va_list)
|
||||||
__attribute__((format (printf, 2, 0)));
|
MKSH_A_FORMAT(printf, 2, 0);
|
||||||
/* syn.c */
|
/* syn.c */
|
||||||
void initkeywords(void);
|
void initkeywords(void);
|
||||||
struct op *compile(Source *);
|
struct op *compile(Source *);
|
||||||
|
17
syn.c
17
syn.c
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/syn.c,v 1.47 2009/10/30 00:57:39 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/syn.c,v 1.48 2009/12/12 22:27:10 tg Exp $");
|
||||||
|
|
||||||
struct nesting_state {
|
struct nesting_state {
|
||||||
int start_token; /* token than began nesting (eg, FOR) */
|
int start_token; /* token than began nesting (eg, FOR) */
|
||||||
@ -45,8 +45,7 @@ static struct op *function_body(char *, bool);
|
|||||||
static char **wordlist(void);
|
static char **wordlist(void);
|
||||||
static struct op *block(int, struct op *, struct op *, char **);
|
static struct op *block(int, struct op *, struct op *, char **);
|
||||||
static struct op *newtp(int);
|
static struct op *newtp(int);
|
||||||
static void syntaxerr(const char *)
|
static void syntaxerr(const char *) MKSH_A_NORETURN;
|
||||||
__attribute__((noreturn));
|
|
||||||
static void nesting_push(struct nesting_state *, int);
|
static void nesting_push(struct nesting_state *, int);
|
||||||
static void nesting_pop(struct nesting_state *);
|
static void nesting_pop(struct nesting_state *);
|
||||||
static int assign_command(char *);
|
static int assign_command(char *);
|
||||||
@ -55,8 +54,7 @@ static int dbtestp_isa(Test_env *, Test_meta);
|
|||||||
static const char *dbtestp_getopnd(Test_env *, Test_op, bool);
|
static const char *dbtestp_getopnd(Test_env *, Test_op, bool);
|
||||||
static int dbtestp_eval(Test_env *, Test_op, const char *,
|
static int dbtestp_eval(Test_env *, Test_op, const char *,
|
||||||
const char *, bool);
|
const char *, bool);
|
||||||
static void dbtestp_error(Test_env *, int, const char *)
|
static void dbtestp_error(Test_env *, int, const char *) MKSH_A_NORETURN;
|
||||||
__attribute__((noreturn));
|
|
||||||
|
|
||||||
static struct op *outtree; /* yyparse output */
|
static struct op *outtree; /* yyparse output */
|
||||||
static struct nesting_state nesting; /* \n changed to ; */
|
static struct nesting_state nesting; /* \n changed to ; */
|
||||||
@ -965,7 +963,8 @@ dbtestp_isa(Test_env *te, Test_meta meta)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
dbtestp_getopnd(Test_env *te, Test_op op __unused, bool do_eval __unused)
|
dbtestp_getopnd(Test_env *te, Test_op op MKSH_A_UNUSED,
|
||||||
|
bool do_eval MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
int c = tpeek(ARRAYVAR);
|
int c = tpeek(ARRAYVAR);
|
||||||
|
|
||||||
@ -979,9 +978,9 @@ dbtestp_getopnd(Test_env *te, Test_op op __unused, bool do_eval __unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
dbtestp_eval(Test_env *te __unused, Test_op op __unused,
|
dbtestp_eval(Test_env *te MKSH_A_UNUSED, Test_op op MKSH_A_UNUSED,
|
||||||
const char *opnd1 __unused, const char *opnd2 __unused,
|
const char *opnd1 MKSH_A_UNUSED, const char *opnd2 MKSH_A_UNUSED,
|
||||||
bool do_eval __unused)
|
bool do_eval MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user