]> Zhao Yanbai Git Server - minix.git/commitdiff
Fixes to ISOFS
authorThomas Veerman <thomas@minix3.org>
Thu, 1 Oct 2009 14:34:17 +0000 (14:34 +0000)
committerThomas Veerman <thomas@minix3.org>
Thu, 1 Oct 2009 14:34:17 +0000 (14:34 +0000)
etc/drivers.conf
servers/Makefile
servers/iso9660fs/main.c
servers/iso9660fs/proto.h
servers/iso9660fs/read.c
servers/iso9660fs/table.c

index 2e7b6639b12a48f65908c323531a4465a574e9d7..06fce3c3852dd5cc4479b51502cb8fa1cf49a176 100644 (file)
@@ -281,6 +281,21 @@ driver mfs
        uid     0;
 };
 
+driver isofs
+{
+       system
+               TIMES           # 25
+               SAFECOPYFROM    # 31
+               SAFECOPYTO      # 32
+               GETINFO
+               SETGRANT        # 34
+                UMAP            # 14
+               PROFBUF         # 38
+               SYSCTL
+               ;
+       uid     0;
+};
+
 driver printer
 {
        io      378:4           # LPT1
index 6b8191ba8528e5789947e5bc621f867b7670e5d7..0a232e78e3773345f3ac62258096b1d4cd03b0ae 100644 (file)
@@ -18,6 +18,7 @@ all install depend clean:
        cd ./pm && $(MAKE) $@
        cd ./vfs && $(MAKE) $@
        cd ./mfs && $(MAKE) $@
+       cd ./iso9660fs && $(MAKE) $@
        cd ./rs && $(MAKE) $@
        cd ./ds && $(MAKE) $@
        cd ./is && $(MAKE) $@
index b41b79e3642085c17a1954954ed7b96d457ad416..aaac8f53309f22f2d04a33f552618b8263b53823 100644 (file)
@@ -29,20 +29,6 @@ PUBLIC int main(void) {
       return -1;
   }
 
-#if 0
-  if (fs_m_in.m_type != REQ_READSUPER_O && fs_m_in.m_type != REQ_READSUPER_S) {
-      printf("ISO9660FS(%d): Invalid login reply\n", SELF_E);
-      return -1;
-  } else {
-      if (fs_m_in.m_type == REQ_READSUPER_S)
-             fs_m_out.m_type = fs_readsuper_s();
-      else
-             fs_m_out.m_type = fs_readsuper();
-      reply(FS_PROC_NR, &fs_m_out);
-      if (fs_m_out.m_type != OK) return -1;
-  }
-#endif
-
   for (;;) {
 
     /* Wait for request message. */
@@ -69,8 +55,6 @@ PUBLIC int main(void) {
       ind= req_nr-VFS_BASE;
 
       if (ind < 0 || ind >= NREQS) {
-         printf("iso9660fs: bad request %d\n", req_nr); 
-         printf("ind = %d\n", ind);
           error = EINVAL; 
       }
       else
@@ -79,7 +63,6 @@ PUBLIC int main(void) {
 
       fs_m_out.m_type = error; 
       reply(who_e, &fs_m_out);         /* returns the response to VFS */
-               
   }
 }
 
index a4410180def8c90021303ef73f86c5e221bc4ccd..cf4be130c4ab25dde5c2cc9098d1d492f52d92f8 100644 (file)
@@ -11,6 +11,7 @@ int fs_sync(void);
 int lookup(void);
 int fs_access(void);
 int fs_getdents(void);
+int fs_getdents_o(void);
 
 /* main.c */
 _PROTOTYPE( int main, (void)                                           );
index 480bd27f8f2ba387637e4fec8ae1b3073567fa4e..1df3c3c1ea7792663f3306a91c11047697dbf7ee 100644 (file)
@@ -269,7 +269,6 @@ PUBLIC int fs_getdents(void) {
       dir_tmp = get_free_dir_record();
       create_dir_record(dir_tmp,bp->b_data + block_pos,
                        block*block_size + block_pos);
-
       if (dir_tmp->length == 0) { /* EOF. I exit and return 0s */
        block_pos = block_size;
        done = TRUE;
@@ -316,7 +315,6 @@ PUBLIC int fs_getdents(void) {
        if (tmpbuf_offset + reclen > GETDENTS_BUFSIZ) {
          r= sys_safecopyto(FS_PROC_NR, gid, userbuf_off, 
                            (vir_bytes)getdents_buf, tmpbuf_offset, D);
-         
          if (r != OK)
            panic(__FILE__,"fs_getdents: sys_safecopyto failed\n",r);
          
@@ -348,7 +346,6 @@ PUBLIC int fs_getdents(void) {
 
     block++;                   /* read the next one */
   }
-
   if (tmpbuf_offset != 0) {
     r= sys_safecopyto(FS_PROC_NR, gid, userbuf_off,
                      (vir_bytes)getdents_buf, tmpbuf_offset, D);
@@ -361,11 +358,28 @@ PUBLIC int fs_getdents(void) {
   r= ENOSYS;
   fs_m_out.RES_GDE_POS_CHANGE= 0;      /* No change in case of an error */
 
-  r= userbuf_off;
+  /*  r= userbuf_off;*/
+  fs_m_out.RES_GDE_CUM_IO = userbuf_off;
   if (cur_pos >= pos)
     fs_m_out.RES_GDE_POS_CHANGE= cur_pos-pos;
+  else
+    fs_m_out.RES_GDE_POS_CHANGE= 0;
 
   release_dir_record(dir);             /* release the inode */
+  r= OK;
+  return(r);
+}
+
+/*===========================================================================*
+ *                           fs_getdents_s                                   *
+ *===========================================================================*/
+PUBLIC int fs_getdents_o(void)
+{
+  int r;
+  r = fs_getdents();
+
+  if(r == OK)
+    r = fs_m_out.RES_GDE_CUM_IO;
 
   return(r);
 }
index 86d84c30245cc421e54f65101134299b0ddf7948..690aedb0e9229d13a5ca9a70a4b025222c5b3853 100644 (file)
@@ -48,7 +48,7 @@ PUBLIC _PROTOTYPE (int (*fs_call_vec[]), (void) ) = {
   fs_new_driver,               /* 37 */
   fs_bread,                    /* 38 */
   no_sys,                      /* 39 */
-  fs_getdents,                 /* 40 */
+  fs_getdents_o,               /* 40 */
   no_sys,                      /* 41: not_used */
   fs_read_s,                   /* 42 */
   no_sys,                      /* 43: not used */
@@ -61,4 +61,6 @@ PUBLIC _PROTOTYPE (int (*fs_call_vec[]), (void) ) = {
   fs_mountpoint_s,             /* 50 */
   fs_readsuper_s,              /* 51 */
   no_sys,                      /* 52: not used */
+  no_sys,                      /* 53 */
+  fs_getdents,                 /* 54 */
 };