# HG changeset patch # User menikon # Date 1581053225 -32400 # Node ID 98902fad1e2e92b6089bd99e8c1acb7b3b6ba005 # Parent 40e9dd5ff0843ab015b54fdffbbfea64e12dadd6 final fix diff -r 40e9dd5ff084 -r 98902fad1e2e src/impl/fs_impl.cbc --- a/src/impl/fs_impl.cbc Thu Feb 06 18:27:50 2020 +0900 +++ b/src/impl/fs_impl.cbc Fri Feb 07 14:27:05 2020 +0900 @@ -25,23 +25,55 @@ struct fs_impl* fs_impl = new fs_impl(); fs->fs = (union Data*)fs_impl; fs_impl->fs_impl = NULL; - fs->readsb = C_readsbfs_impl; - fs->iinit = C_iinitfs_impl; - fs->ialloc = C_iallocfs_impl; + fs_impl->sb = NULL; + fs_impl->ret = 0; + fs_impl->dev = 0; + fs_impl->type = 0; + fs_impl->bp = NULL; + fs_impl->dip = NULL; + fs_impl->inum = 0; + fs_impl->dp = NULL; + fs_impl->name = NULL; + fs_impl->off = 0; + fs_impl->poff = NULL; + fs_impl->de = NULL; + fs_impl->tot = 0; + fs_impl->m = 0; + fs_impl->dst = NULL; + fs_impl->n = 0; + fs_impl->src = NULL; fs_impl->allocinode = C_allocinode; fs_impl->allocinode_loop = C_allocinode_loop; fs_impl->allocinode_loopcheck = C_allocinode_loopcheck; fs_impl->allocinode_noloop = C_allocinode_noloop; + fs_impl->lockinode1 = C_lockinode1; + fs_impl->lockinode2 = C_lockinode2; + fs_impl->lockinode_sleepcheck = C_lockinode_sleepcheck; + fs_impl->iput_check = C_iput_check; + fs_impl->iput_inode_nolink = C_iput_inode_nolink; + fs_impl->readi_check_diskinode = C_readi_check_diskinode; + fs_impl->readi_loopcheck = C_readi_loopcheck; + fs_impl->readi_loop = C_readi_loop; + fs_impl->readi_noloop = C_readi_noloop; + fs_impl->writei_check_diskinode = C_writei_check_diskinode; + fs_impl->writei_loopcheck = C_writei_loopcheck; + fs_impl->writei_loop = C_writei_loop; + fs_impl->writei_noloop = C_writei_noloop; + fs_impl->dirlookup_loopcheck = C_dirlookup_loopcheck; + fs_impl->dirlookup_loop = C_dirlookup_loop; + fs_impl->dirlookup_noloop = C_dirlookup_noloop; + fs_impl->dirlink_namecheck = C_dirlink_namecheck; + fs_impl->dirlink_loopcheck = C_dirlink_loopcheck; + fs_impl->dirlink_loop = C_dirlink_loop; + fs_impl->dirlink_noloop = C_dirlink_noloop; + fs->readsb = C_readsbfs_impl; + fs->iinit = C_iinitfs_impl; + fs->ialloc = C_iallocfs_impl; fs->iupdate = C_iupdatefs_impl; fs->idup = C_idupfs_impl; fs->ilock = C_ilockfs_impl; - fs_impl->lockinode1 = C_lockinode1; - fs_impl->lockinode2 = C_lockinode2; - fs_impl->lockinode_sleepcheck = C_lockinode_sleepcheck; fs->iunlock = C_iunlockfs_impl; fs->iput = C_iputfs_impl; - fs_impl->iput_check = C_iput_check; - fs_impl->iput_inode_nolink = C_iput_inode_nolink; fs->iunlockput = C_iunlockputfs_impl; fs->stati = C_statifs_impl; fs->readi = C_readifs_impl; @@ -190,6 +222,7 @@ ret = -1; goto next(ret, ...); } + Gearef(cbc_context, fs)->tot = 0; goto writei_loopcheck(fs, tot, m, src, off, n, next(...)); } diff -r 40e9dd5ff084 -r 98902fad1e2e src/impl/fs_impl.h --- a/src/impl/fs_impl.h Thu Feb 06 18:27:50 2020 +0900 +++ b/src/impl/fs_impl.h Fri Feb 07 14:27:05 2020 +0900 @@ -18,30 +18,30 @@ uint n; char* src; - __code allocinode(Type* fs_impl, uint dev, short type, __code next(...)); - __code allocinode_loop(Type* fs_impl, uint inum, uint dev, struct superblock* sb, struct buf* bp, struct dinode* dip, __code next(...)); + __code allocinode(Type* fs_impl, uint dev, struct superblock* sb, __code next(...)); + __code allocinode_loop(Type* fs_impl, uint inum, uint dev, short type, struct superblock* sb, struct buf* bp, struct dinode* dip, __code next(...)); __code allocinode_loopcheck(Type* fs_impl, uint inum, uint dev, struct superblock* sb, struct buf* bp, struct dinode* dip, __code next(...)); - __code allocinode_noloop(Type* fs_impl, uint inum, uint dev, struct superblock* sb, struct buf* bp, struct dinode* dip, __code next(int ret, ...)); + __code allocinode_noloop(Type* fs_impl, uint inum, uint dev, short type, struct superblock* sb, struct buf* bp, struct dinode* dip, __code next(int ret, ...)); __code lockinode1(Type* fs_impl, struct inode *ip, struct buf *bp, struct dinode *dip, __code next(...)); __code lockinode2(Type* fs_impl, struct inode* ip, struct buf* bp, struct dinode* dip, __code next(...)); __code lockinode_sleepcheck(Type* fs_impl, struct inode* ip, __code next(...)); __code iput_check(Type* fs_impl, struct inode* ip, __code next(...)); __code iput_inode_nolink(Type* fs_impl, struct inode* ip, __code next(...)); - __code readi_check_diskinode(struct fs_impl* fs_impl,struct inode* ip, char* dst, uint n, next(int ret, ...)); - __code readi_loopcheck(struct fs_impl* fs_impl, uint tot, uint m, char* dst, uint off, uint n, __code next(...)); - __code readi_loop(struct fs_impl* fs_impl, struct inode *ip, struct buf* bp, uint tot, uint m, char* dst, uint off, uint n, __code next(...)); - __code readi_noloop(struct fs_impl* fs_impl, uint n, __code next(int ret, ...)); - __code writei_check_diskinode(struct fs_impl* fs_impl,struct inode* ip, char* src, uint n, __code next(int ret, ...)); - __code writei_loopcheck(struct fs_impl* fs_impl, uint tot, uint m, char* src, uint off, uint n, __code next(...)); - __code writei_loop(struct fs_impl* fs_impl, struct inode* ip, struct buf* bp, uint tot, uint m, char* src, uint off, uint n, __code next(...)); - __code writei_noloop(struct fs_impl* fs_impl, struct inode* ip, uint n, uint off, __code next(int ret, ...)); + __code readi_check_diskinode(Type* fs_impl,struct inode* ip, char* dst, uint n, next(int ret, ...)); + __code readi_loopcheck(Type* fs_impl, uint tot, uint m, char* dst, uint off, uint n, __code next(...)); + __code readi_loop(Type* fs_impl, struct inode *ip, struct buf* bp, uint tot, uint m, char* dst, uint off, uint n, __code next(...)); + __code readi_noloop(Type* fs_impl, uint n, __code next(int ret, ...)); + __code writei_check_diskinode(Type* fs_impl,struct inode* ip, char* src, uint n, __code next(int ret, ...)); + __code writei_loopcheck(Type* fs_impl, uint tot, uint m, char* src, uint off, uint n, __code next(...)); + __code writei_loop(Type* fs_impl, struct inode* ip, struct buf* bp, uint tot, uint m, char* src, uint off, uint n, __code next(...)); + __code writei_noloop(Type* fs_impl, struct inode* ip, uint n, uint off, __code next(int ret, ...)); __code dirlookup_loopcheck(Type* fs_impl, struct inode* dp, char* name, uint off, uint* poff, dirent* de, next(...)); - __code dirlookup_loop(struct fs_impl* fs_impl, struct inode* dp, char* name, uint off, uint* poff, dirent* de, __code next(...)); - __code dirlookup_noloop(struct fs_impl* fs_impl, __code next(int ret, ...)); - __code dirlink_namecheck(struct fs_impl* fs_impl, struct inode* ip, __code next(int ret, ...)); - __code dirlink_loopcheck(struct fs_impl* fs_impl, struct dirent* de, struct inode* dp, uint off, __code next(...)); - __code dirlink_loop(struct fs_impl* fs_impl, struct dirent* de, struct inode* ip, uint off, uint inum, __code next(...)); - __code dirlink_noloop(struct fs_impl* fs_impl, struct dirent* de, struct inode* dp, uint off, uint inum, char* name, __code next(...)); + __code dirlookup_loop(Type* fs_impl, struct inode* dp, char* name, uint off, uint inum, uint* poff, dirent* de, __code next(int ret, ...)); + __code dirlookup_noloop(Type* fs_impl, __code next(int ret, ...)); + __code dirlink_namecheck(Type* fs_impl, struct inode* ip, __code next(int ret, ...)); + __code dirlink_loopcheck(Type* fs_impl, struct dirent* de, struct inode* dp, uint off, __code next(...)); + __code dirlink_loop(Type* fs_impl, struct dirent* de, struct inode* dp, uint off, uint inum, __code next(...)); + __code dirlink_noloop(Type* fs_impl, struct dirent* de, struct inode* dp, uint off, uint inum, char* name, __code next(int ret, ...)); __code next(...); __code next2(...); } fs_impl; diff -r 40e9dd5ff084 -r 98902fad1e2e src/interface/fs.dg --- a/src/interface/fs.dg Thu Feb 06 18:27:50 2020 +0900 +++ b/src/interface/fs.dg Fri Feb 07 14:27:05 2020 +0900 @@ -34,7 +34,7 @@ __code readi(Impl* fs, struct inode* ip, char* dst, uint off, uint tot, uint n, __code next(int ret, ...)); __code writei(Impl* fs, struct inode* ip, char* src, uint off, uint tot, uint n, __code next(int ret, ...)); __code namecmp(Impl* fs, const char* s, const char* t, __code next(int strncmp_val, ...)); - __code dirlookup(struct inode* dp, char* name, uint* poff, dirent* de, __code next(int ret, ...)); + __code dirlookup(Impl* fs, struct inode* dp, char* name, uint off, uint* poff, dirent* de, __code next(int ret, ...)); __code dirlink(struct fs_impl* fs, struct inode* ip, struct dirent* de, struct inode* dp, char* name, uint off, uint inum, __code next(...)); __code namei(Impl* fs, char* path, __code next(int namex_val, ...)); __code nameiparent(Impl* fs, char* path, char* name, __code next(int namex_val, ...));