00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00070 #include <errno.h>
00071 #include <sys/device.h>
00072 #include <string.h>
00073
00074 #include <fs/fs.h>
00075 #include <unistd.h>
00076 #include <sys/stat.h>
00077
00082
00083 static int PathOperation(CONST char *path, int opcode)
00084 {
00085 NUTDEVICE *dev;
00086 char dev_name[9];
00087 u_char nidx;
00088 CONST char *nptr = path;
00089
00090
00091
00092
00093 for (nidx = 0; *nptr && *nptr != ':' && nidx < 8; nidx++) {
00094 dev_name[nidx] = *nptr++;
00095 }
00096 dev_name[nidx] = 0;
00097 nptr++;
00098
00099
00100
00101
00102
00103 if ((dev = NutDeviceLookup(dev_name)) == 0) {
00104 errno = ENOENT;
00105 return -1;
00106 }
00107 return (*dev->dev_ioctl) (dev, opcode, (void *) nptr);
00108 }
00109
00124 int access(CONST char *path, int what)
00125 {
00126 struct stat s;
00127
00128 if (stat(path, &s)) {
00129 return -1;
00130 }
00131 return 0;
00132 }
00133
00143 long lseek(int fh, long pos, int whence)
00144 {
00145
00146
00147
00148
00149
00150
00151 return -1;
00152 }
00153
00163 int rmdir(CONST char *path)
00164 {
00165 return PathOperation(path, FS_DIR_REMOVE);
00166 }
00167
00173 int unlink(CONST char *path)
00174 {
00175 return PathOperation(path, FS_FILE_DELETE);
00176 }
00177
00178
00184 int stat(CONST char *path, struct stat *s)
00185 {
00186 NUTDEVICE *dev;
00187 char dev_name[9];
00188 u_char nidx;
00189 CONST char *nptr = path;
00190 FSCP_STATUS parms;
00191
00192
00193 for (nidx = 0; *nptr && *nptr != ':' && nidx < 8; nidx++) {
00194 dev_name[nidx] = *nptr++;
00195 }
00196 dev_name[nidx] = 0;
00197
00198
00199 if ((dev = NutDeviceLookup(dev_name)) != 0) {
00200 if (*nptr == ':') {
00201 nptr++;
00202 }
00203 parms.par_path = nptr;
00204 parms.par_stp = s;
00205 return (*dev->dev_ioctl) (dev, FS_STATUS, (void *) &parms);
00206 }
00207 return -1;
00208 }
00209
00215 int fstat(int fh, struct stat *s)
00216 {
00217 return -1;
00218 }
00219
00225 int mkdir(CONST char *path, int mode)
00226 {
00227 return PathOperation(path, FS_DIR_CREATE);
00228 }
00229
00242 int rename(CONST char *old_name, CONST char *new_name)
00243 {
00244 int rc = -1;
00245 NUTDEVICE *dev;
00246 char old_devname[9];
00247 char new_devname[9];
00248 u_char nidx;
00249 CONST char *nptr;
00250 FSCP_RENAME parms;
00251
00252
00253 nptr = old_name;
00254 for (nidx = 0; *nptr && *nptr != ':' && nidx < 8; nidx++, nptr++) {
00255 old_devname[nidx] = *nptr;
00256 }
00257 old_devname[nidx] = 0;
00258
00259
00260 if (*nptr++ == ':') {
00261
00262 parms.par_old = nptr;
00263
00264
00265 nptr = new_name;
00266
00267 for (nidx = 0; *nptr && *nptr != ':' && nidx < 8; nidx++, nptr++) {
00268 new_devname[nidx] = *nptr;
00269 }
00270 new_devname[nidx] = 0;
00271
00272
00273 if (*nptr++ == ':') {
00274
00275 parms.par_new = nptr;
00276
00277
00278 if (strcmp(new_devname, old_devname) == 0) {
00279
00280 if ((dev = NutDeviceLookup(old_devname)) == 0) {
00281 errno = ENOENT;
00282 } else {
00283 rc = (*dev->dev_ioctl) (dev, FS_RENAME, (void *) &parms);
00284 }
00285 }
00286 }
00287 }
00288 return rc;
00289 }
00290