#include "uffs/uffs_public.h"
#include "uffs/uffs_os.h"
#include "uffs/ubuffer.h"
#include "uffs/uffs_config.h"
#include <string.h>
Go to the source code of this file.
Definition in file uffs_tree.c.
#define PFX "tree:" |
Definition at line 13 of file uffs_tree.c.
TreeNode* _FindPrevNodeFromEntry | ( | uffs_Device * | dev, | |
u16 | start, | |||
u16 | find | |||
) |
Definition at line 873 of file uffs_tree.c.
References uffs_treeSt::dis, EMPTY_NODE, FROM_IDX, uffs_treeNodeSt::hashNext, NULL, and uffs_DeviceSt::tree.
Referenced by uffs_BreakFromEntry().
void uffs_BreakFromEntry | ( | uffs_Device * | dev, | |
u8 | type, | |||
TreeNode * | node | |||
) |
break the node from entry
Definition at line 889 of file uffs_tree.c.
References _FindPrevNodeFromEntry(), uffs_treeNodeSt::data, uffs_treeSt::dataEntry, uffs_treeNodeSt::dir, uffs_treeSt::dirEntry, uffs_treeSt::dis, EMPTY_NODE, fdataSt::father, uffs_treeNodeSt::file, uffs_treeSt::fileEntry, FROM_IDX, GET_DATA_HASH, GET_DIR_HASH, GET_FILE_HASH, uffs_treeNodeSt::hashNext, NULL, PFX, fdataSt::serial, filehSt::serial, dirhSt::serial, TO_IDX, uffs_DeviceSt::tree, uffs_treeNodeSt::u, UFFS_ERR_SERIOUS, uffs_Perror(), UFFS_TYPE_DATA, UFFS_TYPE_DIR, and UFFS_TYPE_FILE.
Referenced by uffs_DeleteObject(), and uffs_TruncateObject().
URET uffs_BuildTree | ( | uffs_Device * | dev | ) |
build tree structure from flash
[in] | dev | uffs device |
Definition at line 770 of file uffs_tree.c.
References PFX, U_SUCC, UFFS_ERR_SERIOUS, and uffs_Perror().
Referenced by uffs_FormatDevice(), and uffs_InitDevice().
UBOOL uffs_CompareFileName | ( | const char * | src, | |
int | src_len, | |||
const char * | des | |||
) |
Definition at line 650 of file uffs_tree.c.
References U_FALSE, and U_TRUE.
Referenced by uffs_CompareFileNameWithTreeNode().
UBOOL uffs_CompareFileNameWithTreeNode | ( | uffs_Device * | dev, | |
const char * | name, | |||
u32 | len, | |||
u16 | sum, | |||
TreeNode * | node, | |||
int | type | |||
) |
Definition at line 658 of file uffs_tree.c.
References filehSt::block, dirhSt::block, uffs_TagsSt::dataSum, uffs_treeNodeSt::dir, uffs_treeNodeSt::file, NULL, uffs_DeviceSt::ops, PFX, uffs_DeviceOpsSt::ReadPageData, uffs_blockInfoSt::spares, uffs_pageSpareSt::tag, uffs_treeNodeSt::u, U_FAIL, U_FALSE, U_TRUE, UFFS_ALL_PAGES, uffs_CompareFileName(), UFFS_ERR_NORMAL, UFFS_ERR_SERIOUS, uffs_FindBestPageInBlock(), uffs_GetBlockInfo(), uffs_LoadBlockInfo(), uffs_Perror(), uffs_PutBlockInfo(), and UFFS_TYPE_DIR.
Referenced by uffs_FindDirNodeByName(), and uffs_FindFileNodeByName().
TreeNode* uffs_FindBadNodeByBlock | ( | uffs_Device * | dev, | |
u16 | block | |||
) |
Definition at line 534 of file uffs_tree.c.
References uffs_treeSt::bad, blocklistSt::block, uffs_treeNodeSt::list, blocklistSt::next, NULL, uffs_DeviceSt::tree, and uffs_treeNodeSt::u.
Referenced by uffs_FindNodeByBlock().
TreeNode* uffs_FindDataNode | ( | uffs_Device * | dev, | |
u16 | father, | |||
u16 | serial | |||
) |
Definition at line 482 of file uffs_tree.c.
References uffs_treeNodeSt::data, uffs_treeSt::dataEntry, uffs_treeSt::dis, EMPTY_NODE, fdataSt::father, FROM_IDX, GET_DATA_HASH, uffs_treeNodeSt::hashNext, NULL, fdataSt::serial, uffs_DeviceSt::tree, and uffs_treeNodeSt::u.
Referenced by uffs_BufFlush(), uffs_FindFromTree(), uffs_ReadObject(), uffs_TruncateObject(), and uffs_WriteObject().
TreeNode* uffs_FindDataNodeByBlock | ( | uffs_Device * | dev, | |
u16 | block | |||
) |
Definition at line 565 of file uffs_tree.c.
References fdataSt::block, uffs_treeNodeSt::data, DATA_NODE_ENTRY_LEN, uffs_treeSt::dataEntry, uffs_treeSt::dis, EMPTY_NODE, FROM_IDX, uffs_treeNodeSt::hashNext, uffs_DeviceSt::tree, and uffs_treeNodeSt::u.
Referenced by uffs_FindNodeByBlock().
TreeNode* uffs_FindDirNodeByBlock | ( | uffs_Device * | dev, | |
u16 | block | |||
) |
Definition at line 503 of file uffs_tree.c.
References dirhSt::block, uffs_treeNodeSt::dir, DIR_NODE_ENTRY_LEN, uffs_treeSt::dirEntry, uffs_treeSt::dis, EMPTY_NODE, FROM_IDX, uffs_treeNodeSt::hashNext, uffs_DeviceSt::tree, and uffs_treeNodeSt::u.
Referenced by uffs_FindNodeByBlock().
TreeNode* uffs_FindDirNodeByName | ( | uffs_Device * | dev, | |
const char * | name, | |||
u32 | len, | |||
u16 | sum, | |||
u16 | father | |||
) |
Definition at line 625 of file uffs_tree.c.
References dirhSt::checkSum, uffs_treeNodeSt::dir, DIR_NODE_ENTRY_LEN, uffs_treeSt::dirEntry, uffs_treeSt::dis, EMPTY_NODE, dirhSt::father, FROM_IDX, uffs_treeNodeSt::hashNext, uffs_DeviceSt::tree, uffs_treeNodeSt::u, U_TRUE, uffs_CompareFileNameWithTreeNode(), and UFFS_TYPE_DIR.
TreeNode* uffs_FindDirNodeFromTree | ( | uffs_Device * | dev, | |
u16 | serial | |||
) |
Definition at line 414 of file uffs_tree.c.
References uffs_treeNodeSt::dir, DIR_NODE_HASH_MASK, uffs_treeSt::dirEntry, uffs_treeSt::dis, EMPTY_NODE, FROM_IDX, uffs_treeNodeSt::hashNext, NULL, dirhSt::serial, uffs_DeviceSt::tree, and uffs_treeNodeSt::u.
Referenced by uffs_BufFlush(), uffs_FindFreeFsnSerial(), and uffs_FindFromTree().
TreeNode* uffs_FindDirNodeFromTreeWithFather | ( | uffs_Device * | dev, | |
u16 | father | |||
) |
Definition at line 435 of file uffs_tree.c.
References uffs_treeNodeSt::dir, DIR_NODE_ENTRY_LEN, uffs_treeSt::dirEntry, uffs_treeSt::dis, EMPTY_NODE, dirhSt::father, FROM_IDX, uffs_treeNodeSt::hashNext, uffs_DeviceSt::tree, and uffs_treeNodeSt::u.
Referenced by uffs_DeleteObject().
TreeNode* uffs_FindErasedNodeByBlock | ( | uffs_Device * | dev, | |
u16 | block | |||
) |
Definition at line 522 of file uffs_tree.c.
References blocklistSt::block, uffs_treeSt::erased, uffs_treeNodeSt::list, blocklistSt::next, NULL, uffs_DeviceSt::tree, and uffs_treeNodeSt::u.
Referenced by uffs_FindNodeByBlock().
TreeNode* uffs_FindFileNodeByBlock | ( | uffs_Device * | dev, | |
u16 | block | |||
) |
Definition at line 546 of file uffs_tree.c.
References filehSt::block, uffs_treeSt::dis, EMPTY_NODE, uffs_treeNodeSt::file, FILE_NODE_ENTRY_LEN, uffs_treeSt::fileEntry, FROM_IDX, uffs_treeNodeSt::hashNext, uffs_DeviceSt::tree, and uffs_treeNodeSt::u.
Referenced by uffs_FindNodeByBlock().
TreeNode* uffs_FindFileNodeByName | ( | uffs_Device * | dev, | |
const char * | name, | |||
u32 | len, | |||
u16 | sum, | |||
u16 | father | |||
) |
Definition at line 458 of file uffs_tree.c.
References filehSt::checkSum, uffs_treeSt::dis, EMPTY_NODE, filehSt::father, uffs_treeNodeSt::file, FILE_NODE_ENTRY_LEN, uffs_treeSt::fileEntry, FROM_IDX, uffs_treeNodeSt::hashNext, uffs_DeviceSt::tree, uffs_treeNodeSt::u, U_TRUE, uffs_CompareFileNameWithTreeNode(), and UFFS_TYPE_FILE.
TreeNode* uffs_FindFileNodeFromTree | ( | uffs_Device * | dev, | |
u16 | serial | |||
) |
Definition at line 371 of file uffs_tree.c.
References uffs_treeSt::dis, EMPTY_NODE, uffs_treeNodeSt::file, FILE_NODE_HASH_MASK, uffs_treeSt::fileEntry, FROM_IDX, uffs_treeNodeSt::hashNext, NULL, filehSt::serial, uffs_DeviceSt::tree, and uffs_treeNodeSt::u.
Referenced by uffs_BufFlush(), uffs_FindFreeFsnSerial(), and uffs_FindFromTree().
TreeNode* uffs_FindFileNodeFromTreeWithFather | ( | uffs_Device * | dev, | |
u16 | father | |||
) |
Definition at line 392 of file uffs_tree.c.
References uffs_treeSt::dis, EMPTY_NODE, filehSt::father, uffs_treeNodeSt::file, FILE_NODE_ENTRY_LEN, uffs_treeSt::fileEntry, FROM_IDX, uffs_treeNodeSt::hashNext, uffs_DeviceSt::tree, and uffs_treeNodeSt::u.
Referenced by uffs_DeleteObject().
u16 uffs_FindFreeFsnSerial | ( | uffs_Device * | dev | ) |
find a free file or dir serial NO
[in] | dev | uffs device |
Definition at line 807 of file uffs_tree.c.
References INVALID_UFFS_SERIAL, MAX_UFFS_SERIAL, NULL, ROOT_DIR_ID, uffs_FindDirNodeFromTree(), and uffs_FindFileNodeFromTree().
TreeNode* uffs_FindFromTree | ( | uffs_Device * | dev, | |
u8 | type, | |||
u16 | father, | |||
u16 | serial | |||
) |
find a node from tree
[in] | dev | uffs device |
[in] | type | type of node |
[in] | father | father serial num |
[in] | serial | serial num |
Definition at line 159 of file uffs_tree.c.
References NULL, PFX, UFFS_ERR_SERIOUS, uffs_FindDataNode(), uffs_FindDirNodeFromTree(), uffs_FindFileNodeFromTree(), uffs_Perror(), UFFS_TYPE_DATA, UFFS_TYPE_DIR, and UFFS_TYPE_FILE.
TreeNode* uffs_FindNodeByBlock | ( | uffs_Device * | dev, | |
u16 | block, | |||
int * | region | |||
) |
Definition at line 584 of file uffs_tree.c.
References NULL, SEARCH_REGION_BAD, SEARCH_REGION_DATA, SEARCH_REGION_DIR, SEARCH_REGION_ERASED, SEARCH_REGION_FILE, uffs_FindBadNodeByBlock(), uffs_FindDataNodeByBlock(), uffs_FindDirNodeByBlock(), uffs_FindErasedNodeByBlock(), and uffs_FindFileNodeByBlock().
Referenced by uffs_RecoverBadBlock().
TreeNode* uffs_GetErased | ( | uffs_Device * | dev | ) |
Definition at line 825 of file uffs_tree.c.
References uffs_treeSt::erased, uffs_treeSt::erased_tail, uffs_treeSt::erasedCount, uffs_treeNodeSt::list, blocklistSt::next, NULL, blocklistSt::prev, uffs_DeviceSt::tree, and uffs_treeNodeSt::u.
Referenced by uffs_RecoverBadBlock().
URET uffs_InitTreeBuf | ( | uffs_Device * | dev | ) |
initialize tree buffers
[in] | dev | uffs device |
Definition at line 24 of file uffs_tree.c.
References uffs_treeSt::bad, uffs_treeSt::badCount, DATA_NODE_ENTRY_LEN, uffs_treeSt::dataEntry, DIR_NODE_ENTRY_LEN, uffs_treeSt::dirEntry, uffs_treeSt::dis, EMPTY_NODE, uffs_partitionSt::end, uffs_treeSt::erased, uffs_treeSt::erased_tail, uffs_treeSt::erasedCount, FILE_NODE_ENTRY_LEN, uffs_treeSt::fileEntry, uffs_treeSt::maxSerialNo, ubufm::node_nums, ubufm::node_pool, ubufm::node_size, NULL, uffs_DeviceSt::par, PFX, ROOT_DIR_ID, uffs_partitionSt::start, uffs_DeviceSt::tree, U_FAIL, U_SUCC, uBufInit(), UFFS_ERR_SERIOUS, uffs_MemAlloc(), and uffs_Perror().
Referenced by uffs_FormatDevice(), and uffs_InitDevice().
void uffs_InsertNodeToTree | ( | uffs_Device * | dev, | |
u8 | type, | |||
TreeNode * | node | |||
) |
insert a TreeNode *node to tree
[in] | dev | uffs device |
[in] | type | type of node |
[in] | node | node to be insert to |
Definition at line 134 of file uffs_tree.c.
References PFX, UFFS_ERR_SERIOUS, uffs_Perror(), UFFS_TYPE_DATA, UFFS_TYPE_DIR, and UFFS_TYPE_FILE.
void uffs_InsertToBadBlockList | ( | uffs_Device * | dev, | |
TreeNode * | node | |||
) |
Definition at line 983 of file uffs_tree.c.
References uffs_treeSt::bad, uffs_treeSt::badCount, uffs_treeNodeSt::list, blocklistSt::next, NULL, blocklistSt::prev, uffs_DeviceSt::tree, and uffs_treeNodeSt::u.
Referenced by uffs_RecoverBadBlock().
void uffs_InsertToErasedListHead | ( | uffs_Device * | dev, | |
TreeNode * | node | |||
) |
Definition at line 947 of file uffs_tree.c.
References uffs_treeSt::erased, uffs_treeSt::erased_tail, uffs_treeSt::erasedCount, uffs_treeNodeSt::list, blocklistSt::next, NULL, blocklistSt::prev, uffs_DeviceSt::tree, and uffs_treeNodeSt::u.
void uffs_InsertToErasedListTail | ( | uffs_Device * | dev, | |
TreeNode * | node | |||
) |
Definition at line 965 of file uffs_tree.c.
References uffs_treeSt::erased, uffs_treeSt::erased_tail, uffs_treeSt::erasedCount, uffs_treeNodeSt::list, blocklistSt::next, NULL, blocklistSt::prev, uffs_DeviceSt::tree, and uffs_treeNodeSt::u.
Referenced by uffs_DeleteObject(), uffs_RecoverBadBlock(), and uffs_TruncateObject().
URET uffs_ReleaseTreeBuf | ( | uffs_Device * | dev | ) |
release tree buffers, call this function when unmount
[in] | dev | uffs device |
Definition at line 72 of file uffs_tree.c.
References uffs_treeSt::dis, ubufm::node_pool, uffs_DeviceSt::tree, U_SUCC, and uffs_MemFree().
Referenced by uffs_FormatDevice(), and uffs_ReleaseDevice().
set tree node block value
Definition at line 999 of file uffs_tree.c.
References fdataSt::block, dirhSt::block, filehSt::block, uffs_treeNodeSt::data, uffs_treeNodeSt::dir, uffs_treeNodeSt::file, uffs_treeNodeSt::u, UFFS_TYPE_DATA, UFFS_TYPE_DIR, and UFFS_TYPE_FILE.