uffs_fs.c File Reference

basic file operations More...

#include "uffs/uffs_fs.h"
#include "uffs/uffs_config.h"
#include "uffs/ubuffer.h"
#include "uffs/uffs_ecc.h"
#include "uffs/uffs_badblock.h"
#include "uffs/uffs_os.h"
#include <string.h>

Go to the source code of this file.

Defines

#define GET_BLOCK_FROM_NODE(obj)   ((obj)->type == UFFS_TYPE_DIR ? (obj)->node->u.dir.block : (obj)->node->u.file.block)
#define GET_SERIAL_FROM_NODE(obj)   ((obj)->type == UFFS_TYPE_DIR ? (obj)->node->u.dir.serial : (obj)->node->u.file.serial)
#define PFX   "fs:"

Functions

URET uffs_CloseFindObject (uffs_FindInfo *f)
URET uffs_CloseObject (uffs_Object *obj)
URET uffs_CreateObject (uffs_Object *obj, const char *fullname, int oflag, int pmode)
URET uffs_DeleteObject (const char *name)
int uffs_EndOfFile (uffs_Object *obj)
URET uffs_FindFirstObject (uffs_ObjectInfo *info, uffs_FindInfo *f)
URET uffs_FindNextObject (uffs_ObjectInfo *info, uffs_FindInfo *f)
int uffs_GetCurOffset (uffs_Object *obj)
uffs_Objectuffs_GetObject (void)
uffs_Objectuffs_GetObjectByIndex (int idx)
int uffs_GetObjectIndex (uffs_Object *obj)
URET uffs_GetObjectInfo (uffs_Object *obj, uffs_ObjectInfo *info)
URET uffs_InitObjectBuf (void)
URET uffs_OpenFindObject (uffs_FindInfo *f, const char *dir)
URET uffs_OpenObject (uffs_Object *obj, const char *fullname, int oflag, int pmode)
void uffs_PutObject (uffs_Object *obj)
int uffs_ReadObject (uffs_Object *obj, void *data, int len)
URET uffs_RenameObject (const char *old_name, const char *new_name)
long uffs_SeekObject (uffs_Object *obj, long offset, int origin)
URET uffs_TruncateObject (uffs_Object *obj, u32 remain)
int uffs_WriteObject (uffs_Object *obj, const void *data, int len)


Detailed Description

basic file operations

Author:
Ricky Zheng, created 12th May, 2005

Definition in file uffs_fs.c.


Define Documentation

#define GET_BLOCK_FROM_NODE ( obj   )     ((obj)->type == UFFS_TYPE_DIR ? (obj)->node->u.dir.block : (obj)->node->u.file.block)

Definition at line 18 of file uffs_fs.c.

Referenced by uffs_DeleteObject().

#define GET_SERIAL_FROM_NODE ( obj   )     ((obj)->type == UFFS_TYPE_DIR ? (obj)->node->u.dir.serial : (obj)->node->u.file.serial)

Definition at line 17 of file uffs_fs.c.

#define PFX   "fs:"

Definition at line 15 of file uffs_fs.c.


Function Documentation

URET uffs_CloseFindObject ( uffs_FindInfo f  ) 

Definition at line 1708 of file uffs_fs.c.

References uffs_FindInfoSt::dev, uffs_FindInfoSt::hash, NULL, uffs_FindInfoSt::obj, U_FAIL, U_SUCC, uffs_PutObject(), and uffs_FindInfoSt::work.

Referenced by cmdLs().

URET uffs_CloseObject ( uffs_Object obj  ) 

Definition at line 567 of file uffs_fs.c.

References uffs_ObjectSt::dev, uffs_fileInfoSt::lastModify, uffs_ObjectSt::node, NULL, uffs_ObjectSt::oflag, uffs_ObjectSt::openSucc, PFX, uffs_ObjectSt::type, U_FAIL, U_SUCC, U_TRUE, uffs_BufFlush(), uffs_BufGetEx(), uffs_BufPut(), uffs_BufRead(), uffs_BufWrite(), UFFS_ERR_SERIOUS, uffs_GetCurDateTime(), uffs_Perror(), UFFS_TYPE_DIR, UFFS_TYPE_FILE, UO_APPEND, UO_CREATE, UO_RDWR, UO_TRUNC, and UO_WRONLY.

Referenced by cmdCat(), cmdCp(), cmdMkdir(), cmdMkf(), cmdTest1(), DoTest(), and uffs_RenameObject().

URET uffs_CreateObject ( uffs_Object obj,
const char *  fullname,
int  oflag,
int  pmode 
)

Definition at line 128 of file uffs_fs.c.

References U_FAIL, U_SUCC, and UO_CREATE.

Referenced by cmdMkdir(), and cmdMkf().

URET uffs_DeleteObject ( const char *  name  ) 

delete uffs object

< make this buffer expired. Dangerous !? TODO: lock buffer ?

< ok, the object is deleted now.

Definition at line 1298 of file uffs_fs.c.

References blocklistSt::block, uffs_ObjectSt::dev, uffs_ObjectSt::father, GET_BLOCK_FROM_NODE, HAVE_BADBLOCK, uffs_treeNodeSt::list, uffs_BufSt::mark, uffs_ObjectSt::node, NULL, PFX, uffs_BufSt::refCount, uffs_ObjectSt::serial, uffs_ObjectSt::type, uffs_treeNodeSt::u, U_FAIL, U_SUCC, uffs_BreakFromEntry(), UFFS_BUF_EMPTY, uffs_BufFind(), uffs_BufFlush(), UFFS_ERR_NORMAL, uffs_FindDirNodeFromTreeWithFather(), uffs_FindFileNodeFromTreeWithFather(), uffs_GetObject(), uffs_InsertToErasedListTail(), uffs_OpenObject(), uffs_Perror(), uffs_RecoverBadBlock(), uffs_TruncateObject(), UFFS_TYPE_DIR, UO_RDWR, US_IREAD, and US_IWRITE.

Referenced by cmdRm().

int uffs_EndOfFile ( uffs_Object obj  ) 

check whether the file pointer is at the end of file

Parameters:
[in] obj uffs object
Returns:
return 1 if file pointer is at the end of file, return -1 if error occur, else return 0.

Definition at line 1035 of file uffs_fs.c.

References uffs_ObjectSt::dev, uffs_treeNodeSt::file, filehSt::len, uffs_ObjectSt::node, uffs_ObjectSt::openSucc, uffs_ObjectSt::pos, uffs_ObjectSt::type, uffs_treeNodeSt::u, U_TRUE, and UFFS_TYPE_FILE.

Referenced by cmdCat(), and cmdCp().

URET uffs_FindFirstObject ( uffs_ObjectInfo info,
uffs_FindInfo f 
)

Definition at line 1564 of file uffs_fs.c.

References uffs_FindInfoSt::dev, uffs_treeNodeSt::dir, DIR_NODE_ENTRY_LEN, uffs_treeSt::dirEntry, uffs_treeSt::dis, EMPTY_NODE, filehSt::father, uffs_FindInfoSt::father, dirhSt::father, uffs_treeNodeSt::file, FILE_NODE_ENTRY_LEN, uffs_treeSt::fileEntry, FROM_IDX, uffs_FindInfoSt::hash, uffs_treeNodeSt::hashNext, uffs_FindInfoSt::step, uffs_DeviceSt::tree, uffs_treeNodeSt::u, U_FAIL, U_SUCC, uffs_DeviceLock(), uffs_DeviceUnLock(), UFFS_TYPE_DIR, UFFS_TYPE_FILE, and uffs_FindInfoSt::work.

Referenced by cmdLs().

URET uffs_FindNextObject ( uffs_ObjectInfo info,
uffs_FindInfo f 
)

Definition at line 1622 of file uffs_fs.c.

References uffs_FindInfoSt::dev, uffs_treeNodeSt::dir, DIR_NODE_ENTRY_LEN, uffs_treeSt::dirEntry, uffs_treeSt::dis, EMPTY_NODE, uffs_FindInfoSt::father, dirhSt::father, FROM_IDX, uffs_FindInfoSt::hash, uffs_treeNodeSt::hashNext, NULL, uffs_FindInfoSt::step, uffs_DeviceSt::tree, uffs_treeNodeSt::u, U_FAIL, U_SUCC, uffs_DeviceLock(), uffs_DeviceUnLock(), UFFS_TYPE_DIR, and uffs_FindInfoSt::work.

Referenced by cmdLs().

int uffs_GetCurOffset ( uffs_Object obj  ) 

return current file pointer

Parameters:
[in] obj uffs object
Returns:
return the file pointer position if the obj is valid, return -1 if obj is invalid.

Definition at line 1021 of file uffs_fs.c.

References uffs_ObjectSt::dev, uffs_ObjectSt::openSucc, uffs_ObjectSt::pos, and U_TRUE.

uffs_Object* uffs_GetObject ( void   ) 

Definition at line 39 of file uffs_fs.c.

References U_FALSE, and uBufGet().

Referenced by cmdCat(), cmdCp(), cmdMkdir(), cmdMkf(), cmdTest1(), DoTest(), uffs_DeleteObject(), uffs_OpenFindObject(), and uffs_RenameObject().

uffs_Object* uffs_GetObjectByIndex ( int  idx  ) 

Definition at line 60 of file uffs_fs.c.

References uBufGetBufByIndex().

int uffs_GetObjectIndex ( uffs_Object obj  ) 

Definition at line 55 of file uffs_fs.c.

References uBufGetIndex().

URET uffs_GetObjectInfo ( uffs_Object obj,
uffs_ObjectInfo info 
)

Definition at line 1502 of file uffs_fs.c.

References uffs_ObjectSt::dev, uffs_ObjectSt::node, uffs_ObjectSt::type, and U_FAIL.

URET uffs_InitObjectBuf ( void   ) 

Definition at line 33 of file uffs_fs.c.

References U_FAIL, U_SUCC, and uBufInit().

Referenced by main(), and uffs_initMountTable().

URET uffs_OpenFindObject ( uffs_FindInfo f,
const char *  dir 
)

Definition at line 1518 of file uffs_fs.c.

References uffs_ObjectSt::dev, uffs_FindInfoSt::dev, uffs_FindInfoSt::father, uffs_FindInfoSt::hash, uffs_ObjectSt::nameLen, NULL, uffs_FindInfoSt::obj, PFX, ROOT_DIR_ID, uffs_ObjectSt::serial, uffs_FindInfoSt::step, U_FAIL, U_SUCC, UFFS_ERR_NOISY, UFFS_ERR_SERIOUS, uffs_GetObject(), uffs_Perror(), uffs_PutObject(), UO_RDONLY, US_IREAD, US_IWRITE, and uffs_FindInfoSt::work.

Referenced by cmdLs().

URET uffs_OpenObject ( uffs_Object obj,
const char *  fullname,
int  oflag,
int  pmode 
)

Definition at line 536 of file uffs_fs.c.

References U_FAIL, and U_SUCC.

Referenced by cmdCat(), cmdCp(), cmdTest1(), DoTest(), uffs_DeleteObject(), and uffs_RenameObject().

void uffs_PutObject ( uffs_Object obj  ) 

Definition at line 50 of file uffs_fs.c.

References uBufPut().

Referenced by cmdCat(), cmdCp(), cmdMkdir(), cmdMkf(), cmdTest1(), DoTest(), uffs_CloseFindObject(), uffs_OpenFindObject(), and uffs_RenameObject().

int uffs_ReadObject ( uffs_Object obj,
void *  data,
int  len 
)

read data from obj

Parameters:
[in] obj uffs object
[out] data output data buffer
[in] len required length of data to be read from object->pos
Returns:
return bytes of data have been read

fdn == 0: this means that the reading range is start from the first block, since the page 0 is for file attr, so we move to the next page ID.

Definition at line 875 of file uffs_fs.c.

References uffs_DeviceSt::com, uffs_BufSt::dataLen, uffs_ObjectSt::dev, uffs_treeNodeSt::file, HAVE_BADBLOCK, filehSt::len, uffs_ObjectSt::node, NULL, uffs_ObjectSt::oflag, uffs_ObjectSt::openSucc, PFX, uffs_commInfoSt::pgDataSize, uffs_ObjectSt::pos, filehSt::serial, uffs_ObjectSt::type, uffs_treeNodeSt::u, U_FALSE, uffs_BufGetEx(), uffs_BufPut(), uffs_BufRead(), UFFS_ERR_NOISY, UFFS_ERR_SERIOUS, uffs_FindDataNode(), uffs_Perror(), uffs_RecoverBadBlock(), UFFS_TYPE_DATA, UFFS_TYPE_DIR, UFFS_TYPE_FILE, and UO_WRONLY.

Referenced by cmdCat(), cmdCp(), cmdTest1(), and DoTest().

URET uffs_RenameObject ( const char *  old_name,
const char *  new_name 
)

Definition at line 1359 of file uffs_fs.c.

References filehSt::checkSum, dirhSt::checkSum, uffs_BufSt::data, uffs_ObjectSt::dev, uffs_treeNodeSt::dir, filehSt::father, dirhSt::father, uffs_treeNodeSt::file, uffs_fileInfoSt::lastModify, MAX_PATH_LENGTH, uffs_fileInfoSt::name, uffs_fileInfoSt::name_len, uffs_ObjectSt::node, NULL, PFX, ROOT_DIR_ID, uffs_ObjectSt::serial, uffs_ObjectSt::sum, uffs_ObjectSt::type, uffs_treeNodeSt::u, U_FAIL, U_SUCC, uffs_BufFlush(), uffs_BufGetEx(), uffs_BufPut(), uffs_BufWrite(), uffs_CloseObject(), UFFS_ERR_NOISY, UFFS_ERR_SERIOUS, uffs_GetCurDateTime(), uffs_GetObject(), uffs_MakeSum16(), uffs_OpenObject(), uffs_Perror(), uffs_PutObject(), UFFS_TYPE_DIR, UO_RDONLY, UO_RDWR, US_IREAD, and US_IWRITE.

Referenced by cmdRen().

long uffs_SeekObject ( uffs_Object obj,
long  offset,
int  origin 
)

move the file pointer

Parameters:
[in] obj uffs object
[in] offset offset from origin
[in] origin the origin position, one of:
Returns:
return the new file pointer position

Definition at line 972 of file uffs_fs.c.

References uffs_treeNodeSt::file, filehSt::len, uffs_ObjectSt::node, PFX, uffs_ObjectSt::pos, uffs_ObjectSt::type, uffs_treeNodeSt::u, UFFS_ERR_NOISY, uffs_Perror(), UFFS_TYPE_DIR, USEEK_CUR, USEEK_END, and USEEK_SET.

Referenced by cmdTest1(), and DoTest().

URET uffs_TruncateObject ( uffs_Object obj,
u32  remain 
)

Definition at line 1216 of file uffs_fs.c.

References uffs_DeviceSt::attr, blocklistSt::block, fdataSt::block, uffs_blockInfoSt::blockNum, uffs_treeNodeSt::data, uffs_ObjectSt::dev, uffs_ObjectSt::err, uffs_treeNodeSt::file, HAVE_BADBLOCK, filehSt::len, uffs_treeNodeSt::list, uffs_ObjectSt::node, NULL, uffs_ObjectSt::openSucc, uffs_storageAttrSt::pages_per_block, PFX, filehSt::serial, uffs_ObjectSt::type, uffs_treeNodeSt::u, U_FAIL, U_FALSE, U_SUCC, UEEXIST, UFFS_ALL_PAGES, uffs_BreakFromEntry(), UFFS_BUF_EMPTY, uffs_BufFind(), uffs_BufFlush(), uffs_BufSetMark(), UFFS_ERR_SERIOUS, uffs_ExpireBlockInfo(), uffs_FindDataNode(), uffs_GetBlockInfo(), uffs_InsertToErasedListTail(), uffs_Perror(), uffs_PutBlockInfo(), uffs_RecoverBadBlock(), UFFS_TYPE_DATA, and UFFS_TYPE_DIR.

Referenced by uffs_DeleteObject().

int uffs_WriteObject ( uffs_Object obj,
const void *  data,
int  len 
)

write data to obj, from obj->pos

Parameters:
[in] obj file obj
[in] data data pointer
[in] len length of data to be write
Returns:
bytes wrote to obj

Definition at line 788 of file uffs_fs.c.

References uffs_ObjectSt::dev, uffs_treeSt::erasedCount, uffs_treeNodeSt::file, HAVE_BADBLOCK, filehSt::len, MINIMUN_ERASED_BLOCK, uffs_ObjectSt::node, NULL, uffs_ObjectSt::oflag, uffs_ObjectSt::openSucc, PFX, uffs_ObjectSt::pos, filehSt::serial, uffs_DeviceSt::tree, uffs_ObjectSt::type, uffs_treeNodeSt::u, U_FALSE, uffs_BufFlush(), UFFS_ERR_NOISY, UFFS_ERR_SERIOUS, uffs_FindDataNode(), uffs_Perror(), uffs_RecoverBadBlock(), UFFS_TYPE_DIR, UO_APPEND, and UO_RDONLY.

Referenced by cmdCp(), cmdTest1(), and DoTest().


Generated on Sat Mar 17 15:45:45 2007 for uffs-doc by  doxygen 1.5.0