summary |
tags |
clone url |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
18a4549)
SCCS-vsn: sys/kern/kern_proc.c 4.13
SCCS-vsn: sys/kern/vfs_syscalls.c 4.12
SCCS-vsn: sys/ufs/ffs/ffs_vnops.c 4.12
SCCS-vsn: sys/ufs/ffs/ufs_vnops.c 4.12
SCCS-vsn: sys/ufs/lfs/lfs_vnops.c 4.12
SCCS-vsn: sys/ufs/ufs/ufs_vnops.c 4.12
-/* kern_proc.c 4.12 81/04/28 */
+/* kern_proc.c 4.13 81/11/08 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
if ((ip = namei(uchar, 0)) == NULL)
return;
if ((ip = namei(uchar, 0)) == NULL)
return;
bno = 0;
bp = 0;
indir = 0;
uid = u.u_uid;
gid = u.u_gid;
bno = 0;
bp = 0;
indir = 0;
uid = u.u_uid;
gid = u.u_gid;
if (ip->i_mode & ISUID)
uid = ip->i_uid;
if (ip->i_mode & ISGID)
gid = ip->i_gid;
again:
if (ip->i_mode & ISUID)
uid = ip->i_uid;
if (ip->i_mode & ISGID)
gid = ip->i_gid;
again:
- if((u.u_procp->p_flag&STRC) && access(ip, IREAD))
+ if ((u.u_procp->p_flag&STRC) && access(ip, IREAD))
- if((ip->i_mode & IFMT) != IFREG ||
+ if ((ip->i_mode & IFMT) != IFREG ||
(ip->i_mode & (IEXEC|(IEXEC>>3)|(IEXEC>>6))) == 0) {
u.u_error = EACCES;
goto bad;
(ip->i_mode & (IEXEC|(IEXEC>>3)|(IEXEC>>6))) == 0) {
u.u_error = EACCES;
goto bad;
u.u_segflg = 1;
readi(ip);
u.u_segflg = 0;
u.u_segflg = 1;
readi(ip);
u.u_segflg = 0;
goto bad;
if (u.u_count > sizeof(u.u_exdata) - sizeof(u.u_exdata.Ux_A)
&& u.u_exdata.ux_shell[0] != '#') {
goto bad;
if (u.u_count > sizeof(u.u_exdata) - sizeof(u.u_exdata.Ux_A)
&& u.u_exdata.ux_shell[0] != '#') {
if (ap==NULL)
break;
na++;
if (ap==NULL)
break;
na++;
u.u_error = EFAULT;
do {
if (nc >= NCARGS-1)
u.u_error = EFAULT;
do {
if (nc >= NCARGS-1)
/*
* copy back arglist
*/
/*
* copy back arglist
*/
ucp = USRSTACK - nc - NBPW;
ap = ucp - na*NBPW - 3*NBPW;
u.u_ar0[SP] = ap;
ucp = USRSTACK - nc - NBPW;
ap = ucp - na*NBPW - 3*NBPW;
u.u_ar0[SP] = ap;
pagi = SPAGI;
else
pagi = 0;
pagi = SPAGI;
else
pagi = 0;
-
- if(u.u_exdata.ux_tsize!=0 && (ip->i_flag&ITEXT)==0 && ip->i_count!=1) {
+ if (u.u_exdata.ux_tsize!=0 && (ip->i_flag&ITEXT)==0 &&
+ ip->i_count!=1) {
register struct file *fp;
register struct file *fp;
- for (fp = file; fp < fileNFILE; fp++)
+ for (fp = file; fp < fileNFILE; fp++) {
+ if (fp->f_flag & FSOCKET)
+ continue;
if (fp->f_inode == ip && (fp->f_flag&FWRITE)) {
u.u_error = ETXTBSY;
goto bad;
}
if (fp->f_inode == ip && (fp->f_flag&FWRITE)) {
u.u_error = ETXTBSY;
goto bad;
}
- * find text and data sizes
- * try them out for possible
- * exceed of max sizes
+ * Compute text and data sizes and make sure not too large.
ts = clrnd(btoc(u.u_exdata.ux_tsize));
ds = clrnd(btoc((u.u_exdata.ux_dsize+u.u_exdata.ux_bsize)));
ss = clrnd(SSIZE + btoc(nargc));
if (chksize(ts, ds, ss))
goto bad;
ts = clrnd(btoc(u.u_exdata.ux_tsize));
ds = clrnd(btoc((u.u_exdata.ux_dsize+u.u_exdata.ux_bsize)));
ss = clrnd(SSIZE + btoc(nargc));
if (chksize(ts, ds, ss))
goto bad;
+
+ /*
+ * Make sure enough space to start process.
+ */
u.u_cdmap = zdmap;
u.u_csmap = zdmap;
if (swpexpand(ds, ss, &u.u_cdmap, &u.u_csmap) == NULL)
u.u_cdmap = zdmap;
u.u_csmap = zdmap;
if (swpexpand(ds, ss, &u.u_cdmap, &u.u_csmap) == NULL)
* set SUID/SGID protections, if no tracing
*/
if ((u.u_procp->p_flag&STRC)==0) {
* set SUID/SGID protections, if no tracing
*/
if ((u.u_procp->p_flag&STRC)==0) {
-#ifndef MELB
- if(u.u_uid != 0)
-#endif
- {
- u.u_uid = uid;
- u.u_procp->p_uid = uid;
- }
+ u.u_uid = uid;
+ u.u_procp->p_uid = uid;
u.u_gid = gid;
} else
psignal(u.u_procp, SIGTRAP);
u.u_gid = gid;
} else
psignal(u.u_procp, SIGTRAP);
register i;
long sigmask;
register i;
long sigmask;
- for(rp = &u.u_signal[0], sigmask = 1L; rp < &u.u_signal[NSIG];
+ for (rp = &u.u_signal[0], sigmask = 1L; rp < &u.u_signal[NSIG];
sigmask <<= 1, rp++) {
switch (*rp) {
sigmask <<= 1, rp++) {
switch (*rp) {
- for(rp = &u.u_ar0[0]; rp < &u.u_ar0[16];)
+ for (rp = &u.u_ar0[0]; rp < &u.u_ar0[16];)
*rp++ = 0;
*/
u.u_ar0[PC] = u.u_exdata.ux_entloc + 2; /* skip over entry mask */
*rp++ = 0;
*/
u.u_ar0[PC] = u.u_exdata.ux_entloc + 2; /* skip over entry mask */
- for(i=0; i<NOFILE; i++) {
+ for (i=0; i<NOFILE; i++) {
if (u.u_pofile[i]&EXCLOSE) {
closef(u.u_ofile[i]);
u.u_ofile[i] = NULL;
u.u_pofile[i] &= ~EXCLOSE;
}
}
if (u.u_pofile[i]&EXCLOSE) {
closef(u.u_ofile[i]);
u.u_ofile[i] = NULL;
u.u_pofile[i] &= ~EXCLOSE;
}
}
/*
* Remember file name for accounting.
*/
/*
* Remember file name for accounting.
*/
- * exit system call:
- * pass back caller's arg
+ * Exit system call: pass back caller's arg
(void) spl0();
p->p_cpticks = 0;
p->p_pctcpu = 0;
(void) spl0();
p->p_cpticks = 0;
p->p_pctcpu = 0;
u.u_signal[i] = SIG_IGN;
/*
* Release virtual memory. If we resulted from
u.u_signal[i] = SIG_IGN;
/*
* Release virtual memory. If we resulted from
sleep((caddr_t)p, PZERO - 1);
p->p_flag &= ~SVFDONE;
}
sleep((caddr_t)p, PZERO - 1);
p->p_flag &= ~SVFDONE;
}
- for(i=0; i<NOFILE; i++) {
+ for (i=0; i<NOFILE; i++) {
f = u.u_ofile[i];
u.u_ofile[i] = NULL;
closef(f);
}
f = u.u_ofile[i];
u.u_ofile[i] = NULL;
closef(f);
}
iput(u.u_cdir);
if (u.u_rdir) {
iput(u.u_cdir);
if (u.u_rdir) {
iput(u.u_rdir);
}
u.u_limit[LIM_FSIZE] = INFINITY;
iput(u.u_rdir);
}
u.u_limit[LIM_FSIZE] = INFINITY;
vrelpt(u.u_procp);
vrelu(u.u_procp, 0);
multprog--;
vrelpt(u.u_procp);
vrelu(u.u_procp, 0);
multprog--;
-/* spl7(); /* clock will get mad because of overlaying */
p->p_stat = SZOMB;
noproc = 1;
i = PIDHASH(p->p_pid);
p->p_stat = SZOMB;
noproc = 1;
i = PIDHASH(p->p_pid);
((struct xproc *)p)->xp_xstat = rv; /* overlay */
((struct xproc *)p)->xp_vm = u.u_vm; /* overlay */
vmsadd(&((struct xproc *)p)->xp_vm, &u.u_cvm);
((struct xproc *)p)->xp_xstat = rv; /* overlay */
((struct xproc *)p)->xp_vm = u.u_vm; /* overlay */
vmsadd(&((struct xproc *)p)->xp_vm, &u.u_cvm);
- for(q = proc; q < procNPROC; q++)
- if(q->p_pptr == p) {
+ for (q = proc; q < procNPROC; q++)
+ if (q->p_pptr == p) {
q->p_pptr = &proc[1];
q->p_ppid = 1;
wakeup((caddr_t)&proc[1]);
q->p_pptr = &proc[1];
q->p_ppid = 1;
wakeup((caddr_t)&proc[1]);
- for(p = proc; p < procNPROC; p++)
- if(p->p_pptr == u.u_procp) {
+ for (p = proc; p < procNPROC; p++)
+ if (p->p_pptr == u.u_procp) {
- if(p->p_stat == SZOMB) {
+ if (p->p_stat == SZOMB) {
u.u_r.r_val1 = p->p_pid;
u.u_r.r_val2 = ((struct xproc *)p)->xp_xstat;
((struct xproc *)p)->xp_xstat = 0;
u.u_r.r_val1 = p->p_pid;
u.u_r.r_val2 = ((struct xproc *)p)->xp_xstat;
((struct xproc *)p)->xp_xstat = 0;
- for(p1 = proc; p1 < procNPROC; p1++) {
+ for (p1 = proc; p1 < procNPROC; p1++) {
if (p1->p_stat==NULL && p2==NULL)
p2 = p1;
else {
if (p1->p_stat==NULL && p2==NULL)
p2 = p1;
else {
goto out;
}
p1 = u.u_procp;
goto out;
}
p1 = u.u_procp;
+ if (newproc(isvfork)) {
u.u_r.r_val1 = p1->p_pid;
u.u_r.r_val2 = 1; /* child */
u.u_start = time;
u.u_r.r_val1 = p1->p_pid;
u.u_r.r_val2 = 1; /* child */
u.u_start = time;
-/* vfs_syscalls.c 4.11 81/08/12 */
+/* vfs_syscalls.c 4.12 81/11/08 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
uap = (struct a *)u.u_ap;
fp = getf(uap->fdes);
uap = (struct a *)u.u_ap;
fp = getf(uap->fdes);
- if (fp->f_flag&FPORT) {
- ptstat(fp);
- return;
- }
-#ifdef BBNNET
- if (fp->f_flag&FNET) {
- u.u_error = EINVAL;
- return;
- }
-#endif
- stat1(fp->f_inode, uap->sb);
+ if (fp->f_flag & FSOCKET)
+ sostat(fp->f_socket);
+ else
+ stat1(fp->f_inode, uap->sb);
- * the stat system call.
uap = (struct a *)u.u_ap;
ip = namei(uchar, 0);
uap = (struct a *)u.u_ap;
ip = namei(uchar, 0);
return;
stat1(ip, uap->sb);
iput(ip);
return;
stat1(ip, uap->sb);
iput(ip);
* get the inode and pass appropriate parts back.
*/
stat1(ip, ub)
* get the inode and pass appropriate parts back.
*/
stat1(ip, ub)
-register struct inode *ip;
-struct stat *ub;
+ register struct inode *ip;
+ struct stat *ub;
{
register struct dinode *dp;
register struct buf *bp;
{
register struct dinode *dp;
register struct buf *bp;
IUPDAT(ip, &time, &time, 0);
/*
IUPDAT(ip, &time, &time, 0);
/*
- * first copy from inode table
+ * First copy from inode table
*/
ds.st_dev = ip->i_dev;
ds.st_ino = ip->i_number;
*/
ds.st_dev = ip->i_dev;
ds.st_ino = ip->i_number;
ds.st_rdev = (dev_t)ip->i_un.i_rdev;
ds.st_size = ip->i_size;
/*
ds.st_rdev = (dev_t)ip->i_un.i_rdev;
ds.st_size = ip->i_size;
/*
- * next the dates in the disk
+ * Next the dates in the disk
*/
bp = bread(ip->i_dev, itod(ip->i_number));
dp = bp->b_un.b_dino;
*/
bp = bread(ip->i_dev, itod(ip->i_number));
dp = bp->b_un.b_dino;
m = uap->fdes & ~077;
uap->fdes &= 077;
fp = getf(uap->fdes);
m = uap->fdes & ~077;
uap->fdes &= 077;
fp = getf(uap->fdes);
return;
if ((m&0100) == 0) {
if ((i = ufalloc()) < 0)
return;
if ((m&0100) == 0) {
if ((i = ufalloc()) < 0)
u.u_error = EBADF;
return;
}
u.u_error = EBADF;
return;
}
- if (u.u_vrpages[i]) {
- u.u_error = ETXTBSY;
- return;
- }
if (u.u_ofile[i]!=NULL)
closef(u.u_ofile[i]);
u.u_ofile[i] = fp;
if (u.u_ofile[i]!=NULL)
closef(u.u_ofile[i]);
u.u_ofile[i] = fp;
- * the mount system call.
dev_t dev;
register struct inode *ip;
register struct mount *mp;
dev_t dev;
register struct inode *ip;
register struct mount *mp;
uap = (struct a *)u.u_ap;
dev = getmdev();
uap = (struct a *)u.u_ap;
dev = getmdev();
return;
u.u_dirp = (caddr_t)uap->freg;
ip = namei(uchar, 0);
return;
u.u_dirp = (caddr_t)uap->freg;
ip = namei(uchar, 0);
- if(ip->i_count!=1 || (ip->i_mode&(IFBLK&IFCHR))!=0)
+ if (ip->i_count!=1 || (ip->i_mode&IFMT) != IFDIR)
- for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) {
- if(mp->m_bufp != NULL) {
- if(dev == mp->m_dev)
+ for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++) {
+ if (mp->m_bufp != NULL) {
+ if (dev == mp->m_dev)
goto out;
(*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
goto out;
(*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
goto out;
bp = bread(dev, SUPERB);
goto out;
bp = bread(dev, SUPERB);
*cp = 0;
brelse(bp);
ip->i_flag |= IMOUNT;
*cp = 0;
brelse(bp);
ip->i_flag |= IMOUNT;
return;
xumount(dev); /* remove unused sticky files from text table */
update();
return;
xumount(dev); /* remove unused sticky files from text table */
update();
- for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++)
- if(mp->m_bufp != NULL && dev == mp->m_dev)
+ for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++)
+ if (mp->m_bufp != NULL && dev == mp->m_dev)
goto found;
u.u_error = EINVAL;
return;
found:
stillopen = 0;
goto found;
u.u_error = EINVAL;
return;
found:
stillopen = 0;
- for(ip = inode; ip < inodeNINODE; ip++)
+ for (ip = inode; ip < inodeNINODE; ip++)
if (ip->i_number != 0 && dev == ip->i_dev) {
u.u_error = EBUSY;
return;
if (ip->i_number != 0 && dev == ip->i_dev) {
u.u_error = EBUSY;
return;
stillopen++;
ip = mp->m_inodp;
ip->i_flag &= ~IMOUNT;
stillopen++;
ip = mp->m_inodp;
ip->i_flag &= ~IMOUNT;
iput(ip);
if ((bp = getblk(dev, SUPERB)) != mp->m_bufp)
panic("umount");
iput(ip);
if ((bp = getblk(dev, SUPERB)) != mp->m_bufp)
panic("umount");
if (!suser())
return(NODEV);
ip = namei(uchar, 0);
if (!suser())
return(NODEV);
ip = namei(uchar, 0);
- if((ip->i_mode&IFMT) != IFBLK)
+ if ((ip->i_mode&IFMT) != IFBLK)
u.u_error = ENOTBLK;
dev = (dev_t)ip->i_un.i_rdev;
u.u_error = ENOTBLK;
dev = (dev_t)ip->i_un.i_rdev;
- if(major(dev) >= nblkdev)
+ if (major(dev) >= nblkdev)
u.u_error = ENXIO;
iput(ip);
return(dev);
u.u_error = ENXIO;
iput(ip);
return(dev);
-/* ffs_vnops.c 4.11 81/08/12 */
+/* ffs_vnops.c 4.12 81/11/08 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
uap = (struct a *)u.u_ap;
fp = getf(uap->fdes);
uap = (struct a *)u.u_ap;
fp = getf(uap->fdes);
- if (fp->f_flag&FPORT) {
- ptstat(fp);
- return;
- }
-#ifdef BBNNET
- if (fp->f_flag&FNET) {
- u.u_error = EINVAL;
- return;
- }
-#endif
- stat1(fp->f_inode, uap->sb);
+ if (fp->f_flag & FSOCKET)
+ sostat(fp->f_socket);
+ else
+ stat1(fp->f_inode, uap->sb);
- * the stat system call.
uap = (struct a *)u.u_ap;
ip = namei(uchar, 0);
uap = (struct a *)u.u_ap;
ip = namei(uchar, 0);
return;
stat1(ip, uap->sb);
iput(ip);
return;
stat1(ip, uap->sb);
iput(ip);
* get the inode and pass appropriate parts back.
*/
stat1(ip, ub)
* get the inode and pass appropriate parts back.
*/
stat1(ip, ub)
-register struct inode *ip;
-struct stat *ub;
+ register struct inode *ip;
+ struct stat *ub;
{
register struct dinode *dp;
register struct buf *bp;
{
register struct dinode *dp;
register struct buf *bp;
IUPDAT(ip, &time, &time, 0);
/*
IUPDAT(ip, &time, &time, 0);
/*
- * first copy from inode table
+ * First copy from inode table
*/
ds.st_dev = ip->i_dev;
ds.st_ino = ip->i_number;
*/
ds.st_dev = ip->i_dev;
ds.st_ino = ip->i_number;
ds.st_rdev = (dev_t)ip->i_un.i_rdev;
ds.st_size = ip->i_size;
/*
ds.st_rdev = (dev_t)ip->i_un.i_rdev;
ds.st_size = ip->i_size;
/*
- * next the dates in the disk
+ * Next the dates in the disk
*/
bp = bread(ip->i_dev, itod(ip->i_number));
dp = bp->b_un.b_dino;
*/
bp = bread(ip->i_dev, itod(ip->i_number));
dp = bp->b_un.b_dino;
m = uap->fdes & ~077;
uap->fdes &= 077;
fp = getf(uap->fdes);
m = uap->fdes & ~077;
uap->fdes &= 077;
fp = getf(uap->fdes);
return;
if ((m&0100) == 0) {
if ((i = ufalloc()) < 0)
return;
if ((m&0100) == 0) {
if ((i = ufalloc()) < 0)
u.u_error = EBADF;
return;
}
u.u_error = EBADF;
return;
}
- if (u.u_vrpages[i]) {
- u.u_error = ETXTBSY;
- return;
- }
if (u.u_ofile[i]!=NULL)
closef(u.u_ofile[i]);
u.u_ofile[i] = fp;
if (u.u_ofile[i]!=NULL)
closef(u.u_ofile[i]);
u.u_ofile[i] = fp;
- * the mount system call.
dev_t dev;
register struct inode *ip;
register struct mount *mp;
dev_t dev;
register struct inode *ip;
register struct mount *mp;
uap = (struct a *)u.u_ap;
dev = getmdev();
uap = (struct a *)u.u_ap;
dev = getmdev();
return;
u.u_dirp = (caddr_t)uap->freg;
ip = namei(uchar, 0);
return;
u.u_dirp = (caddr_t)uap->freg;
ip = namei(uchar, 0);
- if(ip->i_count!=1 || (ip->i_mode&(IFBLK&IFCHR))!=0)
+ if (ip->i_count!=1 || (ip->i_mode&IFMT) != IFDIR)
- for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) {
- if(mp->m_bufp != NULL) {
- if(dev == mp->m_dev)
+ for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++) {
+ if (mp->m_bufp != NULL) {
+ if (dev == mp->m_dev)
goto out;
(*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
goto out;
(*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
goto out;
bp = bread(dev, SUPERB);
goto out;
bp = bread(dev, SUPERB);
*cp = 0;
brelse(bp);
ip->i_flag |= IMOUNT;
*cp = 0;
brelse(bp);
ip->i_flag |= IMOUNT;
return;
xumount(dev); /* remove unused sticky files from text table */
update();
return;
xumount(dev); /* remove unused sticky files from text table */
update();
- for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++)
- if(mp->m_bufp != NULL && dev == mp->m_dev)
+ for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++)
+ if (mp->m_bufp != NULL && dev == mp->m_dev)
goto found;
u.u_error = EINVAL;
return;
found:
stillopen = 0;
goto found;
u.u_error = EINVAL;
return;
found:
stillopen = 0;
- for(ip = inode; ip < inodeNINODE; ip++)
+ for (ip = inode; ip < inodeNINODE; ip++)
if (ip->i_number != 0 && dev == ip->i_dev) {
u.u_error = EBUSY;
return;
if (ip->i_number != 0 && dev == ip->i_dev) {
u.u_error = EBUSY;
return;
stillopen++;
ip = mp->m_inodp;
ip->i_flag &= ~IMOUNT;
stillopen++;
ip = mp->m_inodp;
ip->i_flag &= ~IMOUNT;
iput(ip);
if ((bp = getblk(dev, SUPERB)) != mp->m_bufp)
panic("umount");
iput(ip);
if ((bp = getblk(dev, SUPERB)) != mp->m_bufp)
panic("umount");
if (!suser())
return(NODEV);
ip = namei(uchar, 0);
if (!suser())
return(NODEV);
ip = namei(uchar, 0);
- if((ip->i_mode&IFMT) != IFBLK)
+ if ((ip->i_mode&IFMT) != IFBLK)
u.u_error = ENOTBLK;
dev = (dev_t)ip->i_un.i_rdev;
u.u_error = ENOTBLK;
dev = (dev_t)ip->i_un.i_rdev;
- if(major(dev) >= nblkdev)
+ if (major(dev) >= nblkdev)
u.u_error = ENXIO;
iput(ip);
return(dev);
u.u_error = ENXIO;
iput(ip);
return(dev);
-/* ufs_vnops.c 4.11 81/08/12 */
+/* ufs_vnops.c 4.12 81/11/08 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
uap = (struct a *)u.u_ap;
fp = getf(uap->fdes);
uap = (struct a *)u.u_ap;
fp = getf(uap->fdes);
- if (fp->f_flag&FPORT) {
- ptstat(fp);
- return;
- }
-#ifdef BBNNET
- if (fp->f_flag&FNET) {
- u.u_error = EINVAL;
- return;
- }
-#endif
- stat1(fp->f_inode, uap->sb);
+ if (fp->f_flag & FSOCKET)
+ sostat(fp->f_socket);
+ else
+ stat1(fp->f_inode, uap->sb);
- * the stat system call.
uap = (struct a *)u.u_ap;
ip = namei(uchar, 0);
uap = (struct a *)u.u_ap;
ip = namei(uchar, 0);
return;
stat1(ip, uap->sb);
iput(ip);
return;
stat1(ip, uap->sb);
iput(ip);
* get the inode and pass appropriate parts back.
*/
stat1(ip, ub)
* get the inode and pass appropriate parts back.
*/
stat1(ip, ub)
-register struct inode *ip;
-struct stat *ub;
+ register struct inode *ip;
+ struct stat *ub;
{
register struct dinode *dp;
register struct buf *bp;
{
register struct dinode *dp;
register struct buf *bp;
IUPDAT(ip, &time, &time, 0);
/*
IUPDAT(ip, &time, &time, 0);
/*
- * first copy from inode table
+ * First copy from inode table
*/
ds.st_dev = ip->i_dev;
ds.st_ino = ip->i_number;
*/
ds.st_dev = ip->i_dev;
ds.st_ino = ip->i_number;
ds.st_rdev = (dev_t)ip->i_un.i_rdev;
ds.st_size = ip->i_size;
/*
ds.st_rdev = (dev_t)ip->i_un.i_rdev;
ds.st_size = ip->i_size;
/*
- * next the dates in the disk
+ * Next the dates in the disk
*/
bp = bread(ip->i_dev, itod(ip->i_number));
dp = bp->b_un.b_dino;
*/
bp = bread(ip->i_dev, itod(ip->i_number));
dp = bp->b_un.b_dino;
m = uap->fdes & ~077;
uap->fdes &= 077;
fp = getf(uap->fdes);
m = uap->fdes & ~077;
uap->fdes &= 077;
fp = getf(uap->fdes);
return;
if ((m&0100) == 0) {
if ((i = ufalloc()) < 0)
return;
if ((m&0100) == 0) {
if ((i = ufalloc()) < 0)
u.u_error = EBADF;
return;
}
u.u_error = EBADF;
return;
}
- if (u.u_vrpages[i]) {
- u.u_error = ETXTBSY;
- return;
- }
if (u.u_ofile[i]!=NULL)
closef(u.u_ofile[i]);
u.u_ofile[i] = fp;
if (u.u_ofile[i]!=NULL)
closef(u.u_ofile[i]);
u.u_ofile[i] = fp;
- * the mount system call.
dev_t dev;
register struct inode *ip;
register struct mount *mp;
dev_t dev;
register struct inode *ip;
register struct mount *mp;
uap = (struct a *)u.u_ap;
dev = getmdev();
uap = (struct a *)u.u_ap;
dev = getmdev();
return;
u.u_dirp = (caddr_t)uap->freg;
ip = namei(uchar, 0);
return;
u.u_dirp = (caddr_t)uap->freg;
ip = namei(uchar, 0);
- if(ip->i_count!=1 || (ip->i_mode&(IFBLK&IFCHR))!=0)
+ if (ip->i_count!=1 || (ip->i_mode&IFMT) != IFDIR)
- for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) {
- if(mp->m_bufp != NULL) {
- if(dev == mp->m_dev)
+ for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++) {
+ if (mp->m_bufp != NULL) {
+ if (dev == mp->m_dev)
goto out;
(*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
goto out;
(*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
goto out;
bp = bread(dev, SUPERB);
goto out;
bp = bread(dev, SUPERB);
*cp = 0;
brelse(bp);
ip->i_flag |= IMOUNT;
*cp = 0;
brelse(bp);
ip->i_flag |= IMOUNT;
return;
xumount(dev); /* remove unused sticky files from text table */
update();
return;
xumount(dev); /* remove unused sticky files from text table */
update();
- for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++)
- if(mp->m_bufp != NULL && dev == mp->m_dev)
+ for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++)
+ if (mp->m_bufp != NULL && dev == mp->m_dev)
goto found;
u.u_error = EINVAL;
return;
found:
stillopen = 0;
goto found;
u.u_error = EINVAL;
return;
found:
stillopen = 0;
- for(ip = inode; ip < inodeNINODE; ip++)
+ for (ip = inode; ip < inodeNINODE; ip++)
if (ip->i_number != 0 && dev == ip->i_dev) {
u.u_error = EBUSY;
return;
if (ip->i_number != 0 && dev == ip->i_dev) {
u.u_error = EBUSY;
return;
stillopen++;
ip = mp->m_inodp;
ip->i_flag &= ~IMOUNT;
stillopen++;
ip = mp->m_inodp;
ip->i_flag &= ~IMOUNT;
iput(ip);
if ((bp = getblk(dev, SUPERB)) != mp->m_bufp)
panic("umount");
iput(ip);
if ((bp = getblk(dev, SUPERB)) != mp->m_bufp)
panic("umount");
if (!suser())
return(NODEV);
ip = namei(uchar, 0);
if (!suser())
return(NODEV);
ip = namei(uchar, 0);
- if((ip->i_mode&IFMT) != IFBLK)
+ if ((ip->i_mode&IFMT) != IFBLK)
u.u_error = ENOTBLK;
dev = (dev_t)ip->i_un.i_rdev;
u.u_error = ENOTBLK;
dev = (dev_t)ip->i_un.i_rdev;
- if(major(dev) >= nblkdev)
+ if (major(dev) >= nblkdev)
u.u_error = ENXIO;
iput(ip);
return(dev);
u.u_error = ENXIO;
iput(ip);
return(dev);
-/* lfs_vnops.c 4.11 81/08/12 */
+/* lfs_vnops.c 4.12 81/11/08 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
uap = (struct a *)u.u_ap;
fp = getf(uap->fdes);
uap = (struct a *)u.u_ap;
fp = getf(uap->fdes);
- if (fp->f_flag&FPORT) {
- ptstat(fp);
- return;
- }
-#ifdef BBNNET
- if (fp->f_flag&FNET) {
- u.u_error = EINVAL;
- return;
- }
-#endif
- stat1(fp->f_inode, uap->sb);
+ if (fp->f_flag & FSOCKET)
+ sostat(fp->f_socket);
+ else
+ stat1(fp->f_inode, uap->sb);
- * the stat system call.
uap = (struct a *)u.u_ap;
ip = namei(uchar, 0);
uap = (struct a *)u.u_ap;
ip = namei(uchar, 0);
return;
stat1(ip, uap->sb);
iput(ip);
return;
stat1(ip, uap->sb);
iput(ip);
* get the inode and pass appropriate parts back.
*/
stat1(ip, ub)
* get the inode and pass appropriate parts back.
*/
stat1(ip, ub)
-register struct inode *ip;
-struct stat *ub;
+ register struct inode *ip;
+ struct stat *ub;
{
register struct dinode *dp;
register struct buf *bp;
{
register struct dinode *dp;
register struct buf *bp;
IUPDAT(ip, &time, &time, 0);
/*
IUPDAT(ip, &time, &time, 0);
/*
- * first copy from inode table
+ * First copy from inode table
*/
ds.st_dev = ip->i_dev;
ds.st_ino = ip->i_number;
*/
ds.st_dev = ip->i_dev;
ds.st_ino = ip->i_number;
ds.st_rdev = (dev_t)ip->i_un.i_rdev;
ds.st_size = ip->i_size;
/*
ds.st_rdev = (dev_t)ip->i_un.i_rdev;
ds.st_size = ip->i_size;
/*
- * next the dates in the disk
+ * Next the dates in the disk
*/
bp = bread(ip->i_dev, itod(ip->i_number));
dp = bp->b_un.b_dino;
*/
bp = bread(ip->i_dev, itod(ip->i_number));
dp = bp->b_un.b_dino;
m = uap->fdes & ~077;
uap->fdes &= 077;
fp = getf(uap->fdes);
m = uap->fdes & ~077;
uap->fdes &= 077;
fp = getf(uap->fdes);
return;
if ((m&0100) == 0) {
if ((i = ufalloc()) < 0)
return;
if ((m&0100) == 0) {
if ((i = ufalloc()) < 0)
u.u_error = EBADF;
return;
}
u.u_error = EBADF;
return;
}
- if (u.u_vrpages[i]) {
- u.u_error = ETXTBSY;
- return;
- }
if (u.u_ofile[i]!=NULL)
closef(u.u_ofile[i]);
u.u_ofile[i] = fp;
if (u.u_ofile[i]!=NULL)
closef(u.u_ofile[i]);
u.u_ofile[i] = fp;
- * the mount system call.
dev_t dev;
register struct inode *ip;
register struct mount *mp;
dev_t dev;
register struct inode *ip;
register struct mount *mp;
uap = (struct a *)u.u_ap;
dev = getmdev();
uap = (struct a *)u.u_ap;
dev = getmdev();
return;
u.u_dirp = (caddr_t)uap->freg;
ip = namei(uchar, 0);
return;
u.u_dirp = (caddr_t)uap->freg;
ip = namei(uchar, 0);
- if(ip->i_count!=1 || (ip->i_mode&(IFBLK&IFCHR))!=0)
+ if (ip->i_count!=1 || (ip->i_mode&IFMT) != IFDIR)
- for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) {
- if(mp->m_bufp != NULL) {
- if(dev == mp->m_dev)
+ for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++) {
+ if (mp->m_bufp != NULL) {
+ if (dev == mp->m_dev)
goto out;
(*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
goto out;
(*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
goto out;
bp = bread(dev, SUPERB);
goto out;
bp = bread(dev, SUPERB);
*cp = 0;
brelse(bp);
ip->i_flag |= IMOUNT;
*cp = 0;
brelse(bp);
ip->i_flag |= IMOUNT;
return;
xumount(dev); /* remove unused sticky files from text table */
update();
return;
xumount(dev); /* remove unused sticky files from text table */
update();
- for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++)
- if(mp->m_bufp != NULL && dev == mp->m_dev)
+ for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++)
+ if (mp->m_bufp != NULL && dev == mp->m_dev)
goto found;
u.u_error = EINVAL;
return;
found:
stillopen = 0;
goto found;
u.u_error = EINVAL;
return;
found:
stillopen = 0;
- for(ip = inode; ip < inodeNINODE; ip++)
+ for (ip = inode; ip < inodeNINODE; ip++)
if (ip->i_number != 0 && dev == ip->i_dev) {
u.u_error = EBUSY;
return;
if (ip->i_number != 0 && dev == ip->i_dev) {
u.u_error = EBUSY;
return;
stillopen++;
ip = mp->m_inodp;
ip->i_flag &= ~IMOUNT;
stillopen++;
ip = mp->m_inodp;
ip->i_flag &= ~IMOUNT;
iput(ip);
if ((bp = getblk(dev, SUPERB)) != mp->m_bufp)
panic("umount");
iput(ip);
if ((bp = getblk(dev, SUPERB)) != mp->m_bufp)
panic("umount");
if (!suser())
return(NODEV);
ip = namei(uchar, 0);
if (!suser())
return(NODEV);
ip = namei(uchar, 0);
- if((ip->i_mode&IFMT) != IFBLK)
+ if ((ip->i_mode&IFMT) != IFBLK)
u.u_error = ENOTBLK;
dev = (dev_t)ip->i_un.i_rdev;
u.u_error = ENOTBLK;
dev = (dev_t)ip->i_un.i_rdev;
- if(major(dev) >= nblkdev)
+ if (major(dev) >= nblkdev)
u.u_error = ENXIO;
iput(ip);
return(dev);
u.u_error = ENXIO;
iput(ip);
return(dev);
-/* ufs_vnops.c 4.11 81/08/12 */
+/* ufs_vnops.c 4.12 81/11/08 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
uap = (struct a *)u.u_ap;
fp = getf(uap->fdes);
uap = (struct a *)u.u_ap;
fp = getf(uap->fdes);
- if (fp->f_flag&FPORT) {
- ptstat(fp);
- return;
- }
-#ifdef BBNNET
- if (fp->f_flag&FNET) {
- u.u_error = EINVAL;
- return;
- }
-#endif
- stat1(fp->f_inode, uap->sb);
+ if (fp->f_flag & FSOCKET)
+ sostat(fp->f_socket);
+ else
+ stat1(fp->f_inode, uap->sb);
- * the stat system call.
uap = (struct a *)u.u_ap;
ip = namei(uchar, 0);
uap = (struct a *)u.u_ap;
ip = namei(uchar, 0);
return;
stat1(ip, uap->sb);
iput(ip);
return;
stat1(ip, uap->sb);
iput(ip);
* get the inode and pass appropriate parts back.
*/
stat1(ip, ub)
* get the inode and pass appropriate parts back.
*/
stat1(ip, ub)
-register struct inode *ip;
-struct stat *ub;
+ register struct inode *ip;
+ struct stat *ub;
{
register struct dinode *dp;
register struct buf *bp;
{
register struct dinode *dp;
register struct buf *bp;
IUPDAT(ip, &time, &time, 0);
/*
IUPDAT(ip, &time, &time, 0);
/*
- * first copy from inode table
+ * First copy from inode table
*/
ds.st_dev = ip->i_dev;
ds.st_ino = ip->i_number;
*/
ds.st_dev = ip->i_dev;
ds.st_ino = ip->i_number;
ds.st_rdev = (dev_t)ip->i_un.i_rdev;
ds.st_size = ip->i_size;
/*
ds.st_rdev = (dev_t)ip->i_un.i_rdev;
ds.st_size = ip->i_size;
/*
- * next the dates in the disk
+ * Next the dates in the disk
*/
bp = bread(ip->i_dev, itod(ip->i_number));
dp = bp->b_un.b_dino;
*/
bp = bread(ip->i_dev, itod(ip->i_number));
dp = bp->b_un.b_dino;
m = uap->fdes & ~077;
uap->fdes &= 077;
fp = getf(uap->fdes);
m = uap->fdes & ~077;
uap->fdes &= 077;
fp = getf(uap->fdes);
return;
if ((m&0100) == 0) {
if ((i = ufalloc()) < 0)
return;
if ((m&0100) == 0) {
if ((i = ufalloc()) < 0)
u.u_error = EBADF;
return;
}
u.u_error = EBADF;
return;
}
- if (u.u_vrpages[i]) {
- u.u_error = ETXTBSY;
- return;
- }
if (u.u_ofile[i]!=NULL)
closef(u.u_ofile[i]);
u.u_ofile[i] = fp;
if (u.u_ofile[i]!=NULL)
closef(u.u_ofile[i]);
u.u_ofile[i] = fp;
- * the mount system call.
dev_t dev;
register struct inode *ip;
register struct mount *mp;
dev_t dev;
register struct inode *ip;
register struct mount *mp;
uap = (struct a *)u.u_ap;
dev = getmdev();
uap = (struct a *)u.u_ap;
dev = getmdev();
return;
u.u_dirp = (caddr_t)uap->freg;
ip = namei(uchar, 0);
return;
u.u_dirp = (caddr_t)uap->freg;
ip = namei(uchar, 0);
- if(ip->i_count!=1 || (ip->i_mode&(IFBLK&IFCHR))!=0)
+ if (ip->i_count!=1 || (ip->i_mode&IFMT) != IFDIR)
- for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) {
- if(mp->m_bufp != NULL) {
- if(dev == mp->m_dev)
+ for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++) {
+ if (mp->m_bufp != NULL) {
+ if (dev == mp->m_dev)
goto out;
(*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
goto out;
(*bdevsw[major(dev)].d_open)(dev, !uap->ronly);
goto out;
bp = bread(dev, SUPERB);
goto out;
bp = bread(dev, SUPERB);
*cp = 0;
brelse(bp);
ip->i_flag |= IMOUNT;
*cp = 0;
brelse(bp);
ip->i_flag |= IMOUNT;
return;
xumount(dev); /* remove unused sticky files from text table */
update();
return;
xumount(dev); /* remove unused sticky files from text table */
update();
- for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++)
- if(mp->m_bufp != NULL && dev == mp->m_dev)
+ for (mp = &mount[0]; mp < &mount[NMOUNT]; mp++)
+ if (mp->m_bufp != NULL && dev == mp->m_dev)
goto found;
u.u_error = EINVAL;
return;
found:
stillopen = 0;
goto found;
u.u_error = EINVAL;
return;
found:
stillopen = 0;
- for(ip = inode; ip < inodeNINODE; ip++)
+ for (ip = inode; ip < inodeNINODE; ip++)
if (ip->i_number != 0 && dev == ip->i_dev) {
u.u_error = EBUSY;
return;
if (ip->i_number != 0 && dev == ip->i_dev) {
u.u_error = EBUSY;
return;
stillopen++;
ip = mp->m_inodp;
ip->i_flag &= ~IMOUNT;
stillopen++;
ip = mp->m_inodp;
ip->i_flag &= ~IMOUNT;
iput(ip);
if ((bp = getblk(dev, SUPERB)) != mp->m_bufp)
panic("umount");
iput(ip);
if ((bp = getblk(dev, SUPERB)) != mp->m_bufp)
panic("umount");
if (!suser())
return(NODEV);
ip = namei(uchar, 0);
if (!suser())
return(NODEV);
ip = namei(uchar, 0);
- if((ip->i_mode&IFMT) != IFBLK)
+ if ((ip->i_mode&IFMT) != IFBLK)
u.u_error = ENOTBLK;
dev = (dev_t)ip->i_un.i_rdev;
u.u_error = ENOTBLK;
dev = (dev_t)ip->i_un.i_rdev;
- if(major(dev) >= nblkdev)
+ if (major(dev) >= nblkdev)
u.u_error = ENXIO;
iput(ip);
return(dev);
u.u_error = ENXIO;
iput(ip);
return(dev);