| /* | 
 |  * YAFFS: Yet another Flash File System . A NAND-flash specific file system. | 
 |  * | 
 |  * Copyright (C) 2002-2007 Aleph One Ltd. | 
 |  *   for Toby Churchill Ltd and Brightstar Engineering | 
 |  * | 
 |  * Created by Charles Manning <charles@aleph1.co.uk> | 
 |  * | 
 |  * This program is free software; you can redistribute it and/or modify | 
 |  * it under the terms of the GNU Lesser General Public License version 2.1 as | 
 |  * published by the Free Software Foundation. | 
 |  * | 
 |  * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL. | 
 |  */ | 
 |  | 
 | /* | 
 |  * Header file for using yaffs in an application via | 
 |  * a direct interface. | 
 |  */ | 
 |  | 
 |  | 
 | #ifndef __YAFFSFS_H__ | 
 | #define __YAFFSFS_H__ | 
 |  | 
 | #include "yaffscfg.h" | 
 | #include "yportenv.h" | 
 |  | 
 |  | 
 | //typedef long off_t; | 
 | //typedef long dev_t; | 
 | //typedef unsigned long mode_t; | 
 |  | 
 |  | 
 | #ifndef NAME_MAX | 
 | #define NAME_MAX	256 | 
 | #endif | 
 |  | 
 | #ifndef O_RDONLY | 
 | #define O_RDONLY	00 | 
 | #endif | 
 |  | 
 | #ifndef O_WRONLY | 
 | #define O_WRONLY	01 | 
 | #endif | 
 |  | 
 | #ifndef O_RDWR | 
 | #define O_RDWR		02 | 
 | #endif | 
 |  | 
 | #ifndef O_CREAT | 
 | #define O_CREAT 	0100 | 
 | #endif | 
 |  | 
 | #ifndef O_EXCL | 
 | #define O_EXCL		0200 | 
 | #endif | 
 |  | 
 | #ifndef O_TRUNC | 
 | #define O_TRUNC		01000 | 
 | #endif | 
 |  | 
 | #ifndef O_APPEND | 
 | #define O_APPEND	02000 | 
 | #endif | 
 |  | 
 | #ifndef SEEK_SET | 
 | #define SEEK_SET	0 | 
 | #endif | 
 |  | 
 | #ifndef SEEK_CUR | 
 | #define SEEK_CUR	1 | 
 | #endif | 
 |  | 
 | #ifndef SEEK_END | 
 | #define SEEK_END	2 | 
 | #endif | 
 |  | 
 | #ifndef EBUSY | 
 | #define EBUSY	16 | 
 | #endif | 
 |  | 
 | #ifndef ENODEV | 
 | #define ENODEV	19 | 
 | #endif | 
 |  | 
 | #ifndef EINVAL | 
 | #define EINVAL	22 | 
 | #endif | 
 |  | 
 | #ifndef EBADF | 
 | #define EBADF	9 | 
 | #endif | 
 |  | 
 | #ifndef EACCESS | 
 | #define EACCESS	13 | 
 | #endif | 
 |  | 
 | #ifndef EXDEV | 
 | #define EXDEV	18 | 
 | #endif | 
 |  | 
 | #ifndef ENOENT | 
 | #define ENOENT	2 | 
 | #endif | 
 |  | 
 | #ifndef ENOSPC | 
 | #define ENOSPC	28 | 
 | #endif | 
 |  | 
 | #ifndef ENOTEMPTY | 
 | #define ENOTEMPTY 39 | 
 | #endif | 
 |  | 
 | #ifndef ENOMEM | 
 | #define ENOMEM 12 | 
 | #endif | 
 |  | 
 | #ifndef EEXIST | 
 | #define EEXIST 17 | 
 | #endif | 
 |  | 
 | #ifndef ENOTDIR | 
 | #define ENOTDIR 20 | 
 | #endif | 
 |  | 
 | #ifndef EISDIR | 
 | #define EISDIR 21 | 
 | #endif | 
 |  | 
 |  | 
 | // Mode flags | 
 |  | 
 | #ifndef S_IFMT | 
 | #define S_IFMT		0170000 | 
 | #endif | 
 |  | 
 | #ifndef S_IFLNK | 
 | #define S_IFLNK		0120000 | 
 | #endif | 
 |  | 
 | #ifndef S_IFDIR | 
 | #define S_IFDIR		0040000 | 
 | #endif | 
 |  | 
 | #ifndef S_IFREG | 
 | #define S_IFREG		0100000 | 
 | #endif | 
 |  | 
 | #ifndef S_IREAD | 
 | #define S_IREAD		0000400 | 
 | #endif | 
 |  | 
 | #ifndef S_IWRITE | 
 | #define	S_IWRITE	0000200 | 
 | #endif | 
 |  | 
 |  | 
 |  | 
 |  | 
 | struct yaffs_dirent{ | 
 |     long d_ino;                 /* inode number */ | 
 |     off_t d_off;                /* offset to this dirent */ | 
 |     unsigned short d_reclen;    /* length of this d_name */ | 
 |     char d_name [NAME_MAX+1];   /* file name (null-terminated) */ | 
 |     unsigned d_dont_use;	/* debug pointer, not for public consumption */ | 
 | }; | 
 |  | 
 | typedef struct yaffs_dirent yaffs_dirent; | 
 |  | 
 |  | 
 | typedef struct __opaque yaffs_DIR; | 
 |  | 
 |  | 
 |  | 
 | struct yaffs_stat{ | 
 |     int		      st_dev;      /* device */ | 
 |     int           st_ino;      /* inode */ | 
 |     mode_t        st_mode;     /* protection */ | 
 |     int           st_nlink;    /* number of hard links */ | 
 |     int           st_uid;      /* user ID of owner */ | 
 |     int           st_gid;      /* group ID of owner */ | 
 |     unsigned      st_rdev;     /* device type (if inode device) */ | 
 |     off_t         st_size;     /* total size, in bytes */ | 
 |     unsigned long st_blksize;  /* blocksize for filesystem I/O */ | 
 |     unsigned long st_blocks;   /* number of blocks allocated */ | 
 |     unsigned long yst_atime;    /* time of last access */ | 
 |     unsigned long yst_mtime;    /* time of last modification */ | 
 |     unsigned long yst_ctime;    /* time of last change */ | 
 | }; | 
 |  | 
 | int yaffs_open(const char *path, int oflag, int mode) ; | 
 | int yaffs_read(int fd, void *buf, unsigned int nbyte) ; | 
 | int yaffs_write(int fd, const void *buf, unsigned int nbyte) ; | 
 | int yaffs_close(int fd) ; | 
 | off_t yaffs_lseek(int fd, off_t offset, int whence) ; | 
 | int yaffs_truncate(int fd, off_t newSize); | 
 |  | 
 | int yaffs_unlink(const char *path) ; | 
 | int yaffs_rename(const char *oldPath, const char *newPath) ; | 
 |  | 
 | int yaffs_stat(const char *path, struct yaffs_stat *buf) ; | 
 | int yaffs_lstat(const char *path, struct yaffs_stat *buf) ; | 
 | int yaffs_fstat(int fd, struct yaffs_stat *buf) ; | 
 |  | 
 | int yaffs_chmod(const char *path, mode_t mode); | 
 | int yaffs_fchmod(int fd, mode_t mode); | 
 |  | 
 | int yaffs_mkdir(const char *path, mode_t mode) ; | 
 | int yaffs_rmdir(const char *path) ; | 
 |  | 
 | yaffs_DIR *yaffs_opendir(const char *dirname) ; | 
 | struct yaffs_dirent *yaffs_readdir(yaffs_DIR *dirp) ; | 
 | void yaffs_rewinddir(yaffs_DIR *dirp) ; | 
 | int yaffs_closedir(yaffs_DIR *dirp) ; | 
 |  | 
 | int yaffs_mount(const char *path) ; | 
 | int yaffs_unmount(const char *path) ; | 
 |  | 
 | int yaffs_symlink(const char *oldpath, const char *newpath); | 
 | int yaffs_readlink(const char *path, char *buf, int bufsiz); | 
 |  | 
 | int yaffs_link(const char *oldpath, const char *newpath); | 
 | int yaffs_mknod(const char *pathname, mode_t mode, dev_t dev); | 
 |  | 
 | loff_t yaffs_freespace(const char *path); | 
 |  | 
 | void yaffs_initialise(yaffsfs_DeviceConfiguration *configList); | 
 |  | 
 | int yaffs_StartUp(void); | 
 |  | 
 | #endif |