yaffs Refactorisation first phase
[yaffs2.git] / direct / yaffsfs.h
1 /*
2  * YAFFS: Yet another Flash File System . A NAND-flash specific file system. 
3  *
4  * Copyright (C) 2002-2010 Aleph One Ltd.
5  *   for Toby Churchill Ltd and Brightstar Engineering
6  *
7  * Created by Charles Manning <charles@aleph1.co.uk>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU Lesser General Public License version 2.1 as
11  * published by the Free Software Foundation.
12  *
13  * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
14  */
15
16 /*
17  * Header file for using yaffs in an application via
18  * a direct interface.
19  */
20
21
22 #ifndef __YAFFSFS_H__
23 #define __YAFFSFS_H__
24
25 #include "yaffscfg.h"
26 #include "yportenv.h"
27
28
29 //typedef long off_t;
30 //typedef long dev_t;
31 //typedef unsigned long mode_t;
32
33
34 #ifndef NAME_MAX
35 #define NAME_MAX        256
36 #endif
37
38
39 #ifdef CONFIG_YAFFSFS_PROVIDE_VALUES
40
41 #ifndef O_RDONLY
42 #define O_RDONLY        00
43 #endif
44
45 #ifndef O_WRONLY
46 #define O_WRONLY        01
47 #endif
48
49 #ifndef O_RDWR
50 #define O_RDWR          02
51 #endif
52
53 #ifndef O_CREAT         
54 #define O_CREAT         0100
55 #endif
56
57 #ifndef O_EXCL
58 #define O_EXCL          0200
59 #endif
60
61 #ifndef O_TRUNC
62 #define O_TRUNC         01000
63 #endif
64
65 #ifndef O_APPEND
66 #define O_APPEND        02000
67 #endif
68
69 #ifndef SEEK_SET
70 #define SEEK_SET        0
71 #endif
72
73 #ifndef SEEK_CUR
74 #define SEEK_CUR        1
75 #endif
76
77 #ifndef SEEK_END
78 #define SEEK_END        2
79 #endif
80
81 #ifndef EBUSY
82 #define EBUSY   16
83 #endif
84
85 #ifndef ENODEV
86 #define ENODEV  19
87 #endif
88
89 #ifndef EINVAL
90 #define EINVAL  22
91 #endif
92
93 #ifndef EBADF
94 #define EBADF   9
95 #endif
96
97 #ifndef EACCES
98 #define EACCES  13
99 #endif
100
101 #ifndef EXDEV   
102 #define EXDEV   18
103 #endif
104
105 #ifndef ENOENT
106 #define ENOENT  2
107 #endif
108
109 #ifndef ENOSPC
110 #define ENOSPC  28
111 #endif
112
113 #ifndef ERANGE
114 #define ERANGE 34
115 #endif
116
117 #ifndef ENODATA
118 #define ENODATA 61
119 #endif
120
121 #ifndef ENOTEMPTY
122 #define ENOTEMPTY 39
123 #endif
124
125 #ifndef ENAMETOOLONG
126 #define ENAMETOOLONG 36
127 #endif
128
129 #ifndef ENOMEM
130 #define ENOMEM 12
131 #endif
132
133 #ifndef EEXIST
134 #define EEXIST 17
135 #endif
136
137 #ifndef ENOTDIR
138 #define ENOTDIR 20
139 #endif
140
141 #ifndef EISDIR
142 #define EISDIR 21
143 #endif
144
145
146 // Mode flags
147
148 #ifndef S_IFMT
149 #define S_IFMT          0170000
150 #endif
151
152 #ifndef S_IFLNK
153 #define S_IFLNK         0120000
154 #endif
155
156 #ifndef S_IFDIR
157 #define S_IFDIR         0040000
158 #endif
159
160 #ifndef S_IFREG
161 #define S_IFREG         0100000
162 #endif
163
164 #ifndef S_IREAD 
165 #define S_IREAD         0000400
166 #endif
167
168 #ifndef S_IWRITE
169 #define S_IWRITE        0000200
170 #endif
171
172 #ifndef S_IEXEC
173 #define S_IEXEC 0000100
174 #endif
175
176 #ifndef XATTR_CREATE
177 #define XATTR_CREATE 1
178 #endif
179
180 #ifndef XATTR_REPLACE
181 #define XATTR_REPLACE 2
182 #endif
183
184 #ifndef R_OK
185 #define R_OK    4
186 #define W_OK    2
187 #define X_OK    1
188 #define F_OK    0
189 #endif
190
191 #else
192 #include <errno.h>
193 #include <sys/stat.h>
194 #include <fcntl.h>
195 #endif
196
197
198 struct yaffs_dirent{
199     long d_ino;                 /* inode number */
200     off_t d_off;                /* offset to this dirent */
201     unsigned short d_reclen;    /* length of this d_name */
202     YUCHAR  d_type;     /* type of this record */
203     YCHAR d_name [NAME_MAX+1];   /* file name (null-terminated) */
204     unsigned d_dont_use;        /* debug pointer, not for public consumption */
205 };
206
207 typedef struct yaffs_dirent yaffs_dirent;
208
209
210 typedef struct __opaque yaffs_DIR;
211
212
213
214 struct yaffs_stat{
215     int               st_dev;      /* device */
216     int           st_ino;      /* inode */
217     unsigned      st_mode;     /* protection */
218     int           st_nlink;    /* number of hard links */
219     int           st_uid;      /* user ID of owner */
220     int           st_gid;      /* group ID of owner */
221     unsigned      st_rdev;     /* device type (if inode device) */
222     off_t         st_size;     /* total size, in bytes */
223     unsigned long st_blksize;  /* blocksize for filesystem I/O */
224     unsigned long st_blocks;   /* number of blocks allocated */
225 #ifdef CONFIG_YAFFS_WINCE
226         /* Special 64-bit times for WinCE */
227         unsigned long yst_wince_atime[2];
228         unsigned long yst_wince_mtime[2];
229         unsigned long yst_wince_ctime[2];
230 #else
231         unsigned long yst_atime;    /* time of last access */
232     unsigned long yst_mtime;    /* time of last modification */
233     unsigned long yst_ctime;    /* time of last change */
234 #endif
235 };
236
237 int yaffs_open(const YCHAR *path, int oflag, int mode) ;
238 int yaffs_close(int fd) ;
239 int yaffs_fsync(int fd) ;
240 int yaffs_fdatasync(int fd) ;
241 int yaffs_flush(int fd) ; /* same as yaffs_fsync() */
242
243 int yaffs_access(const YCHAR *path, int amode);
244
245 int yaffs_dup(int fd);
246
247 int yaffs_read(int fd, void *buf, unsigned int nbyte) ;
248 int yaffs_write(int fd, const void *buf, unsigned int nbyte) ;
249
250 int yaffs_pread(int fd, void *buf, unsigned int nbyte, unsigned int offset);
251 int yaffs_pwrite(int fd, const void *buf, unsigned int nbyte, unsigned int offset);
252
253 off_t yaffs_lseek(int fd, off_t offset, int whence) ;
254
255 int yaffs_truncate(const YCHAR *path, off_t newSize);
256 int yaffs_ftruncate(int fd, off_t newSize);
257
258 int yaffs_unlink(const YCHAR *path) ;
259 int yaffs_rename(const YCHAR *oldPath, const YCHAR *newPath) ;
260
261 int yaffs_stat(const YCHAR *path, struct yaffs_stat *buf) ;
262 int yaffs_lstat(const YCHAR *path, struct yaffs_stat *buf) ;
263 int yaffs_fstat(int fd, struct yaffs_stat *buf) ;
264
265 int yaffs_setxattr(const char *path, const char *name, const void *data, int size, int flags);
266 int yaffs_lsetxattr(const char *path, const char *name, const void *data, int size, int flags);
267 int yaffs_fsetxattr(int fd, const char *name, const void *data, int size, int flags);
268
269 int yaffs_getxattr(const char *path, const char *name, void *data, int size);
270 int yaffs_lgetxattr(const char *path, const char *name, void *data, int size);
271 int yaffs_fgetxattr(int fd, const char *name, void *data, int size);
272
273 int yaffs_removexattr(const char *path, const char *name);
274 int yaffs_lremovexattr(const char *path, const char *name);
275 int yaffs_fremovexattr(int fd, const char *name);
276
277 int yaffs_listxattr(const char *path, char *list, int size);
278 int yaffs_llistxattr(const char *path, char *list, int size);
279 int yaffs_flistxattr(int fd, char *list, int size);
280
281
282 #ifdef CONFIG_YAFFS_WINCE
283
284 int yaffs_set_wince_times(int fd, const unsigned *wctime, const unsigned *watime, const unsigned *wmtime);
285 int yaffs_get_wince_times(int fd, unsigned *wctime, unsigned *watime, unsigned *wmtime);
286
287 #endif
288
289 int yaffs_chmod(const YCHAR *path, mode_t mode); 
290 int yaffs_fchmod(int fd, mode_t mode); 
291
292 int yaffs_mkdir(const YCHAR *path, mode_t mode) ;
293 int yaffs_rmdir(const YCHAR *path) ;
294
295 yaffs_DIR *yaffs_opendir(const YCHAR *dirname) ;
296 struct yaffs_dirent *yaffs_readdir(yaffs_DIR *dirp) ;
297 void yaffs_rewinddir(yaffs_DIR *dirp) ;
298 int yaffs_closedir(yaffs_DIR *dirp) ;
299
300 int yaffs_mount(const YCHAR *path) ;
301 int yaffs_mount2(const YCHAR *path, int readOnly);
302 int yaffs_unmount(const YCHAR *path) ;
303 int yaffs_unmount2(const YCHAR *path, int force);
304 int yaffs_remount(const YCHAR *path, int force, int readOnly);
305
306
307 int yaffs_sync(const YCHAR *path) ;
308
309 int yaffs_symlink(const YCHAR *oldpath, const YCHAR *newpath); 
310 int yaffs_readlink(const YCHAR *path, YCHAR *buf, int bufsiz); 
311
312 int yaffs_link(const YCHAR *oldpath, const YCHAR *newpath); 
313 int yaffs_mknod(const YCHAR *pathname, mode_t mode, dev_t dev);
314
315 loff_t yaffs_freespace(const YCHAR *path);
316 loff_t yaffs_totalspace(const YCHAR *path);
317
318 int yaffs_inodecount(const YCHAR *path);
319
320
321
322
323 int yaffs_StartUp(void);
324
325 #endif
326
327