annotate vdisk.c @ 43:7a83a6a1685a

vdisk start
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 17 Jul 2018 17:08:09 +0900
parents
children b26c23331d02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
43
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /********************************************************************
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 * Virtual RBF - Random Block File Manager
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 * Shinji KONO (kono@ie.u-ryukyu.ac.jp) 2018/7/17
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 * GPL v1 license
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 */
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 #include <stdio.h>
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 #include <stdlib.h>
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 #include <unistd.h>
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 #include <sys/stat.h>
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 #include <sys/select.h>
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 /****************************
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 * Main entry point for RBF
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 lbra Open
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 lbra MakDir
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 lbra ChgDir
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 lbra Delete
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 lbra Seek
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 lbra Read
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 lbra Write
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 lbra ReadLn
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 lbra WriteLn
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 lbra GetStat
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 lbra SetStat
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 lbra Close
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 */
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 /*
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 * I$Create Entry Point
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 * Entry: A = access mode desired
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 * B = file attributes
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 * X = address of the pathlist
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 * Exit: A = pathnum
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 * X = last byte of pathlist address
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 * Error: CC Carry set
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 * B = errcode
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 */
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 #define MAXPAHTLEN 256
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 char * checkFileName(char *path, PathDesc *pd) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 char *p = path;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 int maxlen = MAXPAHTLEN;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 pd->lastChar = p;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 while(*p!=0 && (*p&80)==0 && maxlen-->0) p++;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 if (maxlen==MAXPAHTLEN) return 0;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 pd->lastChar = p;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 if (*p!=0) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 p = (char *)malloc(len+1);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 strncpy(path,p, MAXPAHTLEN-maxlen);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 return p;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 int os9toUnixAttr(Byte attr) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 return "r+";
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 int vrbf_create(byte mode,Byte attr,char *path,PathDesc *pd) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 char *p = pd->unixName = checkFileName(path,pd);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 if (p==0) return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 p->dir = 0;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 p->fp = fopen(p->unixName,"w+"); // os9toUnixAttr(attr));
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 if (fd) return 0;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 /*
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 * I$Open Entry Point
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 * Entry: A = access mode desired
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 * X = address of the pathlist
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 * Exit: A = pathnum
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 * X = last byte of pathlist address
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 * Error: CC Carry set
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 * B = errcode
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 */
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 int vrbf_open(byte mode,char *path, PathDesc *pd) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 char *p = pd->unixName = checkFileName(path,pd);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 if (p==0) return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 struct stat buf;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 if (stat(p,&buf)!=0) return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 if ((buf.st_mode & S_IFMT) == S_IFDIR) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 pd->dir = 1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 return 0;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 pd->dir = 0;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 pd->fp = fopen(p->unixName,"r"); // os9toUnixAttr(attr));
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 if (fp) return 0;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 /*
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 * I$MakDir Entry Point
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 * Entry: X = address of the pathlist
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 * Exit: X = last byte of pathlist address
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 * Error: CC Carry set
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 * B = errcode
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 */
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 int vrbf_mkdir(char **path,PathDesc *pd) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 char *p = checkFileName(path,pd);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 if (p==0) return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 return mkdir(p,0);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 /*
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 * I$ChgDir Entry Point
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 * Entry:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 * Exit:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 * Error: CC Carry set
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 * B = errcode
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 */
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 char * vrbf_chdir(char *path) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 cahr *p = checkFileName(path);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 if (p==0) return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 struct stat buf;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 if (stat(p,&buf)!=0) return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 if ((buf.st_mode & S_IFMT) == S_IFDIR) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 chdir(p);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 return p;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 /*
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 * I$Delete Entry Point
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 * Entry:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 * Exit:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 * Error: CC Carry set
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 * B = errcode
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 */
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 int vrbf_delete(char *path) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 cahr *p = checkFileName(path);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 if (p==0) return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 return rmdir(p);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 /*
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 * I$Seek Entry Point
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 * Entry:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 * Exit:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 * Error: CC Carry set
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 * B = errcode
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 */
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 int vrbf_seek(PathDesc *p, int seek) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 return fseek(p->fp,(off_t)seek,SEEK_SET);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 * I$ReadLn Entry Point
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 * Entry:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 * Exit:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 * Error: CC Carry set
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 * B = errcode
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 int vrbf_readln(PathDesc *p, byte *buf, int len) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 if (p->dir) return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 if (fgets(buf,len,p->fp)) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 int i;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 for(i=0;i<len && buf[i];i++);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 if (i>0 && buf[i-1]=='\n') {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 buf[i-1] = '\r';
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 return i;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 /*
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 * I$Read Entry Point
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 * Entry:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 * Exit:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 * Error: CC Carry set
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 * B = errcode
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 */
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
216
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 int vrbf_read(PathDesc *p, byte *buf, int len) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 if (p->dir) return dirread(p,buf,len);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 return fread(buf,len,1,p->fp);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
221
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 /*
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 * I$WritLn Entry Point
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 * Entry:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 * Exit:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 * Error: CC Carry set
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 * B = errcode
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 */
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
232
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 int vrbf_writeln(PathDesc *p, byte *buf, int len) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 if (p->dir) return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 int = 0;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 while(len>0 && *buf !='\r) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 fputc(buf[i++],p->fp);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 len--;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 if (buf[i]=='\r') {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 fputc('\n',p->fp);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 i++;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 return i;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
246
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 /*
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 * I$Write Entry Point
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 * Entry:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 * Exit:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 * Error: CC Carry set
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 * B = errcode
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 */
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
257
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 int vrbf_write(PathDesc *p, byte *buf, int len) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 if (p->dir) return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 return fwrite(buf,len,1,p->fp);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
262
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 /* I$Close Entry Point
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 * Entry: A = path number
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 * Exit:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
269 * Error: CC Carry set
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 * B = errcode
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
271 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
272 */
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
273
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
274 int vrbf_close(PathDesc *p, byte *buf) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
275 return fclose(p->fp);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
277
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 /*
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
279 * I$GetStat Entry Point
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
281 * Entry:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
282 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 * Exit:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
285 * Error: CC Carry set
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
286 * B = errcode
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
287 */
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
288
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 int vrbf_getstat(int code,OPathDesc *p, O9Stat *s) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
290 struct stat st;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
291
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 switch (code) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 case 01: // SS.Ready
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
294 fstat(fileno(p->fp),&st);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
295 if (pos = ftell(fp)) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
296 return st.size - pos;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
297 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
298 break;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
299 case 02: // SS.SIZ
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
300 fstat(fileno(p->fp),&st);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
301 return st.size ;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
302 break;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
303 case 05: // SS.Pos
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
304 return ftell(s->fp);
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
305 break;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
306 case 15: // SS.FD
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
307 break;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
308 case 0x20: // Pos.FDInf
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
309 break;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
310 default: return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
311 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
312 return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
313 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
314
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
315 /*
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
316 * I$SetStat Entry Point
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
317 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
318 * Entry:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
319 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
320 * Exit:
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
321 *
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
322 * Error: CC Carry set
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
323 * B = errcode
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
324 */
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
325
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
326 int vrbf_getstat(int code,OPathDesc *p, O9Stat *s) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
327 switch (code) {
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
328 case 0: // SS.Opt
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
329 break;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
330 case 02: // SS.SIZ
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
331 break;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
332 case 15: // SS.FD
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
333 break;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
334 case 0x11: // SS.Lock
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
335 break;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
336 case 0x10: // SS.Ticks
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
337 break;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
338 case 0x20: // SS.RsBit
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
339 break;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
340 case 0x1c: // SS.Attr
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
341 break;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
342 default: return -1;
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
343 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
344 }
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
345
7a83a6a1685a vdisk start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
346