goto nogood2;
/* Initialize mode and dev */
- ino->c_node.i_mode = mode & ~udata.u_mask;
- ino->c_node.i_addr[0] = isdevice(ino) ? dev : 0;
+ ino->c_node.i_mode = swizzle16(mode & ~udata.u_mask);
+ ino->c_node.i_addr[0] = swizzle16(isdevice(ino) ? dev : 0);
setftime(ino, A_TIME|M_TIME|C_TIME);
wr_inode(ino);
for (j=0; j < NDEVS; ++j)
{
- if (fs_tab[j].s_mounted == SMOUNTED && fs_tab[j].s_fmod)
+ if (swizzle16(fs_tab[j].s_mounted) == SMOUNTED && fs_tab[j].s_fmod)
{
fs_tab[j].s_fmod = 0;
buf = bread(j, 1, 1);
ifnot (ino = n_open(path,NULLINOPTR))
return (-1);
- if (ino->c_node.i_uid != udata.u_euid && !super())
+ if (swizzle16(ino->c_node.i_uid) != udata.u_euid && !super())
{
i_deref(ino);
udata.u_error = EPERM;
return(-1);
}
- ino->c_node.i_mode = (mode & MODE_MASK) | (ino->c_node.i_mode & F_MASK);
+ ino->c_node.i_mode = swizzle16((mode & MODE_MASK) | (swizzle16(ino->c_node.i_mode) & F_MASK));
setftime(ino, C_TIME);
i_deref(ino);
return(0);
ifnot (ino = n_open(path,NULLINOPTR))
return (-1);
- if (ino->c_node.i_uid != udata.u_euid && !super())
+ if (swizzle16(ino->c_node.i_uid) != udata.u_euid && !super())
{
i_deref(ino);
udata.u_error = EPERM;
return(-1);
}
- ino->c_node.i_uid = owner;
- ino->c_node.i_gid = group;
+ ino->c_node.i_uid = swizzle16(owner);
+ ino->c_node.i_gid = swizzle16(group);
setftime(ino, C_TIME);
i_deref(ino);
return(0);
{
struct uzi_stat *b = (struct uzi_stat *)buf;
- b->st_dev = ino->c_dev;
- b->st_ino = ino->c_num;
- b->st_mode = ino->c_node.i_mode;
- b->st_nlink = ino->c_node.i_nlink;
- b->st_uid = ino->c_node.i_uid;
- b->st_gid = ino->c_node.i_gid;
+ b->st_dev = swizzle16(ino->c_dev);
+ b->st_ino = swizzle16(ino->c_num);
+ b->st_mode = swizzle16(ino->c_node.i_mode);
+ b->st_nlink = swizzle16(ino->c_node.i_nlink);
+ b->st_uid = swizzle16(ino->c_node.i_uid);
+ b->st_gid = swizzle16(ino->c_node.i_gid);
- b->st_rdev = ino->c_node.i_addr[0];
+ b->st_rdev = swizzle16(ino->c_node.i_addr[0]);
- b->st_size = ino->c_node.i_size;
- b->fst_atime = ino->c_node.i_atime;
- b->fst_mtime = ino->c_node.i_mtime;
- b->fst_ctime = ino->c_node.i_ctime;
+ b->st_size = swizzle32(ino->c_node.i_size);
+ b->fst_atime = swizzle32(ino->c_node.i_atime);
+ b->fst_mtime = swizzle32(ino->c_node.i_mtime);
+ b->fst_ctime = swizzle32(ino->c_node.i_ctime);
}
int _getfsys(int dev,char * buf)
{
udata.u_error = 0;
- if (dev < 0 || dev >= NDEVS || fs_tab[dev].s_mounted != SMOUNTED)
+ if (dev < 0 || dev >= NDEVS || swizzle16(fs_tab[dev].s_mounted) != SMOUNTED)
{
udata.u_error = ENXIO;
return(-1);
}
+ /* FIXME: endiam swapping here */
bcopy((char *)&fs_tab[dev],(char *)buf,sizeof(struct filesys));
return(0);
}
udata.u_error = ENOTDIR;
goto nogood;
}
- dev = (int)sino->c_node.i_addr[0];
+ dev = (int)swizzle16(sino->c_node.i_addr[0]);
if ( dev >= NDEVS ) // || d_open(dev))
{
goto nogood;
}
- dev = (int)sino->c_node.i_addr[0];
+ dev = (int)swizzle16(sino->c_node.i_addr[0]);
//ifnot (validdev(dev))
//{
// udata.u_error = ENXIO;
register int nblocks;
unsigned inum;
- nblocks = (wd->c_node.i_size + 511) >> 9;
+ nblocks = (swizzle32(wd->c_node.i_size) + 511) >> 9;
for (curblock=0; curblock < nblocks; ++curblock)
{
{
if (namecomp(compname,buf[curentry].d_name))
{
- inum = buf[curentry&0x0f].d_ino;
+ inum = swizzle16(buf[curentry&0x0f].d_ino);
brelse((bufptr)buf);
return(i_open(wd->c_dev, inum));
}
found:
if (new)
{
- if (nindex->c_node.i_nlink || nindex->c_node.i_mode & F_MASK)
+ if (nindex->c_node.i_nlink || swizzle16(nindex->c_node.i_mode) & F_MASK)
goto badino;
}
else
{
- ifnot (nindex->c_node.i_nlink && nindex->c_node.i_mode & F_MASK)
+ ifnot (nindex->c_node.i_nlink && swizzle16(nindex->c_node.i_mode) & F_MASK)
goto badino;
}
#endif
if (nindex)
- curentry.d_ino = nindex->c_num;
+ curentry.d_ino = swizzle16(nindex->c_num);
else
curentry.d_ino = 0;
setftime(wd, A_TIME|M_TIME|C_TIME); /* Sets c_dirty */
/* Update file length to next block */
- if (wd->c_node.i_size&511)
- wd->c_node.i_size += 512 - (wd->c_node.i_size&511);
+ if (swizzle32(wd->c_node.i_size)&511)
+ wd->c_node.i_size =
+ swizzle32(wd->c_node.i_size) + 512 - (swizzle16(wd->c_node.i_size)&511);
return (1);
}
goto nogood;
/* BIG FIX: user/group setting was missing SN */ /*280*/
- nindex->c_node.i_uid = udata.u_euid; /*280*/
- nindex->c_node.i_gid = udata.u_egid; /*280*/
+ nindex->c_node.i_uid = swizzle16(udata.u_euid); /*280*/
+ nindex->c_node.i_gid = swizzle16(udata.u_egid); /*280*/
- nindex->c_node.i_mode = F_REG; /* For the time being */
- nindex->c_node.i_nlink = 1;
+ nindex->c_node.i_mode = swizzle16(F_REG); /* For the time being */
+ nindex->c_node.i_nlink = swizzle16(1);
nindex->c_node.i_size = 0;
for (j=0; j <20; j++)
nindex->c_node.i_addr[j] = 0;
int baddev(fsptr dev)
{
- return (dev->s_mounted != SMOUNTED);
+ return (swizzle16(dev->s_mounted) != SMOUNTED);
}
tryagain:
if (dev->s_ninode)
{
+ int i;
+
ifnot (dev->s_tinode)
goto corrupt;
- ino = dev->s_inode[--dev->s_ninode];
- if (ino < 2 || ino >= (dev->s_isize-2)*8)
+ i = swizzle16(dev->s_ninode);
+ ino = swizzle16(dev->s_inode[--i]);
+ dev->s_ninode = swizzle16(i);
+ if (ino < 2 || ino >= (swizzle16(dev->s_isize)-2)*8)
goto corrupt;
- --dev->s_tinode;
+ dev->s_tinode = swizzle16(swizzle16(dev->s_tinode)-1);
return(ino);
}
for (j=0; j < 8; j++)
{
ifnot (buf[j].i_mode || buf[j].i_nlink)
- dev->s_inode[k++] = 8*(blk-2) + j;
+ dev->s_inode[k++] = swizzle16(8*(blk-2) + j);
if (k==50)
{
brelse((bufptr)buf);
return(0);
}
- dev->s_ninode = k;
+ dev->s_ninode = swizzle16(k);
goto tryagain;
corrupt:
printf("i_alloc: corrupt superblock\n");
- dev->s_mounted = 1;
+ dev->s_mounted = swizzle16(1);
udata.u_error = ENOSPC;
return(0);
}
if (baddev(dev = getdev(devno)))
return;
- if (ino < 2 || ino >= (dev->s_isize-2)*8)
+ if (ino < 2 || ino >= (swizzle16(dev->s_isize)-2)*8)
panic("i_free: bad ino");
- ++dev->s_tinode;
- if (dev->s_ninode < 50)
- dev->s_inode[dev->s_ninode++] = ino;
+ dev->s_tinode = swizzle16(swizzle16(dev->s_tinode) + 1);
+ if (swizzle16(dev->s_ninode) < 50) {
+ int i = swizzle16(dev->s_ninode);
+ dev->s_inode[i++] = swizzle16(ino);
+ dev->s_ninode = swizzle16(i);
+ }
}
register blkno_t newno;
blkno_t *buf; /*, *bread(); -- HP */
register int j;
+ int i;
if (baddev(dev = getdev(devno)))
goto corrupt2;
- if (dev->s_nfree <= 0 || dev->s_nfree > 50)
+ if (swizzle16(dev->s_nfree) <= 0 || swizzle16(dev->s_nfree) > 50)
goto corrupt;
- newno = dev->s_free[--dev->s_nfree];
+ i = swizzle16(dev->s_nfree);
+ newno = swizzle16(dev->s_free[--i]);
+ dev->s_nfree=swizzle16(i);
ifnot (newno)
{
if (dev->s_tfree != 0)
goto corrupt;
udata.u_error = ENOSPC;
- ++dev->s_nfree;
+ dev->s_nfree=swizzle16(swizzle16(dev->s_nfree)+1);
return(0);
}
ifnot (dev->s_tfree)
goto corrupt;
- --dev->s_tfree;
+ dev->s_tfree=swizzle16(swizzle16(dev->s_tfree)-1);
/* Zero out the new block */
buf = (blkno_t *)bread(devno, newno, 2);
corrupt:
printf("blk_alloc: corrupt\n");
- dev->s_mounted = 1;
+ dev->s_mounted = swizzle16(1);
corrupt2:
udata.u_error = ENOSPC;
return(0);
{
register fsptr dev;
register char *buf;
+ int b;
ifnot (blk)
return;
dev->s_nfree = 0;
}
- ++dev->s_tfree;
- dev->s_free[(dev->s_nfree)++] = blk;
+ dev->s_tfree = swizzle16(swizzle16(dev->s_tfree)+1);
+ b = swizzle16(dev->s_nfree);
+ dev->s_free[b++] = swizzle16(blk);
+ dev->s_nfree=swizzle16(b);
}
void i_deref(inoptr ino)
{
+ unsigned int m;
+
magic(ino);
ifnot (ino->c_refs)
/* If the inode has no links and no refs, it must have
its blocks freed. */
- ifnot (--ino->c_refs || ino->c_node.i_nlink)
+ ifnot (--ino->c_refs || ino->c_node.i_nlink) {
/*
SN (mcy)
*/
- if (((ino->c_node.i_mode & F_MASK) == F_REG) ||
- ((ino->c_node.i_mode & F_MASK) == F_DIR) ||
- ((ino->c_node.i_mode & F_MASK) == F_PIPE))
- f_trunc(ino);
+ m = swizzle16(ino->c_node.i_mode);
+ if (((m & F_MASK) == F_REG) ||
+ ((m & F_MASK) == F_DIR) ||
+ ((m & F_MASK) == F_PIPE))
+ f_trunc(ino);
+ }
/* If the inode was modified, we must write it to disk. */
if (!(ino->c_refs) && ino->c_dirty)
{
/* isdevice(ino) returns true if ino points to a device */
int isdevice(inoptr ino)
{
- return (ino->c_node.i_mode & 020000);
+ return (swizzle16(ino->c_node.i_mode) & 020000);
}
/* This returns the device number of an inode representing a device */
int devnum(inoptr ino)
{
- return (*(ino->c_node.i_addr));
+ return (swizzle16(*(ino->c_node.i_addr)));
}
dev = ino->c_dev;
/* First deallocate the double indirect blocks */
- freeblk(dev, ino->c_node.i_addr[19], 2);
+ freeblk(dev, swizzle16(ino->c_node.i_addr[19]), 2);
/* Also deallocate the indirect blocks */
- freeblk(dev, ino->c_node.i_addr[18], 1);
+ freeblk(dev, swizzle16(ino->c_node.i_addr[18]), 1);
/* Finally, free the direct blocks */
for (j=17; j >= 0; --j)
- freeblk(dev, ino->c_node.i_addr[j], 0);
+ freeblk(dev, swizzle16(ino->c_node.i_addr[j]), 0);
bzero((char *)ino->c_node.i_addr, sizeof(ino->c_node.i_addr));
{
buf = (blkno_t *)bread(dev, blk, 0);
for (j=255; j >= 0; --j)
- freeblk(dev, buf[j], level-1);
+ freeblk(dev, swizzle16(buf[j]), level-1);
brelse((bufptr)buf);
}
* blocks 0..17 are direct blocks
*/
if(bn < 18) {
- nb = ip->c_node.i_addr[bn];
+ nb = swizzle16(ip->c_node.i_addr[bn]);
if(nb == 0) {
if(rwflg || (nb = blk_alloc(dev))==0)
return(NULLBLK);
- ip->c_node.i_addr[bn] = nb;
+ ip->c_node.i_addr[bn] = swizzle16(nb);
ip->c_dirty = 1;
}
return(nb);
{
if(rwflg || !(nb = blk_alloc(dev)))
return(NULLBLK);
- ip->c_node.i_addr[20-j] = nb;
+ ip->c_node.i_addr[20-j] = swizzle16(nb);
ip->c_dirty = 1;
}
}
******/
i = (bn>>sh) & 0xff;
- if ((nb = ((blkno_t *)bp)[i]))
+ if ((swizzle16(nb) = ((blkno_t *)bp)[i]))
brelse(bp);
else
{
brelse(bp);
return(NULLBLK);
}
- ((blkno_t *)bp)[i] = nb;
+ ((blkno_t *)bp)[i] = swizzle16(nb);
bawrite(bp);
}
sh -= 8;
if (devptr->s_mounted == 0)
panic("validblk: not mounted");
- if (num < devptr->s_isize || num >= devptr->s_fsize)
+ if (num < swizzle16(devptr->s_isize) || num >= swizzle16(devptr->s_fsize))
panic("validblk: invalid blk");
}
if (super())
return(07);
- mode = ino->c_node.i_mode;
- if (ino->c_node.i_uid == udata.u_euid)
+ mode = swizzle16(ino->c_node.i_mode);
+ if (swizzle16(ino->c_node.i_uid) == udata.u_euid)
mode >>= 6;
- else if (ino->c_node.i_gid == udata.u_egid)
+ else if (swizzle16(ino->c_node.i_gid) == udata.u_egid)
mode >>= 3;
return(mode & 07);
int getmode(inoptr ino)
{
- return( ino->c_node.i_mode & F_MASK);
+ return( swizzle16(ino->c_node.i_mode) & F_MASK);
}
brelse((bufptr)buf);
/* See if there really is a filesystem on the device */
- if (fp->s_mounted != SMOUNTED ||
- fp->s_isize >= fp->s_fsize)
+ if (swizzle16(fp->s_mounted) != SMOUNTED ||
+ swizzle16(fp->s_isize) >= swizzle16(fp->s_fsize))
return (-1);
fp->s_mntpt = ino;