changeset 330:e34fb61f280a

remove static data gear declaration fs_impl
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Sun, 09 Feb 2020 19:08:50 +0900
parents ee19f903218a
children e64c8734a802
files src/gearsTools/update_implheader.pl src/impl/fs_impl.h
diffstat 2 files changed, 10 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/src/gearsTools/update_implheader.pl	Sun Feb 09 14:54:21 2020 +0900
+++ b/src/gearsTools/update_implheader.pl	Sun Feb 09 19:08:50 2020 +0900
@@ -87,14 +87,16 @@
 
 sub update_header {
   my ($header_file,$write_codes) = @_;
-  open my $fh, '+<', $header_file;
+  open my $fh, '<', $header_file;
   my $def_impl = <$fh>;
   my ($impl, $interface);
   if ($def_impl =~ /typedef\s*struct\s*(\w+)\s*<[\w\s,]+>\s*impl\s*(\w+)\s*{/) {
     $impl = $1;
     $interface = $2;
   }
-
+  close $fh;
+  open $fh, '>', $header_file;
+  print $fh "typedef struct $impl <Impl, Isa> impl $interface {\n";
   map { print $fh "    $_\n"}  @$write_codes;
   print $fh "    __code next(...);\n";
   print $fh "} $impl;\n";
--- a/src/impl/fs_impl.h	Sun Feb 09 14:54:21 2020 +0900
+++ b/src/impl/fs_impl.h	Sun Feb 09 19:08:50 2020 +0900
@@ -1,47 +1,29 @@
-typedef struct fs_impl<Type, Isa> impl fs{
-    union Data* fs_impl;
-    struct superblock* sb;
-    int ret;
-    uint dev;
-    short type;
-    struct buf* bp;
-    struct dinode* dip;
-    uint inum;
-    struct inode* dp;
-    char* name;
-    uint off;
-    uint* poff;
-    dirent* de;
-    uint tot;
-    uint m;
-    char* dst;
-    uint n;
-    char* src;
-
+typedef struct fs_impl <Impl, Isa> impl fs {
     __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, 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 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(Type* fs_impl,struct inode* ip, char* dst, uint n, next(int ret, ...));
+    __code readi_check_diskinode(Type* fs_impl,struct inode* ip, char* dst, uint n, __code 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_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_loopcheck(Type* fs_impl, struct inode* dp, char* name, uint off, uint* poff, dirent* de, __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;