sandbox: Add a way of obtaining directory listings

This implementation uses opendir()/readdir() to access the directory
information and then puts it in a linked list for the caller's use.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Tom Rini <trini@ti.com>
This commit is contained in:
Simon Glass 2012-12-26 09:53:34 +00:00 committed by Tom Rini
parent e6d5241534
commit 62584db191
2 changed files with 149 additions and 0 deletions

View file

@ -146,4 +146,52 @@ u64 os_get_nsec(void);
*/
int os_parse_args(struct sandbox_state *state, int argc, char *argv[]);
/*
* Types of directory entry that we support. See also os_dirent_typename in
* the C file.
*/
enum os_dirent_t {
OS_FILET_REG, /* Regular file */
OS_FILET_LNK, /* Symbolic link */
OS_FILET_DIR, /* Directory */
OS_FILET_UNKNOWN, /* Something else */
OS_FILET_COUNT,
};
/** A directory entry node, containing information about a single dirent */
struct os_dirent_node {
struct os_dirent_node *next; /* Pointer to next node, or NULL */
ulong size; /* Size of file in bytes */
enum os_dirent_t type; /* Type of entry */
char name[0]; /* Name of entry */
};
/**
* Get a directionry listing
*
* This allocates and returns a linked list containing the directory listing.
*
* @param dirname Directory to examine
* @param headp Returns pointer to head of linked list, or NULL if none
* @return 0 if ok, -ve on error
*/
int os_dirent_ls(const char *dirname, struct os_dirent_node **headp);
/**
* Get the name of a directory entry type
*
* @param type Type to cehck
* @return string containing the name of that type, or "???" if none/invalid
*/
const char *os_dirent_get_typename(enum os_dirent_t type);
/**
* Get the size of a file
*
* @param fname Filename to check
* @return size of file, or -1 if an error ocurred
*/
ssize_t os_get_filesize(const char *fname);
#endif