last parts of Coherent patchkit: O_ACCMODE and termio
This commit is contained in:
parent
fef3808126
commit
e6ace01f12
5
Build.sh
5
Build.sh
@ -1,5 +1,5 @@
|
||||
#!/bin/sh
|
||||
srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.561 2012/05/04 22:04:58 tg Exp $'
|
||||
srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.562 2012/05/04 22:18:22 tg Exp $'
|
||||
#-
|
||||
# Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
||||
# 2011, 2012
|
||||
@ -1307,6 +1307,7 @@ ac_header paths.h
|
||||
ac_header stdint.h stdarg.h
|
||||
# include strings.h only if compatible with string.h
|
||||
ac_header strings.h sys/types.h string.h
|
||||
ac_header termios.h
|
||||
ac_header ulimit.h sys/types.h
|
||||
ac_header values.h
|
||||
|
||||
@ -1409,7 +1410,7 @@ else
|
||||
#define EXTERN
|
||||
#define MKSH_INCLUDES_ONLY
|
||||
#include "sh.h"
|
||||
__RCSID("$MirOS: src/bin/mksh/Build.sh,v 1.561 2012/05/04 22:04:58 tg Exp $");
|
||||
__RCSID("$MirOS: src/bin/mksh/Build.sh,v 1.562 2012/05/04 22:18:22 tg Exp $");
|
||||
int main(void) { printf("Hello, World!\n"); return (0); }
|
||||
EOF
|
||||
case $cm in
|
||||
|
12
edit.c
12
edit.c
@ -28,7 +28,7 @@
|
||||
|
||||
#ifndef MKSH_NO_CMDLINE_EDITING
|
||||
|
||||
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.235 2012/05/04 20:49:01 tg Exp $");
|
||||
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.236 2012/05/04 22:18:23 tg Exp $");
|
||||
|
||||
/*
|
||||
* in later versions we might use libtermcap for this, but since external
|
||||
@ -3274,7 +3274,7 @@ x_mode(bool onoff)
|
||||
if (edchars.quit >= 0)
|
||||
bind_if_not_bound(0, edchars.quit, XFUNC_noop);
|
||||
} else
|
||||
tcsetattr(tty_fd, TCSADRAIN, &tty_state);
|
||||
mksh_tcset(tty_fd, &tty_state);
|
||||
}
|
||||
|
||||
#if !MKSH_S_NOVI
|
||||
@ -5369,12 +5369,12 @@ vi_macro_reset(void)
|
||||
#endif /* !MKSH_NO_CMDLINE_EDITING */
|
||||
|
||||
void
|
||||
x_mkraw(int fd, struct termios *ocb, bool forread)
|
||||
x_mkraw(int fd, mksh_ttyst *ocb, bool forread)
|
||||
{
|
||||
struct termios cb;
|
||||
mksh_ttyst cb;
|
||||
|
||||
if (ocb)
|
||||
tcgetattr(fd, ocb);
|
||||
mksh_tcget(fd, ocb);
|
||||
else
|
||||
ocb = &tty_state;
|
||||
|
||||
@ -5396,5 +5396,5 @@ x_mkraw(int fd, struct termios *ocb, bool forread)
|
||||
cb.c_cc[VTIME] = 0;
|
||||
cb.c_cc[VMIN] = 1;
|
||||
|
||||
tcsetattr(fd, TCSADRAIN, &cb);
|
||||
mksh_tcset(fd, &cb);
|
||||
}
|
||||
|
6
funcs.c
6
funcs.c
@ -38,7 +38,7 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.217 2012/05/04 22:05:00 tg Exp $");
|
||||
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.218 2012/05/04 22:18:24 tg Exp $");
|
||||
|
||||
#if HAVE_KILLPG
|
||||
/*
|
||||
@ -1783,7 +1783,7 @@ c_read(const char **wp)
|
||||
const char *ccp;
|
||||
XString xs;
|
||||
ptrdiff_t xsave = 0;
|
||||
struct termios tios;
|
||||
mksh_ttyst tios;
|
||||
bool restore_tios = false;
|
||||
#if HAVE_SELECT
|
||||
bool hastimeout = false;
|
||||
@ -2160,7 +2160,7 @@ c_read(const char **wp)
|
||||
afree(allocd, ATEMP);
|
||||
Xfree(xs, xp);
|
||||
if (restore_tios)
|
||||
tcsetattr(fd, TCSADRAIN, &tios);
|
||||
mksh_tcset(fd, &tios);
|
||||
return (rv);
|
||||
#undef is_ifsws
|
||||
}
|
||||
|
18
jobs.c
18
jobs.c
@ -22,7 +22,7 @@
|
||||
|
||||
#include "sh.h"
|
||||
|
||||
__RCSID("$MirOS: src/bin/mksh/jobs.c,v 1.86 2012/05/04 21:48:29 tg Exp $");
|
||||
__RCSID("$MirOS: src/bin/mksh/jobs.c,v 1.87 2012/05/04 22:18:25 tg Exp $");
|
||||
|
||||
#if HAVE_KILLPG
|
||||
#define mksh_killpg killpg
|
||||
@ -89,7 +89,7 @@ struct job {
|
||||
int32_t age; /* number of jobs started */
|
||||
Coproc_id coproc_id; /* 0 or id of coprocess output pipe */
|
||||
#ifndef MKSH_UNEMPLOYED
|
||||
struct termios ttystat; /* saved tty state for stopped jobs */
|
||||
mksh_ttyst ttystat; /* saved tty state for stopped jobs */
|
||||
pid_t saved_ttypgrp; /* saved tty process group for stopped jobs */
|
||||
#endif
|
||||
};
|
||||
@ -333,7 +333,7 @@ j_change(void)
|
||||
warningf(false, "%s: %s", "warning",
|
||||
"won't have full job control");
|
||||
if (tty_fd >= 0)
|
||||
tcgetattr(tty_fd, &tty_state);
|
||||
mksh_tcget(tty_fd, &tty_state);
|
||||
} else {
|
||||
ttypgrp_ok = false;
|
||||
if (Flag(FTALKING))
|
||||
@ -803,14 +803,14 @@ j_resume(const char *cp, int bg)
|
||||
/* attach tty to job */
|
||||
if (j->state == PRUNNING) {
|
||||
if (ttypgrp_ok && (j->flags & JF_SAVEDTTY))
|
||||
tcsetattr(tty_fd, TCSADRAIN, &j->ttystat);
|
||||
mksh_tcset(tty_fd, &j->ttystat);
|
||||
/* See comment in j_waitj regarding saved_ttypgrp. */
|
||||
if (ttypgrp_ok &&
|
||||
tcsetpgrp(tty_fd, (j->flags & JF_SAVEDTTYPGRP) ?
|
||||
j->saved_ttypgrp : j->pgrp) < 0) {
|
||||
rv = errno;
|
||||
if (j->flags & JF_SAVEDTTY)
|
||||
tcsetattr(tty_fd, TCSADRAIN, &tty_state);
|
||||
mksh_tcset(tty_fd, &tty_state);
|
||||
sigprocmask(SIG_SETMASK, &omask, NULL);
|
||||
bi_errorf("%s %s(%d, %ld) %s: %s",
|
||||
"1st", "tcsetpgrp", tty_fd,
|
||||
@ -832,7 +832,7 @@ j_resume(const char *cp, int bg)
|
||||
if (!bg) {
|
||||
j->flags &= ~JF_FG;
|
||||
if (ttypgrp_ok && (j->flags & JF_SAVEDTTY))
|
||||
tcsetattr(tty_fd, TCSADRAIN, &tty_state);
|
||||
mksh_tcset(tty_fd, &tty_state);
|
||||
if (ttypgrp_ok && tcsetpgrp(tty_fd, kshpgrp) < 0)
|
||||
warningf(true, "%s %s(%d, %ld) %s: %s",
|
||||
"fg: 2nd", "tcsetpgrp", tty_fd,
|
||||
@ -1130,7 +1130,7 @@ j_waitj(Job *j,
|
||||
(long)kshpgrp, "failed", strerror(errno));
|
||||
if (j->state == PSTOPPED) {
|
||||
j->flags |= JF_SAVEDTTY;
|
||||
tcgetattr(tty_fd, &j->ttystat);
|
||||
mksh_tcget(tty_fd, &j->ttystat);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -1146,9 +1146,9 @@ j_waitj(Job *j,
|
||||
*/
|
||||
if (j->state == PEXITED && j->status == 0 &&
|
||||
(j->flags & JF_USETTYMODE)) {
|
||||
tcgetattr(tty_fd, &tty_state);
|
||||
mksh_tcget(tty_fd, &tty_state);
|
||||
} else {
|
||||
tcsetattr(tty_fd, TCSADRAIN, &tty_state);
|
||||
mksh_tcset(tty_fd, &tty_state);
|
||||
/*-
|
||||
* Don't use tty mode if job is stopped and
|
||||
* later restarted and exits. Consider
|
||||
|
4
main.c
4
main.c
@ -34,7 +34,7 @@
|
||||
#include <locale.h>
|
||||
#endif
|
||||
|
||||
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.219 2012/05/04 21:47:02 tg Exp $");
|
||||
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.220 2012/05/04 22:18:26 tg Exp $");
|
||||
|
||||
extern char **environ;
|
||||
|
||||
@ -1076,7 +1076,7 @@ tty_init(bool init_ttystate, bool need_tty)
|
||||
close(tty_fd);
|
||||
tty_fd = -1;
|
||||
} else if (init_ttystate)
|
||||
tcgetattr(tty_fd, &tty_state);
|
||||
mksh_tcget(tty_fd, &tty_state);
|
||||
if (do_close)
|
||||
close(tfd);
|
||||
}
|
||||
|
25
sh.h
25
sh.h
@ -79,7 +79,12 @@
|
||||
#if HAVE_STRINGS_H
|
||||
#include <strings.h>
|
||||
#endif
|
||||
#if HAVE_TERMIOS_H
|
||||
#include <termios.h>
|
||||
#else
|
||||
/* shudder */
|
||||
#include <termio.h>
|
||||
#endif
|
||||
#include <time.h>
|
||||
#if HAVE_ULIMIT_H
|
||||
#include <ulimit.h>
|
||||
@ -152,7 +157,7 @@
|
||||
#endif
|
||||
|
||||
#ifdef EXTERN
|
||||
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.556 2012/05/04 22:05:02 tg Exp $");
|
||||
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.557 2012/05/04 22:18:27 tg Exp $");
|
||||
#endif
|
||||
#define MKSH_VERSION "R40 2012/04/27"
|
||||
|
||||
@ -350,6 +355,10 @@ extern int __cdecl setegid(gid_t);
|
||||
#endif
|
||||
|
||||
#if defined(__COHERENT__)
|
||||
#ifndef O_ACCMODE
|
||||
/* this need not work everywhere, take care */
|
||||
#define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
|
||||
#endif
|
||||
#define mksh_TIME(tv) do { \
|
||||
(tv).tv_usec = 0; \
|
||||
(tv).tv_sec = time(NULL); \
|
||||
@ -366,6 +375,16 @@ extern int __cdecl setegid(gid_t);
|
||||
#define mksh_lstat lstat
|
||||
#endif
|
||||
|
||||
#if HAVE_TERMIOS_H
|
||||
#define mksh_ttyst struct termios
|
||||
#define mksh_tcget(fd,st) tcgetattr((fd), (st))
|
||||
#define mksh_tcset(fd,st) tcsetattr((fd), TCSADRAIN, (st))
|
||||
#else
|
||||
#define mksh_ttyst struct termio
|
||||
#define mksh_tcget(fd,st) ioctl((fd), TCGETA, (st))
|
||||
#define mksh_tcset(fd,st) ioctl((fd), TCSETAW, (st))
|
||||
#endif
|
||||
|
||||
/* remove redundancies */
|
||||
|
||||
#if defined(MirBSD) && (MirBSD >= 0x08A8) && !defined(MKSH_OPTSTATIC)
|
||||
@ -1569,7 +1588,7 @@ int x_bind(const char *, const char *, bool);
|
||||
void x_init(void);
|
||||
int x_read(char *, size_t);
|
||||
#endif
|
||||
void x_mkraw(int, struct termios *, bool);
|
||||
void x_mkraw(int, mksh_ttyst *, bool);
|
||||
/* eval.c */
|
||||
char *substitute(const char *, int);
|
||||
char **eval(const char **, int);
|
||||
@ -1955,7 +1974,7 @@ int test_parse(Test_env *);
|
||||
|
||||
EXTERN int tty_fd E_INIT(-1); /* dup'd tty file descriptor */
|
||||
EXTERN bool tty_devtty; /* true if tty_fd is from /dev/tty */
|
||||
EXTERN struct termios tty_state; /* saved tty state */
|
||||
EXTERN mksh_ttyst tty_state; /* saved tty state */
|
||||
|
||||
extern void tty_init(bool, bool);
|
||||
extern void tty_close(void);
|
||||
|
Loading…
x
Reference in New Issue
Block a user