root/headers/private/fs_shell/fssh_fs_attr.h
/* File System attributes
**
** Distributed under the terms of the MIT License.
*/
#ifndef _FSSH_FS_ATTR_H
#define _FSSH_FS_ATTR_H


#include "fssh_defs.h"
#include "fssh_dirent.h"


typedef struct fssh_attr_info {
        uint32_t        type;
        fssh_off_t      size;
} fssh_attr_info;


#ifdef  __cplusplus
extern "C" {
#endif

extern fssh_ssize_t     fssh_fs_read_attr(int fd, const char *attribute,
                                                        uint32_t type, fssh_off_t pos, void *buffer,
                                                        fssh_size_t readBytes);
extern fssh_ssize_t     fssh_fs_write_attr(int fd, const char *attribute,
                                                        uint32_t type, fssh_off_t pos, const void *buffer,
                                                        fssh_size_t readBytes);
extern int                      fssh_fs_remove_attr(int fd, const char *attribute);
extern int                      fssh_fs_stat_attr(int fd, const char *attribute,
                                                        struct fssh_attr_info *attrInfo);

// ToDo: the following three functions are not part of the R5 API, and
// are only preliminary - they may change or be removed at any point
//extern int            fssh_fs_open_attr(const char *path, const char *attribute, uint32_t type, int openMode);
extern int                      fssh_fs_open_attr(int fd, const char *attribute,
                                                        uint32_t type, int openMode);
extern int                      fssh_fs_close_attr(int fd);

extern fssh_DIR         *fssh_fs_open_attr_dir(const char *path);
extern fssh_DIR         *fssh_fs_fopen_attr_dir(int fd);
extern int                      fssh_fs_close_attr_dir(fssh_DIR *dir);
extern struct fssh_dirent *fssh_fs_read_attr_dir(fssh_DIR *dir);
extern void                     fssh_fs_rewind_attr_dir(fssh_DIR *dir);

#ifdef  __cplusplus
}
#endif

#endif  /* _FSSH_FS_ATTR_H */