232 lines
4.6 KiB
C
232 lines
4.6 KiB
C
|
/*
|
||
|
* 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
|