From owner-FreeBSD-tech-jp@jp.freebsd.org  Mon Jul 14 16:14:03 1997
Received: by jaz.jp.freebsd.org (8.8.6+2.7Wbeta5/8.7.3) id QAA06718
	Mon, 14 Jul 1997 16:14:03 +0900 (JST)
Received: by jaz.jp.freebsd.org (8.8.6+2.7Wbeta5/8.7.3) with ESMTP id QAA06696
	for <FreeBSD-tech-jp@jp.freebsd.org>; Mon, 14 Jul 1997 16:13:51 +0900 (JST)
Received: from sjc.mitaka.yokogawa.co.jp ([133.140.4.100]) by spgate.yokogawa.co.jp (8.8.5+2.7Wbeta5/3.5Wpl5:970610) with ESMTP id QAA21459 for <FreeBSD-tech-jp@jp.freebsd.org>; Mon, 14 Jul 1997 16:13:48 +0900 (JST)
Received: from leia-spider.pa.yokogawa.co.jp by sjc.mitaka.yokogawa.co.jp (8.7.3+2.6Wbeta5/6.4J.6-YOKOGAWA-R/GW)
	id QAA26636; Mon, 14 Jul 1997 16:13:47 +0900 (JST)
Received: from sapphire by leia-spider.pa.yokogawa.co.jp (1.38.193.4/6.4J.6-YOKOGAWA/pa)
	id AA07367; Mon, 14 Jul 1997 16:13:47 +0900
Received: from localhost by sapphire.pa.yokogawa.co.jp (8.6.12/3.3Wb)
	id QAA10176; Mon, 14 Jul 1997 16:15:06 +0900
Message-Id: <199707140715.QAA10176@sapphire.pa.yokogawa.co.jp>
To: FreeBSD-tech-jp@jp.freebsd.org
From: =?ISO-2022-JP?B?GyRCRURDZkh+SmY7UhsoQg==?= <Mihoko_Tanaka@yokogawa.co.jp>
X-Mailer: Mew version 1.54 on Emacs 19.28.2, Mule 2.3
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Date: Mon, 14 Jul 1997 16:15:06 +0900
Reply-To: FreeBSD-tech-jp@jp.freebsd.org
Precedence: bulk
X-Distribute: distribute [version 2.1 (Alpha) patchlevel=19]
X-Sequence: FreeBSD-tech-jp 312
Subject: [FreeBSD-tech-jp 312] 2.2.2-RELEASE =?ISO-2022-JP?B?GyRCJEckTklUNnE5ZxsoQg==?=
Errors-To: owner-FreeBSD-tech-jp@jp.freebsd.org
Sender: owner-FreeBSD-tech-jp@jp.freebsd.org


$B$3$s$K$A$O(B
$BEDCf(B($BH~(B)$B!w2#2OEE5!$H?=$7$^$9(B.

FreeBSD 2.2.2-RELEASE $B$r;HMQ$7$F$$$F(B $B$*$+$7$J8=>]$KAx6x$7$F$7$^$$$^(B
$B$7$F!"$$$m$$$mD4$Y$F$*$j$^$9$,(B
$B$I$&$7$F$b9T$-5M$^$C$F$7$^$C$?$N$G!"3'MM$N$*CN7C$r$*<Z$j$7$?$/!"(B
$B%a!<%k$9$k$3$H$K$7$^$7$?(B.
$B$h$m$7$/$*4j$$CW$7$^$9(B. _o_

*   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *

$B$$$m$$$m$J%W%m%;%9$,(B core $B$rEG$$$F;`$K$^$9(B.
$BNc$($P(B rlogind $B$d(B telnetd $B$J$I$G$9(B.
$B$$$D$bI,$:$H$$$&$o$1$G$O$J$/!"5)$K$A$c$s$HF0$/;~$b$"$j$^$9(B.
core $B$rEG$$$F;`$J$J$/$F$b!"(Bstartx $B$7$?;~$K(B xinit $B$,(B X $B$N%Q%9$r8+IU$1(B
$B$i$l$:$KN)$A>e$,$i$J$$(B($B$b$A$m$s(B PATH $B$K$O(B /usr/X11R6/bin $B$,F~$C$F$$(B
$B$^$9(B)$B$J$I!"$5$^$6$^$J8=>]$H$J$C$F(B $B$G$FMh$^$9(B.

$B%^%7%s$N9=@.$O(B

$B5!<o(B: HP Vectra XU
	CPU Pentium Pro 200MHz
	$B%-%c%C%7%e(B: 256K (CPU $BFbB"(B)
	$B%a%b%j(B    : ECC DIMM $B%a%b%j(B 64MB
	SCCI $B%G%#%9%/(B 2GB
	$B%0%i%U%#%C%/(B : Matrox Millennium 

FreeBSD Rev: FreeBSD 2.2.2-RELEASE
X       Rev: XFree86 3.3

$B$G$9(B. 2.1.7R $B$N;~$O(B $B855$$KF0$$$F$$$^$7$?(B.
2.2.2R $B$K(B Revup $B$7$F$+$i$3$N$h$&$K$J$j$^$7$?(B.
$B2?EY$+(B 2.1.7R <--> 2.2.2R $B$H(B OS $B$rF~$lD>$7$F(B($B=i4|%$%s%9%H!<%k(B)$B;n$7$F(B
$B$_$^$7$?$,!"(B 
2.1.7R $B$KLa$9$H@5>o$KF0:n$7!"(B2.2.2R $B$K$9$k$H$*$+$7$/$J$j$^$9(B.
$B46?($H$7$F$O!"$"$k%W%m%;%9$+$i(B fork + exec $B$7$F(B $BJL$N%W%m%;%9$r5/F0$9(B
$B$k$h$&$J>l9g$K!"$*$+$7$/$J$k$h$&$K;W$$$^$9(B.

$B$1$l$I$b(B $BF1$8(B 2.2.2R $B$r$$$l$F$b(B

	HP Vectra VA
	CPU Pentium Pro 200MHz
	$B%-%c%C%7%e(B: 256K (CPU $BFbB"(B)
	$B%a%b%j(B    : EDO 60ns 72 pin SIMM $B%a%b%j(B 64MB 
	IDE $B%G%#%9%/(B 2GB
	$B%0%i%U%#%C%/(B : CLGD-5446

$B$G$O5/$3$j$^$;$s(B.


$B$H$j$"$($:(B xinit $B$,(B X $B$N%Q%9$r8+IU$1$i$l$:$KN)$A>e$,$i$J$$>l9g$K9J$C(B
$B$F(B $B$9$3$7D4$Y$F$_$^$7$?(B.

  *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *

[ $B>c32MW;](B ]

startx $B$7$?$H$-$K!"(Bxinit $B$,<!$N$h$&$J%a%C%;!<%8$rI=<($7$F(B X $B$,N)$A>e$,$i$J$$(B.
$B$?$@$7(B $B$b$A$m$s(B PATH $B$K$O(B
    /sbin:/usr/sbin:/bin:/usr/bin:/usr/games:/usr/local/bin:/usr/X11R6/bin
$B$,@_Dj$7$F$"$k$7!"(BX $B$bE,@Z$J%5!<%P$K%j%s%/$rD%$C$F$"$j$^$9(B.

	xinit: No such file or directory

	no server "X" in PATH

	Use the -- option, or make sure that /usr/X11R6/bin is in your path and
        that X is a program or a link to the right type of server
	for your display. Posible server names include:

	    XF86_SVGA   SVGA color display on i386 PC
	    XF86_Mono   monochrome display on i386 PC
	    XF86_VGA16  16 color VGA display on i386 PC
	    XF86_S3     S3 color display on i386 PC
	    XF86_8514   IBM 8514/A color display on i386 PC
	    XF86_Mach8  ATI Mach8 color display on i386 PC
	    XF86_Mach32 ATI Mach32 color display on i386 PC
	    XF86_Mach64 ATI Mach64 color display on i386 PC
	    XF86_P9000  Weitek P9000 color display on i386 PC
	    XF86_AGX    IIT AGX color display on i386 PC
	    XF86_W32    Tseng ET4000/W32 color display on i386 PC

[ $BJdB-(B ]
	HP Vectra XU 6/200 $B$G$N$_H/@8(B

	$B5!<o(B: HP Vectra XU
	CPU Pentium Pro 200MHz
	ECC $B%a%b%j(B 64MB
	SCCI $B%G%#%9%/(B 2GB

	FreeBSD Rev: FreeBSD 2.2.2-RELEASE

 ($B;29M(B) HP Vectra VA 6/200 $B$G$OH/@8$;$:(B

	HP Vectra VA
	CPU Pentium Pro 200MHz
	$B%a%b%j(B 64MB (not ECC)
	IDE $B%G%#%9%/(B 2GB

[ $B>c32H/@8IQEY(B ]

  $BFCDj$N(B PC (HP Vectra XU 6/200)$B$G$O(B 20 $B2s$N$&$A(B 19 $B2s0L$O(B $B$3$N8=>](B
  $B$,H/@8$7$^$9(B($B$+$J$j$N(B $B9b3NN((B).  

[ $B2r@O35MW(B ]

  xinit $B$O(B execvp(3) $B$r;H$C$F(B X $B$r5/F0$7$h$&$H$7$^$9(B.
  $B$3$N(B execvp(3) $B$NCf$G(B bcopy(3) $B$r8F$V$Y$-$H$3$m$r!"(B
  ($B:G=i$O(B $B@5$7$/(B bcopy(3) $B$r8F$s$G$$$?$N$K(B) $BESCf$+$i(B
  sysarch(2)( i386_get_ldt(3) $B$^$?$O(B i386_set_ldt(3) $B$+$b(B..)  $B$r8F$s(B
  $B$G$7$^$C$F$$$^$9(B. 

[ $B2r@O>\:Y(B ]

  xinit $B$,(B X $B$r8F$V;~$O!"(Bexecvp(3)$B$r;HMQ$7$^$9(B.
  execvp(3) $B$O(B PATH $B$N$J$+$+$i(B X $B%5!<%P$rC5$7!"FbItE*$K(B execve(2) $B$r8F(B
  $B$S=P$7$^$9(B.
  $B$&$^$/9T$+$J$$>l9g!"$J$<$@$+(B $B$3$N(B execvp(3) $B$NCf$+$i(B sysarch(2) $B$,(B
  $B8F$P$l$F$$$k7A@W$,$"$j$^$9(B( $B0J2<$N(B ktrace & kdump $B$N7k2L;2>H(B ).
  $B$1$l$I$b(B execvp(3) $B$N%=!<%9$r8+$F$b!"(Bexecvp(3) $B$+$i(B sysarch(2) $B$r8F(B
  $B$V$h$&$J2U=j$O$"$j$^$;$s$G$7$?(B.
  sysarch(2) $B$r;HMQ$7$F$$$k%i%$%V%i%j4X?t$H$7$F$O(B
  i386_get_ldt(3), i386_set_ldt(3) $B$,$"$j$^$9$,$3$l$i$r;HMQ$7$F$$$k2U(B
  $B=j$b8+Ev$?$j$^$;$s(B.

  $B$b$&>/$7(B $B$h$/D4$Y$F$_$?$H$3$m!"$3$l$O!"FC$KL@<(E*$K(B sysarch(2) $B$r8F(B
  $B$s$G$$$k$N$G$O$J$/!"(B 
  $BK\Mh(B bcopy(3) $B$r8F$V$Y$-$H$3$m$r(B $B2?$i$+$N860x$G!"8m$C$F!"(Bsysarch(2) 
  ( i386_get_ldt(3) $B$^$?$O(B i386_set_ldt(3) )$B$,8F$P$l$F$7$^$C$F$$$k$h$&$G(B
  $B$9(B.

  $B$^$?(B execvp(3) $B$NCf$G!"(Bbcopy(3) $B$O7+$jJV$78F$S=P$7$^$9$,!"(B
  $B:G=i$N(B1$B2s$@$1$O(B $B@5$7$/(B bcopy(3) $B$r8F$s$G$$$k$h$&$G$9$,!"(B
  2$B2sL\$+$i$*$+$7$/$J$C$F$$$^$9(B.

  bcopy(3) $B$O(B libc $B$K4^$^$l$F$*$j!"(B(xinit $B$O(B $B6&M-%i%$%V%i%j$NJ}$r%j%s(B
  $B%/$7$F$$$k$N$G(B)$BDL>o(B GLOBAL OFFSET TABLE $B$r7PM3$7$F8F$S=P$5$l$^$9(B.
  $B$3$l$,!"2?$i$+$N860x$K$h$j(B
  GLOBAL OFFSET TABLE $B$NFbMF$,ESCf$G=q$-49$o$C$F$7$^$C$?$N$+!"(B
  $B$O$?$^$?(B $BA4$/JL$N860x$K$h$j!"$3$N$h$&$J>u67$K4Y$C$F$7$^$C$?$N$+!"(B
  $B8=>u$G$OA4A3J,$+$i$:$K$$$^$9(B.
  $B$?$@!"8m$C$F8F$S=P$5$l$?$H;W$o$l$k(B sysarch(2) $B$b(B $B$=$l<+BN$O(B $B$=$l$i(B
  $B$7$/8F$P$l$F$$$k$N$G!"!V%a%b%j>e$N%4%_$rFI$s$@!W!V%l%8%9%?$NCf?H$,2u(B
  $B$l$?!?2u$5$l$?!WEy$NM}M3$G$O$J$$$H;W$C$F$$$^$9(B.


$B!V$3$NJU$j$r5?$C$F$_$?$i(B..$B!W$J$I!"$I$s$J>.$5$J>pJs$G$b9=$$$^$;$s$N$G!"(B
$B$b$72?$+$*5$$E$-$N$3$H$,$"$j$^$7$?$i(B $B$*CN$i$;$/$@$5$$(B.
$B$h$m$7$/$*4j$$CW$7$^$9(B _o_


$B!|$&$^$/9T$+$J$$;~(B:

   479 xinit    RET   sigaction 0
   479 xinit    CALL  sigaction(0x1e,0xefbfdd7c,0xefbfdd70)
   479 xinit    RET   sigaction 0
   479 xinit    CALL  vfork
   480 xinit    RET   vfork 479/0x1df
   480 xinit    CALL  sigaction(0x15,0xefbfdd64,0xefbfdd58)
   480 xinit    RET   sigaction 0
   480 xinit    CALL  sigaction(0x16,0xefbfdd5c,0xefbfdd50)
   480 xinit    RET   sigaction 0
   480 xinit    CALL  sigaction(0x1e,0xefbfdd54,0xefbfdd48)
   480 xinit    RET   sigaction 0
   480 xinit    CALL  getpid
   480 xinit    RET   getpid 480/0x1e0
   480 xinit    CALL  setpgid(0,0x1e0)
   480 xinit    RET   setpgid 0

				<=== 1$B2sL\$N(B bcopy(3) $B$O$&$^$/9T$C$F(B
				     $B$$$k$i$7$$(B

   480 xinit    CALL  sysarch(0x181b,0xefbfd966)              <====
                             ~~~~~~~~ $B$3$l$O(B $BJ8;zNs(B "X" $B$X$N%]%$%s%?!#(B
				      $BK\Mh$J$i$P(B bcopy(3) $B$r8F$S=P$9(B
				      $B$Y$-$H$3$m$r4V0c$($F$$$k(B.
				      $B$3$N$3$H$O!"0J9_$K8F$S=P$5$l$k(B
				      sysarch(2) $B$N0z?t$r8+$F$$$/$HJ,$+$k(B.
				      (sysarch(2) $B$KEO$5$l$F$$$k0z?t(B
				       $B$O!"K\Mh(B bcopy(3) $B$KEO$5$l$k$Y$-$b$N(B )

				      0xefbfd966 $B$O!"(Bbuf[] $B$K(B "/sbin/"
				      $B$N8e$K(B "X"$B$r$$$l$k$Y$->l=j$N%"(B
				      $B%I%l%9(B. $BK\Ev$O(B bcopy(3) $B$G(B "X" $B$r(B
				      $B$$$l$h$&$H$7$F$$$?$H;W$o$l$k(B.


   480 xinit    RET   sysarch -1 errno 22 Invalid argument    <====
   480 xinit    CALL  execve(0xefbfd960,0x456c,0xefbfddf4)
		            ~~~~~~~~~~~
					0xefbfd960 $B$O(B buf[] $B$N@hF,%"%I%l%9(B
					$B$3$3$K(B /sbin/ $B$,@5$7$/F~$C$F(B
					$B$$$k$3$H$+$i!":G=i$N(B 1$B2sL\$N(B
					bcopy(3) $B$O(B $B@.8y$7$F$$$k$H;W$o$l$k(B

   480 xinit    NAMI  "/sbin/"
   480 xinit    RET   execve -1 errno 13 Permission denied


   480 xinit    CALL  sysarch(0x9fc6,0xefbfd960)              <====
   480 xinit    RET   sysarch -1 errno 22 Invalid argument    <====
   480 xinit    CALL  sysarch(0x181b,0xefbfd96a)              <====
                             ~~~~~~~~ $B$3$l$O(B $BJ8;zNs(B "X" $B$X$N%]%$%s%?(B.

   480 xinit    RET   sysarch -1 errno 22 Invalid argument    <====
   480 xinit    CALL  execve(0xefbfd960,0x456c,0xefbfddf4)
   480 xinit    NAMI  "/sbin/"
   480 xinit    RET   execve -1 errno 13 Permission denied

   480 xinit    CALL  sysarch(0x9fd0,0xefbfd960)              <====
   480 xinit    RET   sysarch -1 errno 22 Invalid argument    <====
   480 xinit    CALL  sysarch(0x181b,0xefbfd965)              <====
   480 xinit    RET   sysarch -1 errno 22 Invalid argument    <====
   480 xinit    CALL  execve(0xefbfd960,0x456c,0xefbfddf4)
   480 xinit    NAMI  "/sbi//"
   480 xinit    RET   execve -1 errno 2 No such file or directory

   480 xinit    CALL  sysarch(0x9fd5,0xefbfd960)              <====
   480 xinit    RET   sysarch -1 errno 22 Invalid argument    <====
   480 xinit    CALL  sysarch(0x181b,0xefbfd969)              <====
   480 xinit    RET   sysarch -1 errno 22 Invalid argument    <====
   480 xinit    CALL  execve(0xefbfd960,0x456c,0xefbfddf4)
   480 xinit    NAMI  "/sbi//"
   480 xinit    RET   execve -1 errno 2 No such file or directory

   480 xinit    CALL  sysarch(0x9fde,0xefbfd960)              <====
   480 xinit    RET   sysarch -1 errno 22 Invalid argument    <====
   480 xinit    CALL  sysarch(0x181b,0xefbfd96f)              <====
   480 xinit    RET   sysarch -1 errno 22 Invalid argument    <====
   480 xinit    CALL  execve(0xefbfd960,0x456c,0xefbfddf4)
   480 xinit    NAMI  "/sbi//"
   480 xinit    RET   execve -1 errno 2 No such file or directory

   480 xinit    CALL  sysarch(0x9fed,0xefbfd960)              <====
   480 xinit    RET   sysarch -1 errno 22 Invalid argument    <====
   480 xinit    CALL  sysarch(0x181b,0xefbfd96f)              <====
   480 xinit    RET   sysarch -1 errno 22 Invalid argument    <====
   480 xinit    CALL  execve(0xefbfd960,0x456c,0xefbfddf4)
   480 xinit    NAMI  "/sbi//"
   480 xinit    RET   execve -1 errno 2 No such file or directory

   480 xinit    CALL  sysarch(0x9ffc,0xefbfd960)              <====
   480 xinit    RET   sysarch -1 errno 22 Invalid argument    <====
   480 xinit    CALL  sysarch(0x181b,0xefbfd962)              <====
   480 xinit    RET   sysarch -1 errno 22 Invalid argument    <====
   480 xinit    CALL  execve(0xefbfd960,0x456c,0xefbfddf4)
   480 xinit    NAMI  "//b"
   480 xinit    RET   execve -1 errno 2 No such file or directory

   480 xinit    CALL  access(0x181b,0x4)
			     ~~~~~~
				$BJ8;zNs(B "X" $B$X$N%]%$%s%?(B
   480 xinit    NAMI  "X"
   480 xinit    RET   access -1 errno 2 No such file or directory
   480 xinit    CALL  write(0x2,0xefbfd63c,0x8)
   480 xinit    GIO   fd 2 wrote 8 bytes
       "xinit:  "
   480 xinit    RET   write 8
   480 xinit    CALL  write(0x2,0xefbfd638,0x26)
   480 xinit    GIO   fd 2 wrote 38 bytes
       "No such file or directory (errno 2):  "
   480 xinit    RET   write 38/0x26
   480 xinit    CALL  write(0x2,0xefbfd618,0x16)
   480 xinit    GIO   fd 2 wrote 22 bytes
       "no server "X" in PATH
       "

$B!|$&$^$/9T$/;~(B
   702 xinit    RET   sigaction 0
   702 xinit    CALL  sigaction(0x1e,0xefbfdcbc,0xefbfdcb0)
   702 xinit    RET   sigaction 0
   702 xinit    CALL  vfork
   703 xinit    RET   vfork 702/0x2be
   703 xinit    CALL  sigaction(0x15,0xefbfdca4,0xefbfdc98)
   703 xinit    RET   sigaction 0
   703 xinit    CALL  sigaction(0x16,0xefbfdc9c,0xefbfdc90)
   703 xinit    RET   sigaction 0
   703 xinit    CALL  sigaction(0x1e,0xefbfdc94,0xefbfdc88)
   703 xinit    RET   sigaction 0
   703 xinit    CALL  getpid
   703 xinit    RET   getpid 703/0x2bf
   703 xinit    CALL  setpgid(0,0x2bf)
   703 xinit    RET   setpgid 0
   703 xinit    CALL  break(0xb000)				<=====
   703 xinit    RET   break 0					<=====
   703 xinit    CALL  execve(0xefbfd8a0,0x456c,0xefbfdd34)
   703 xinit    NAMI  "/sbin/X"
   703 xinit    RET   execve -1 errno 2 No such file or directory
   703 xinit    CALL  execve(0xefbfd8a0,0x456c,0xefbfdd34)
   703 xinit    NAMI  "/bin/X"
   703 xinit    RET   execve -1 errno 2 No such file or directory
   703 xinit    CALL  execve(0xefbfd8a0,0x456c,0xefbfdd34)
   703 xinit    NAMI  "/usr/sbin/X"
   703 xinit    RET   execve -1 errno 2 No such file or directory
   703 xinit    CALL  execve(0xefbfd8a0,0x456c,0xefbfdd34)
   703 xinit    NAMI  "/usr/bin/X"
   703 xinit    RET   execve -1 errno 2 No such file or directory
   703 xinit    CALL  execve(0xefbfd8a0,0x456c,0xefbfdd34)
   703 xinit    NAMI  "/usr/games/X"
   703 xinit    RET   execve -1 errno 2 No such file or directory
   703 xinit    CALL  execve(0xefbfd8a0,0x456c,0xefbfdd34)
   703 xinit    NAMI  "/usr/local/bin/X"
   703 xinit    RET   execve -1 errno 2 No such file or directory
   703 xinit    CALL  execve(0xefbfd8a0,0x456c,0xefbfdd34)
   703 xinit    NAMI  "/usr/X11R6/bin/X"
   702 xinit    RET   vfork 703/0x2bf
   702 xinit    CALL  wait4(0xffffffff,0x4454,0x1,0)
   702 xinit    RET   wait4 0
   702 xinit    CALL  write(0x2,0x543b,0x1)
   702 xinit    GIO   fd 2 wrote 1 bytes

$B!|(B xinit $B$N%=!<%9(B $B3:Ev2U=j(B

startServer(server)
        char *server[];
{
        serverpid = vfork();
        switch(serverpid) {
        case 0:
                /*
                 * don't hang on read/write to control tty
                 */
#ifdef SIGTTIN
                (void) signal(SIGTTIN, SIG_IGN);
#endif
#ifdef SIGTTOU
                (void) signal(SIGTTOU, SIG_IGN);
#endif
                /*
                 * ignore SIGUSR1 in child.  The server
                 * will notice this and send SIGUSR1 back
                 * at xinit when ready to accept connections
                 */
                (void) signal(SIGUSR1, SIG_IGN);
                /*
                 * prevent server from getting sighup from vhangup()
                 * if client is xterm -L
                 */ 
#ifndef __EMX__
                setpgrp(0,getpid());
#endif
                 
                Execute (server);
                Error ("no server \"%s\" in PATH\n", server[0]);
                {
                    char **cpp;

                    fprintf (stderr,
"\nUse the -- option, or make sure that %s is in your path and\n",
                             bindir);
                    fprintf (stderr, 
"that \"%s\" is a program or a link to the right type of server\n",
                             server[0]);
                    fprintf (stderr,
"for your display.  Possible server names include:\n\n");
                    for (cpp = server_names; *cpp; cpp++) {
                        fprintf (stderr, "    %s\n", *cpp);
                    } 
                    fprintf (stderr, "\n");
                }
                exit (ERR_EXIT);

                break;
($BN,(B)
	}
}

static void Execute (vec)
    char **vec;                         /* has room from up above */
{               
    execvp (vec[0], vec);
    if (access (vec[0], R_OK) == 0) {
        vec--;                          /* back it up to stuff shell in */
        vec[0] = SHELL; 
        execvp (vec[0], vec);   
    }   
    return;
}                       


$B!|(B execvp(3) $B$N%=!<%9(B

int
execvp(name, argv)
        const char *name;
        char * const *argv;
{
        char **memp;
        register int cnt, lp, ln;
        register char *p;
        int eacces, etxtbsy;
        char *bp, *cur, *path, buf[MAXPATHLEN];

        /* If it's an absolute or relative path name, it's easy. */
        if (index(name, '/')) {
                bp = (char *)name;
                cur = path = NULL;
                goto retry;
        }
        bp = buf;

        /* Get the path we're searching. */
        if (!(path = getenv("PATH")))
                path = _PATH_DEFPATH;
        cur = path = strdup(path);

        eacces = etxtbsy = 0;
        while (p = strsep(&cur, ":")) {
                /*  
                 * It's a SHELL path -- double, leading and trailing colons
                 * mean the current directory.
                 */ 
                if (!*p) {
                        p = ".";
                        lp = 1;
                } else
                        lp = strlen(p);
                ln = strlen(name);

                /*
                 * If the path is too long complain.  This is a possible
                 * security issue; given a way to make the path too long
                 * the user may execute the wrong program.
                 */
                if (lp + ln + 2 > sizeof(buf)) {
                        (void)write(STDERR_FILENO, "execvp: ", 8);
                        (void)write(STDERR_FILENO, p, lp);
                        (void)write(STDERR_FILENO, ": path too long\n", 16);
                        continue;
                }   
                bcopy(p, buf, lp);		<===== (*)
                buf[lp] = '/';
                bcopy(name, buf + lp + 1, ln);  <===== (*)
                buf[lp + ln + 1] = '\0';

retry:          (void)execve(bp, argv, environ);
                switch(errno) {
                case EACCES: 
                        eacces = 1;
                        break;
                case ENOENT:
                        break; 
                case ENOEXEC:
                        for (cnt = 0; argv[cnt]; ++cnt)   
                                ;
                        memp = malloc((cnt + 2) * sizeof(char *));
                        if (memp == NULL)
                                goto done;
                        memp[0] = "sh";
                        memp[1] = bp;
                        bcopy(argv + 1, memp + 2, cnt * sizeof(char *));
                        (void)execve(_PATH_BSHELL, memp, environ);
                        free(memp);
                        goto done;
                case ETXTBSY: 
                        if (etxtbsy < 3)
                                (void)sleep(++etxtbsy);
                        goto retry;
                default:
                        goto done; 
                }       
        }       
        if (eacces)     
                errno = EACCES;
        else if (!errno)
                errno = ENOENT;  
done:   if (path)       
                free(path);
        return (-1);
}


--
Mihoko_Tanaka@yokogawa.co.jp
	
