Import sj3-patches-20040916

Original description for the changes:

sj3 の patch をまとめました。
基本的に、SUS v2 の範囲に対応しているシステムを考えています。ですので、
autoconf 的な #ifdef はあまり使うつもりはありません。
FreeBSD の ports 向けを第一目的にしているので、strlcpy() のような非標準の
関数も使ってしまっていますが、それについては要望があれば存在しないシステム
でも make できるように対応するつもりです。

この patch set に関する要望がもしもあるようでしたら、
	小野 寛生 (hiroo+sj3 at oikumene.gcd.org)
までご連絡ください。

---- patch 部分の Changelog
2004年 9月16日 木曜日 02時57分06秒 JST
* server/execute.c で malloc が失敗したときに dictlist を消去する処理が
  バグで動かない状態だったのを修正した。ただし、その直後に segfault する
  ようなコードになっているので問題は解消されていない。
  エラー回復時にどのような処理が意図されていたか理解しないと、修正は無理
  なので、そのままにしておく。

2004年 8月28日 土曜日 15時04分33秒 JST
* Move include/sj3lowlib.h and sj3lib/sj3lib_func.h to sj3lib/sj3lib.h.
  It will enable softwares depending on sj3lib.h compile again.

2004年 7月24日 土曜日
* ヘッダの重複 include を許容する。
	include/sj3lowlib.h, sj3lib/sj3lib_func.h
* 必要な型宣言のため、ヘッダを include する。

2004年 7月21日 水曜日 01時00分11秒 JST
* ISO C に適合するよういろいろ修正。(ただし、部分的)。
  修正内容は7/3に準ずる。
  修正したファイル名は省略する。
* dict/tool/makeseg.c の static index[] が <string.h> の index() と衝突
  しないように、segindex[] に改名した。
  (FreeBSD 4-stable/GCC 2.95.4 で compile に失敗していたものの修正)。

2004年 7月 4日 日曜日 17時47分33秒 JST
* ISO C に適合するよういろいろ修正。(ただし、部分的)。
  修正内容は7/3に準ずる。
  FreeBSD/amd64 上の gcc version 3.3.3 [FreeBSD] 20031106 では、致命的と
  思われる error/warning はなくなった。動作確認は sj3serv が起動すること
  のみ。

2004年 7月 3日 土曜日 03時53分23秒 JST
* スタイル修正を以下のファイルについて行なった。
  - 関数宣言を ISO C スタイルにした。
  - register キーワードを削除した。
  - 構造体、配列の初期化に適切な {} をつけた。
  - 条件判定文を if((something) != NULL) のような形式に変更した。
	kanakan/alloc.c,
	server/comuni.c, error.c, execute.c, setup.c
	sj3/funckey.c, sj3.c, sjgetchar.c
	sj3lib/Imakefile, sj.c, sj3lib.h
  - プロトタイプ宣言をいれたヘッダファイルを追加作成。
  	kanakan/kanakan.h, sj3/sj3.h, sj3lib/sj3lib_func.h

2004年 7月 2日 金曜日 01時09分09秒 JST
* FreeBSD の ports にある patch を大部分もってきた。
  注意点:
  - server/execute.c, setup.c
    snprintf と strlcpy を使っているコードがあり、将来は存在しない system の
    ためにコードをもってきて、sj3.tmpl あたりに knob を設けるべきである。
    現時点では、上記関数が存在しないシステムは、単にコンパイルに失敗する。
  - FreeBSD の -lxpg4 は外した。古い release では、有効にする必要あり。(sj3.tmpl)
* dict/tool を ISO C style に変更した。
  - amd64/FreeBSD で build できるようになったのを確認。
    (sporsored by: AMD64JP Project, AMD developer support program).
  - server は起動する。動作確認は未実施。

Signed-off-by: Masanori Ogino <mogino@acm.org>
This commit is contained in:
Hiroo Ono 2023-12-04 14:18:05 +09:00 • committed by Masanori Ogino
commit 4a2d141541
77 changed files with 3421 additions and 3850 deletions

213
sj3/sj3.c
View file

@ -44,6 +44,9 @@
#if defined(__NetBSD__)
#define LACKOF_SETLOCALE
#endif
#if defined(__FreeBSD__)
#include <sys/ioctl_compat.h>
#endif
#include <curses.h>
#endif
@ -55,13 +58,12 @@
#include <netdb.h>
#endif
#include <locale.h>
#include "sj3.h"
#ifndef _PATH_UTMP
#define _PATH_UTMP "/etc/utmp"
#endif
int fail ();
#ifdef SVR4
#define killpg(pid, sig) kill(-(pid),(sig))
@ -125,8 +127,6 @@ struct ttysize Ttysize;
#endif
int master;
int slave;
int exitprocess ();
int onwinch ();
#ifdef SYSV_TERMIOS
struct termios b;
@ -153,11 +153,9 @@ int Pid_shell;
int current_locale;
int done();
main (argc, argv)
int argc;
char **argv;
int
main (int argc, char** argv)
{
init (argv);
get_ttymode ();
@ -174,7 +172,8 @@ char **argv;
done ();
}
makecore ()
void
makecore (void)
{
chdir ("/tmp");
setgid (getgid ());
@ -183,11 +182,10 @@ makecore ()
}
init (argv)
char **argv;
void
init (char** argv)
{
char *cp, *strrchr ();
char *cp;
(void) signal (SIGTERM, (void (*)())done);
(void) signal (SIGWINCH, SIG_IGN);
@ -216,11 +214,11 @@ char **argv;
}
init_env()
void
init_env(void)
{
register char *uname, *hp, *tname;
register int i;
char *uname, *hp, *tname;
int i;
struct passwd *pwd, *getpwnam(), *getpwuid();
char *getlogin(), *getenv();
@ -263,16 +261,13 @@ init_env()
}
parsearg (argc, argv)
register int argc;
register char **argv;
void
parsearg (int argc, char** argv)
{
register int ap;
register char c;
register int sp;
register char **shella;
char *getenv();
int ap;
char c;
int sp;
char **shella;
shella = shellargs;
ap = 1;
@ -346,8 +341,8 @@ register char **argv;
}
usage()
void
usage(void)
{
aprintf ("Usage: %s [-option ...]\n\r", progname);
aprintf ("\t-option\n\r");
@ -367,8 +362,8 @@ usage()
}
sjinit ()
void
sjinit (void)
{
getfixtty ();
setshellname ();
@ -380,11 +375,11 @@ sjinit ()
}
setshellname ()
void
setshellname (void)
{
register char *s;
char *namep, *strrchr (), *getenv();
char *s;
char *namep;
if (shellprog[0] == '\0') {
s = getenv ("SHELL");
@ -412,8 +407,8 @@ setshellname ()
}
getfixtty ()
void
getfixtty (void)
{
getmaster ();
fixtty ();
@ -421,8 +416,8 @@ getfixtty ()
}
get_ttymode ()
void
get_ttymode (void)
{
#ifdef SYSV_TERMIOS
ioctl (0, TCGETS, (char *)&b);
@ -453,8 +448,8 @@ get_ttymode ()
}
getmaster ()
void
getmaster (void)
{
#ifdef SVR4
struct stat stb;
@ -520,11 +515,16 @@ getmaster ()
#endif
}
set_jmode (mode)
register int mode;
void
#ifdef __sony_news
set_jmode (int mode)
#else
set_jmode (void)
#endif
{
#ifdef __sony_news
register int term_mode;
int term_mode;
term_mode = mode & KM_KANJI;
if (term_mode == KM_JIS) {
@ -583,8 +583,8 @@ register int mode;
}
fixtty ()
void
fixtty (void)
{
#ifdef SYSV_TERMIOS
struct termios sbuf;
@ -640,17 +640,19 @@ fixtty ()
#include <grp.h>
#endif
setdev ()
void
setdev (void)
{
char *cp, *ttyname ();
char *cp;
#ifdef BSD43
struct group *ttygrp;
#endif
register Conversion *cv;
Conversion *cv;
cv = current_conversion;
if (cp = ttyname (2))
if ((cp = ttyname (2)) != NULL)
strcpy (tty_name, cp);
else
*tty_name = '\0';
@ -659,7 +661,7 @@ setdev ()
slave_name[strlen ("/dev/")] = 't';
#endif
#ifdef BSD43
if (ttygrp = getgrnam ("tty"))
if ((ttygrp = getgrnam ("tty")) != NULL)
chown(slave_name, getuid(), ttygrp->gr_gid);
else
chown(slave_name, getuid(), getgid());
@ -672,13 +674,13 @@ setdev ()
Ttyslot = nmttyslot (slave_name);
#endif
#ifdef SYSV_TERMIOS
if (ioctl(0, TIOCGWINSZ, &Ttysize) == 0) {
if (ioctl(0, TIOCGWINSZ, &Ttysize) == 0)
#else
if (ioctl(0, TIOCGSIZE, &Ttysize) == 0) {
if (ioctl(0, TIOCGSIZE, &Ttysize) == 0)
#endif
{
if (!status_line)
--Ttysize.ts_lines;
if (Ttysize.ts_lines < 1) {
@ -730,10 +732,10 @@ setdev ()
}
static char shellbuf[128];
forkshell ()
void
forkshell (void)
{
#ifdef SVR4
struct sigaction action;
@ -767,15 +769,16 @@ forkshell ()
#endif
}
sj3_setenv (ename, eval, buf)
char *ename, *eval, *buf;
void
sj3_setenv (char* ename, char* eval, char* buf)
{
register char *cp, *dp;
register char **ep = environ;
char *cp, *dp;
char **ep = environ;
while (dp = *ep++) {
while ((dp = *ep++) != NULL) {
for (cp = ename; *cp == *dp && *cp; cp++, dp++)
continue;
if (*cp == 0 && (*dp == '=' || *dp == 0)) {
@ -787,10 +790,10 @@ sj3_setenv (ename, eval, buf)
}
shellprocess ()
void
shellprocess (void)
{
int t, f;
int t, f;
#ifdef SYSV_TERMIOS
#ifdef SYSV_UTMP
struct utmp Utmp;
@ -830,12 +833,11 @@ shellprocess ()
#endif /* SYSV_UTMP */
#else /* SYSV_TERMIOS */
struct utmp Utmp;
register char *p;
char *p;
/*
* Remove warning.
* Patched by Hidekazu Kuroki(hidekazu@cs.titech.ac.jp) 1996/8/10
*/
char *ttyname (), *strrchr ();
#define SCPYN(a, b) strncpy(a, b, sizeof(a))
if ((p = ttyname (0)) == NULL)
@ -905,8 +907,8 @@ shellprocess ()
}
getslave ()
void
getslave (void)
{
#ifdef SVR4
grantpt(master);
@ -956,9 +958,8 @@ getslave ()
}
execcmd (cmd, ap)
char *cmd, **ap;
void
execcmd (char* cmd, char** ap)
{
int c;
char *getenv ();
@ -967,7 +968,7 @@ char *cmd, **ap;
path = getenv ("PATH");
cp = fullcmd;
while (c = *path++) {
while ((c = *path++) != 0) {
if (c == ':') {
*cp++ = '/';
*cp = '\0';
@ -995,16 +996,16 @@ char *cmd, **ap;
}
fail ()
void
fail (void)
{
(void) kill (0, SIGTERM);
done ();
}
done ()
void
done (void)
{
(void) signal (SIGWINCH, SIG_IGN);
@ -1013,7 +1014,9 @@ done ()
done2 ();
}
done2 ()
void
done2 (void)
{
chown (slave_name, 0, 0);
chmod (slave_name, 0666);
@ -1037,15 +1040,17 @@ done2 ()
done3 ();
}
done3 ()
void
done3 (void)
{
aprintf ("\r\nexit %s.\r\n", progname);
exit (0);
}
exitprocess ()
void
exitprocess (void)
{
#ifdef SVR4
siginfo_t info;
@ -1056,14 +1061,13 @@ exitprocess ()
return;
if (info.si_code == CLD_STOPPED)
#else
union wait status;
int pid;
int pid, status;
/*
* Remove warning.
* Patched by Hidekazu Kuroki(hidekazu@cs.titech.ac.jp) 1996/8/10
*/
pid = wait3 ((int *)&status, (WNOHANG|WUNTRACED), 0);
pid = wait3 (&status, (WNOHANG|WUNTRACED), 0);
if (WIFSTOPPED (status))
#endif
suspend();
@ -1072,8 +1076,8 @@ exitprocess ()
}
suspend ()
void
suspend (void)
{
#ifdef SIGTYPE_VOID
void (*old_sigtstp) ();
@ -1155,7 +1159,8 @@ cont:
}
#ifdef SVR4
clearutmpentry()
void
clearutmpentry(void)
{
struct utmpx *up;
#ifdef SVR4
@ -1195,7 +1200,8 @@ clearutmpentry()
}
#else /* SVR4 */
#ifdef SYSV_UTMP
clearutmpentry ()
void
clearutmpentry (void)
{
struct utmp Utmp;
@ -1214,7 +1220,8 @@ clearutmpentry ()
endutent();
}
#else /* SYSV_UTMP */
clearutmpentry ()
void
clearutmpentry (void)
{
int f;
struct utmp Utmp;
@ -1234,20 +1241,21 @@ clearutmpentry ()
#endif /* SVR4 */
onwinch ()
void
onwinch (void)
{
int ttypgrp;
register Conversion *cv;
Conversion *cv;
cv = current_conversion;
(void) signal (SIGWINCH, SIG_IGN);
#ifdef SYSV_TERMIOS
if (ioctl (0, TIOCGWINSZ, &Ttysize) == 0) {
if (ioctl (0, TIOCGWINSZ, &Ttysize) == 0)
#else /* SYSV_TERMIOS */
if (ioctl (0, TIOCGSIZE, &Ttysize) == 0) {
if (ioctl (0, TIOCGSIZE, &Ttysize) == 0)
#endif /* SYSV_TERMIOS */
{
if (!status_line) {
clear_guide_line ();
--Ttysize.ts_lines;
@ -1280,7 +1288,9 @@ onwinch ()
(void) signal (SIGWINCH, (void (*)())onwinch);
}
SetRegion ()
void
SetRegion (void)
{
set_tty_size ();
@ -1288,7 +1298,9 @@ SetRegion ()
RegionSet (1, Ttysize.ts_lines);
}
set_tty_size ()
void
set_tty_size (void)
{
#ifdef SYSV_TERMIOS
@ -1298,11 +1310,12 @@ set_tty_size ()
#endif /* SYSV_TERMIOS */
}
setsjserv(hname)
char *hname;
void
setsjserv(char* hname)
{
register char *p;
register int i;
char *p;
int i;
char *sbuf;
if (hname == NULL || *hname == '\0')
@ -1324,9 +1337,9 @@ char *hname;
cur_serv = serv_list[0];
}
char *
chmyhname(hname)
char *hname;
chmyhname(char* hname)
{
if (hname != NULL) {
if (strcmp(my_hname, hname) == 0 ||