RTEMS 6.1-rc5
|
RTEMS File Systems Directory Routines. More...
#include <inttypes.h>
#include <string.h>
#include <rtems/rfs/rtems-rfs-block.h>
#include <rtems/rfs/rtems-rfs-buffer.h>
#include <rtems/rfs/rtems-rfs-file-system.h>
#include <rtems/rfs/rtems-rfs-trace.h>
#include <rtems/rfs/rtems-rfs-dir.h>
#include <rtems/rfs/rtems-rfs-dir-hash.h>
Macros | |
#define | rtems_rfs_dir_entry_valid(_f, _l, _i) |
Functions | |
int | rtems_rfs_dir_lookup_ino (rtems_rfs_file_system *fs, rtems_rfs_inode_handle *inode, const char *name, int length, rtems_rfs_ino *ino, uint32_t *offset) |
int | rtems_rfs_dir_add_entry (rtems_rfs_file_system *fs, rtems_rfs_inode_handle *dir, const char *name, size_t length, rtems_rfs_ino ino) |
int | rtems_rfs_dir_del_entry (rtems_rfs_file_system *fs, rtems_rfs_inode_handle *dir, rtems_rfs_ino ino, uint32_t offset) |
int | rtems_rfs_dir_read (rtems_rfs_file_system *fs, rtems_rfs_inode_handle *dir, rtems_rfs_pos_rel offset, struct dirent *dirent, size_t *length) |
int | rtems_rfs_dir_empty (rtems_rfs_file_system *fs, rtems_rfs_inode_handle *dir) |
RTEMS File Systems Directory Routines.
These functions manage blocks in the directory format. A directory entry is a variable length record in the block. The entry consists of a length, hash and the string. The length allows the next entry to be located and the hash allows a simple check to be performed without a string compare. Directory entries do not span a block and removal of an entry results in the space in the block being compacted and the spare area being initialised to ones.
The maximum length can be 1 or 2 bytes depending on the value in the superblock.
#define rtems_rfs_dir_entry_valid | ( | _f, | |
_l, | |||
_i | |||
) |
Validate the directory entry data.
int rtems_rfs_dir_add_entry | ( | rtems_rfs_file_system * | fs, |
rtems_rfs_inode_handle * | dir, | ||
const char * | name, | ||
size_t | length, | ||
rtems_rfs_ino | ino | ||
) |
Add an entry to the directory returing the inode number allocated to the entry.
[in] | fs | is the file system data. |
[in] | dir | is a pointer to the directory inode the entry is to be added too. |
[in] | name | is a pointer to the name of the entry to be added. |
[in] | length | is the length of the name excluding a terminating 0. |
[in] | ino | is the ino of the entry. |
0 | Successful operation. |
error_code | An error occurred. |
int rtems_rfs_dir_del_entry | ( | rtems_rfs_file_system * | fs, |
rtems_rfs_inode_handle * | dir, | ||
rtems_rfs_ino | ino, | ||
uint32_t | offset | ||
) |
Del an entry from the directory using an inode number as a key.
[in] | fs | is the file system data. |
[in] | dir | is a pointer to the directory inode the entry is to be deleted from. |
[in] | ino | is the ino of the entry. |
[in] | offset | is the offset in the directory of the entry to delete. If 0 search from the start for the ino. |
0 | Successful operation. |
error_code | An error occurred. |
int rtems_rfs_dir_empty | ( | rtems_rfs_file_system * | fs, |
rtems_rfs_inode_handle * | dir | ||
) |
Check if the directory is empty. The current and parent directory entries are ignored.
[in] | fs | is the file system data |
[in] | dir | is a pointer to the directory inode to check. |
0 | Successful operation. |
error_code | An error occurred. |
int rtems_rfs_dir_lookup_ino | ( | rtems_rfs_file_system * | fs, |
rtems_rfs_inode_handle * | inode, | ||
const char * | name, | ||
int | length, | ||
rtems_rfs_ino * | ino, | ||
uint32_t * | offset | ||
) |
Look up a directory entry in the directory pointed to by the inode. The look up is local to this directory. No need to decend.
[in] | fs | is the file system. |
[in] | inode | is a pointer to the inode of the directory to search. |
[in] | name | is a pointer to the name to look up. The name may not be nul terminated. |
[in] | length | is the length of the name. |
[out] | ino | will be filled in with the inode number if there is no error. |
[in] | offset | is the offset in the directory for the entry. |
0 | Successful operation. |
error_code | An error occurred. |
int rtems_rfs_dir_read | ( | rtems_rfs_file_system * | fs, |
rtems_rfs_inode_handle * | dir, | ||
rtems_rfs_pos_rel | offset, | ||
struct dirent * | dirent, | ||
size_t * | length | ||
) |
Read the directory entry from offset into the directory entry buffer and return the length of space this entry uses in the directory table.
[in] | fs | is the file system data. |
[in] | dir | is a pointer to the direct inode handler. |
[in] | offset | is the offset in the directory to read from. |
[in] | dirent | is a ointer to the dirent structure the entry is written into. |
[out] | length | will contain the length this entry takes in the directory. |
0 | Successful operation. |
error_code | An error occurred. |