Return to BSD News archive
Received: by minnie.vk1xwt.ampr.org with NNTP
id AA1765 ; Tue, 23 Feb 93 14:57:11 EST
Newsgroups: comp.os.386bsd.bugs,comp.unix.bsd
Path: sserve!manuel.anu.edu.au!munnari.oz.au!news.Hawaii.Edu!ames!saimiri.primate.wisc.edu!zaphod.mps.ohio-state.edu!menudo.uh.edu!uuneo!sugar!karl
From: karl@NeoSoft.com (Karl Lehenbauer)
Subject: Patch to allow arguments on "#!" lines
Organization: NeoSoft Communications Services -- (713) 684-5900
Date: Sat, 20 Feb 1993 02:03:05 GMT
Message-ID: <C2q5p6.9K1@sugar.neosoft.com>
Lines: 97
This patch is from sim@cory.berkeley.edu (Peng-Toh Sim). It fixes a bug
in 386BSD where arguments on pound-bang lines (#!) were dropped.
After applying this patch, starting a script where the first line reads
#!/usr/local/bin/wishx -f
....will fire up Extended Wish, the X-windows scripting environment based
on the Tool command language (Tcl) and the Tk toolkit. (See comp.lang.tcl
and ftp to barkley.berkeley.edu for more info.)
*** kern_execve.c.pre-neosoft Fri Feb 19 14:30:37 1993
--- kern_execve.c Fri Feb 19 14:30:46 1993
***************
*** 111,116 ****
--- 111,117 ----
struct vmspace *vs;
caddr_t newframe;
char shellname[MAXINTERP]; /* 05 Aug 92*/
+ char *shellargs;
union {
char ex_shell[MAXINTERP]; /* #! and interpreter name */
struct exec ex_hdr;
***************
*** 201,206 ****
--- 202,220 ----
*sp++ = *cp++;
*sp = '\0';
+ /* copy the args in the #! line */
+ while (*cp == ' ')
+ cp++;
+ if (*cp) {
+ sp++;
+ shellargs = sp;
+ while (*cp)
+ *sp++ = *cp++;
+ *sp = '\0';
+ } else {
+ shellargs = 0;
+ }
+
indir = 1; /* indicate this is a script file */
vput(ndp->ni_vp);
FREE(ndp->ni_pnbuf, M_NAMEI);
***************
*** 274,280 ****
/* first, do (shell name if any then) args */
if (indir) {
ep = shellname;
! twice:
if (ep) {
/* did we outgrow initial argbuf, if so, die */
if (argbufp >= (char **)stringbuf) {
--- 288,294 ----
/* first, do (shell name if any then) args */
if (indir) {
ep = shellname;
! thrice:
if (ep) {
/* did we outgrow initial argbuf, if so, die */
if (argbufp >= (char **)stringbuf) {
***************
*** 294,304 ****
limitonargs -= stringlen;
}
if (indir) {
indir = 0;
/* orginal executable is 1st argument with scripts */
ep = uap->fname;
! goto twice;
}
/* terminate in case no more args to script */
suword(argbufp, 0);
--- 308,324 ----
limitonargs -= stringlen;
}
+ if (shellargs) {
+ ep = shellargs;
+ shellargs = 0;
+ goto thrice;
+ }
+
if (indir) {
indir = 0;
/* orginal executable is 1st argument with scripts */
ep = uap->fname;
! goto thrice;
}
/* terminate in case no more args to script */
suword(argbufp, 0);
--
-- Email info@NeoSoft.com for info on getting interactive Internet access.
"I didn't have time to write a short letter, so I wrote a long one instead."
-- Twain