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
00067 #include <errno.h>
00068 #include <sys/device.h>
00069 #include <string.h>
00070
00071 #include <fs/fs.h>
00072 #include <unistd.h>
00073 #include <sys/stat.h>
00074
00079
00080 static int PathOperation(CONST char *path, int opcode)
00081 {
00082 NUTDEVICE *dev;
00083 char dev_name[9];
00084 u_char nidx;
00085 CONST char *nptr = path;
00086
00087
00088
00089
00090 for (nidx = 0; *nptr && *nptr != ':' && nidx < 8; nidx++) {
00091 dev_name[nidx] = *nptr++;
00092 }
00093 dev_name[nidx] = 0;
00094 nptr++;
00095
00096
00097
00098
00099
00100 if ((dev = NutDeviceLookup(dev_name)) == 0) {
00101 errno = ENOENT;
00102 return -1;
00103 }
00104 return (*dev->dev_ioctl) (dev, opcode, (void *) nptr);
00105 }
00106
00115 int access(CONST char *path, int what)
00116 {
00117 return -1;
00118 }
00119
00129 long lseek(int fh, long pos, int whence)
00130 {
00131
00132
00133
00134
00135
00136
00137 return -1;
00138 }
00139
00149 int rmdir(CONST char *path)
00150 {
00151 return PathOperation(path, FS_DIR_REMOVE);
00152 }
00153
00159 int unlink(CONST char *path)
00160 {
00161 return PathOperation(path, FS_FILE_DELETE);
00162 }
00163
00164
00170 int stat(CONST char *path, struct stat *s)
00171 {
00172 NUTDEVICE *dev;
00173 char dev_name[9];
00174 u_char nidx;
00175 CONST char *nptr = path;
00176 FSCP_STATUS parms;
00177
00178
00179 for (nidx = 0; *nptr && *nptr != ':' && nidx < 8; nidx++) {
00180 dev_name[nidx] = *nptr++;
00181 }
00182 dev_name[nidx] = 0;
00183
00184
00185 if ((dev = NutDeviceLookup(dev_name)) != 0) {
00186 if (*nptr == ':') {
00187 nptr++;
00188 }
00189 parms.par_path = nptr;
00190 parms.par_stp = s;
00191 return (*dev->dev_ioctl) (dev, FS_STATUS, (void *) &parms);
00192 }
00193 return -1;
00194 }
00195
00201 int fstat(int fh, struct stat *s)
00202 {
00203 return -1;
00204 }
00205
00211 int mkdir(CONST char *path, int mode)
00212 {
00213 return PathOperation(path, FS_DIR_CREATE);
00214 }
00215
00228 int rename(CONST char *old_name, CONST char *new_name)
00229 {
00230 int rc = -1;
00231 NUTDEVICE *dev;
00232 char old_devname[9];
00233 char new_devname[9];
00234 u_char nidx;
00235 CONST char *nptr;
00236 FSCP_RENAME parms;
00237
00238
00239 nptr = old_name;
00240 for (nidx = 0; *nptr && *nptr != ':' && nidx < 8; nidx++, nptr++) {
00241 old_devname[nidx] = *nptr;
00242 }
00243 old_devname[nidx] = 0;
00244
00245
00246 if (*nptr++ == ':') {
00247
00248 parms.par_old = nptr;
00249
00250
00251 nptr = new_name;
00252
00253 for (nidx = 0; *nptr && *nptr != ':' && nidx < 8; nidx++, nptr++) {
00254 new_devname[nidx] = *nptr;
00255 }
00256 new_devname[nidx] = 0;
00257
00258
00259 if (*nptr++ == ':') {
00260
00261 parms.par_new = nptr;
00262
00263
00264 if (strcmp(new_devname, old_devname) == 0) {
00265
00266 if ((dev = NutDeviceLookup(old_devname)) == 0) {
00267 errno = ENOENT;
00268 } else {
00269 rc = (*dev->dev_ioctl) (dev, FS_RENAME, (void *) &parms);
00270 }
00271 }
00272 }
00273 }
00274 return rc;
00275 }
00276