1 /*
2  * Copyright (C) 2015-2017 Alibaba Group Holding Limited
3  */
4 
5 #include <string.h>
6 
7 #include "aos/vfs.h"
8 #include "aos/errno.h"
9 
10 #include "vfs_types.h"
11 #include "vfs_api.h"
12 
_vfs_to_aos_res(int res)13 static int _vfs_to_aos_res(int res)
14 {
15     switch (res) {
16         case VFS_OK:
17             return 0;
18         case VFS_ERR_NOMEM:
19             return -ENOMEM;
20         case VFS_ERR_INVAL:
21             return -EINVAL;
22         case VFS_ERR_NOENT:
23             return -ENOENT;
24         case VFS_ERR_NAMETOOLONG:
25             return -ENAMETOOLONG;
26         case VFS_ERR_NOSYS:
27             return -ENOSYS;
28         case VFS_ERR_ENFILE:
29             return -ENFILE;
30         case VFS_ERR_NODEV:
31             return -ENODEV;
32         case VFS_ERR_LOCK:
33             return -EIO;
34         case VFS_ERR_BUSY:
35             return -EBUSY;
36         default:
37             return res;
38     }
39 }
40 
aos_vfs_init(void)41 int aos_vfs_init(void)
42 {
43     return _vfs_to_aos_res(vfs_init());
44 }
45 
aos_open(const char * path,int flags)46 int aos_open(const char *path, int flags)
47 {
48     return _vfs_to_aos_res(vfs_open(path, flags));
49 }
50 
aos_close(int fd)51 int aos_close(int fd)
52 {
53     return _vfs_to_aos_res(vfs_close(fd));
54 }
55 
aos_read(int fd,void * buf,size_t nbytes)56 ssize_t aos_read(int fd, void *buf, size_t nbytes)
57 {
58     return _vfs_to_aos_res(vfs_read(fd, buf, nbytes));
59 }
60 
aos_write(int fd,const void * buf,size_t nbytes)61 ssize_t aos_write(int fd, const void *buf, size_t nbytes)
62 {
63     return _vfs_to_aos_res(vfs_write(fd, buf, nbytes));
64 }
65 
aos_ioctl(int fd,int cmd,unsigned long arg)66 int aos_ioctl(int fd, int cmd, unsigned long arg)
67 {
68     return _vfs_to_aos_res(vfs_ioctl(fd, cmd, arg));
69 }
70 
aos_do_pollfd(int fd,int flag,poll_notify_t notify,void * fds,void * arg)71 int aos_do_pollfd(int fd, int flag, poll_notify_t notify, void *fds, void *arg)
72 {
73     return _vfs_to_aos_res(vfs_do_pollfd(fd, flag, (vfs_poll_notify_t)notify, fds, arg));
74 }
75 
aos_lseek(int fd,off_t offset,int whence)76 off_t aos_lseek(int fd, off_t offset, int whence)
77 {
78     return _vfs_to_aos_res(vfs_lseek(fd, offset, whence));
79 }
80 
aos_sync(int fd)81 int aos_sync(int fd)
82 {
83     return _vfs_to_aos_res(vfs_sync(fd));
84 }
85 
aos_allsync(void)86 void aos_allsync(void)
87 {
88     vfs_allsync();
89 }
90 
aos_stat(const char * path,struct aos_stat * st)91 int aos_stat(const char *path, struct aos_stat *st)
92 {
93     return _vfs_to_aos_res(vfs_stat(path, (vfs_stat_t *)st));
94 }
95 
aos_fstat(int fd,struct aos_stat * st)96 int aos_fstat(int fd, struct aos_stat *st)
97 {
98     return _vfs_to_aos_res(vfs_fstat(fd, (vfs_stat_t *)st));
99 }
100 
aos_link(const char * oldpath,const char * newpath)101 int aos_link(const char *oldpath, const char *newpath)
102 {
103     return _vfs_to_aos_res(vfs_link(oldpath, newpath));
104 }
105 
aos_unlink(const char * path)106 int aos_unlink(const char *path)
107 {
108     return _vfs_to_aos_res(vfs_unlink(path));
109 }
110 
aos_remove(const char * path)111 int aos_remove(const char *path)
112 {
113     return _vfs_to_aos_res(vfs_remove(path));
114 }
115 
aos_rename(const char * oldpath,const char * newpath)116 int aos_rename(const char *oldpath, const char *newpath)
117 {
118     return _vfs_to_aos_res(vfs_rename(oldpath, newpath));
119 }
120 
aos_opendir(const char * path)121 aos_dir_t *aos_opendir(const char *path)
122 {
123     return (aos_dir_t *)vfs_opendir(path);
124 }
125 
aos_closedir(aos_dir_t * dir)126 int aos_closedir(aos_dir_t *dir)
127 {
128     return _vfs_to_aos_res(vfs_closedir((vfs_dir_t *)dir));
129 }
130 
aos_readdir(aos_dir_t * dir)131 aos_dirent_t *aos_readdir(aos_dir_t *dir)
132 {
133     return (aos_dirent_t *)vfs_readdir((vfs_dir_t *)dir);
134 }
135 
aos_mkdir(const char * path)136 int aos_mkdir(const char *path)
137 {
138     return _vfs_to_aos_res(vfs_mkdir(path));
139 }
140 
aos_rmdir(const char * path)141 int aos_rmdir(const char *path)
142 {
143     return _vfs_to_aos_res(vfs_rmdir(path));
144 }
145 
aos_rewinddir(aos_dir_t * dir)146 void aos_rewinddir(aos_dir_t *dir)
147 {
148     vfs_rewinddir((vfs_dir_t *)dir);
149 }
150 
aos_telldir(aos_dir_t * dir)151 long aos_telldir(aos_dir_t *dir)
152 {
153     return _vfs_to_aos_res(vfs_telldir((vfs_dir_t *)dir));
154 }
155 
aos_seekdir(aos_dir_t * dir,long loc)156 void aos_seekdir(aos_dir_t *dir, long loc)
157 {
158     vfs_seekdir((vfs_dir_t *)dir, loc);
159 }
160 
aos_statfs(const char * path,struct aos_statfs * buf)161 int aos_statfs(const char *path, struct aos_statfs *buf)
162 {
163     return _vfs_to_aos_res(vfs_statfs(path, (vfs_statfs_t *)buf));
164 }
165 
aos_access(const char * path,int amode)166 int aos_access(const char *path, int amode)
167 {
168     return _vfs_to_aos_res(vfs_access(path, amode));
169 }
170 
aos_chdir(const char * path)171 int aos_chdir(const char *path)
172 {
173     return _vfs_to_aos_res(vfs_chdir(path));
174 }
175 
aos_getcwd(char * buf,size_t size)176 char *aos_getcwd(char *buf, size_t size)
177 {
178     return vfs_getcwd(buf, size);
179 }
180 
aos_vfs_fd_offset_get(void)181 int aos_vfs_fd_offset_get(void)
182 {
183     return vfs_fd_offset_get();
184 }
185 
aos_fcntl(int fd,int cmd,int val)186 int aos_fcntl(int fd, int cmd, int val)
187 {
188     return vfs_fcntl(fd, cmd, val);
189 }
190 
aos_pathconf(const char * path,int name)191 long aos_pathconf(const char *path, int name)
192 {
193     return _vfs_to_aos_res(vfs_pathconf(path, name));
194 }
195 
aos_fpathconf(int fh,int name)196 long aos_fpathconf(int fh, int name)
197 {
198     return _vfs_to_aos_res(vfs_fpathconf(fh, name));
199 }
200 
aos_utime(const char * path,const struct aos_utimbuf * times)201 int aos_utime(const char *path, const struct aos_utimbuf *times)
202 {
203     return _vfs_to_aos_res(vfs_utime(path, (vfs_utimbuf_t *)times));
204 }
205 
aos_register_driver(const char * path,file_ops_t * ops,void * arg)206 int aos_register_driver(const char *path, file_ops_t *ops, void *arg)
207 {
208     return _vfs_to_aos_res(vfs_register_driver(path, (vfs_file_ops_t *)ops, arg));
209 }
210 
aos_unregister_driver(const char * path)211 int aos_unregister_driver(const char *path)
212 {
213     return _vfs_to_aos_res(vfs_unregister_driver(path));
214 }
215 
aos_register_fs(const char * path,fs_ops_t * ops,void * arg)216 int aos_register_fs(const char *path, fs_ops_t* ops, void *arg)
217 {
218     return _vfs_to_aos_res(vfs_register_fs(path, (vfs_filesystem_ops_t *)ops, arg));
219 }
220 
aos_unregister_fs(const char * path)221 int aos_unregister_fs(const char *path)
222 {
223     return _vfs_to_aos_res(vfs_unregister_fs(path));
224 }
225