Due to the new Caldera license the original BSD sources are available under the BSD license.
/* kern_exec.c 6.2 83/08/23 */
[...]
execve()
{
[...]
/*
* Read in first few bytes of file for segment sizes, ux_mag:
* 407 = plain executable
* 410 = RO text
* 413 = demand paged RO text
* Also an ASCII line beginning with #! is
* the file name of a ``shell'' and arguments may be prepended
* to the argument list if given here.
*
* SHELL NAMES ARE LIMITED IN LENGTH.
*
* ONLY ONE ARGUMENT MAY BE PASSED TO THE SHELL FROM
* THE ASCII LINE.
*/
[...]
switch (u.u_exdata.ux_mag) {
[...]
default:
if (u.u_exdata.ux_shell[0] != '#' ||
u.u_exdata.ux_shell[1] != '!' ||
indir) {
u.u_error = ENOEXEC;
goto bad;
}
cp = &u.u_exdata.ux_shell[2]; /* skip "#!" */
while (cp < &u.u_exdata.ux_shell[SHSIZE]) {
if (*cp == '\t')
*cp = ' ';
else if (*cp == '\n') {
*cp = '\0';
break;
}
cp++;
}
if (*cp != '\0') {
u.u_error = ENOEXEC;
goto bad;
}
cp = &u.u_exdata.ux_shell[2];
while (*cp == ' ')
cp++;
u.u_dirp = cp;
while (*cp && *cp != ' ')
cp++;
sharg = NULL;
if (*cp) {
*cp++ = '\0';
while (*cp == ' ')
cp++;
if (*cp) {
bcopy((caddr_t)cp, (caddr_t)cfarg, SHSIZE);
sharg = cfarg;
}
}
[...]