root/headers/private/fs_shell/fssh_fs_info.h
/* General File System informations/capabilities
**
** Distributed under the terms of the MIT License.
*/
#ifndef _FSSH_FS_INFO_H
#define _FSSH_FS_INFO_H

#include "fssh_defs.h"
#include "fssh_os.h"


/* fs_info.flags */
#define FSSH_B_FS_IS_READONLY           0x00000001
#define FSSH_B_FS_IS_REMOVABLE          0x00000002
#define FSSH_B_FS_IS_PERSISTENT         0x00000004
#define FSSH_B_FS_IS_SHARED                     0x00000008
#define FSSH_B_FS_HAS_MIME                      0x00010000
#define FSSH_B_FS_HAS_ATTR                      0x00020000
#define FSSH_B_FS_HAS_QUERY                     0x00040000
// those additions are preliminary and may be removed
#define FSSH_B_FS_HAS_SELF_HEALING_LINKS        0x00080000
#define FSSH_B_FS_HAS_ALIASES                           0x00100000
#define FSSH_B_FS_SUPPORTS_NODE_MONITORING      0x00200000
#define FSSH_B_FS_SUPPORTS_MONITOR_CHILDREN     0x00400000

typedef struct fssh_fs_info {
        fssh_dev_t      dev;                                                            /* volume dev_t */
        fssh_ino_t      root;                                                           /* root ino_t */
        uint32_t        flags;                                                          /* flags (see above) */
        fssh_off_t      block_size;                                                     /* fundamental block size */
        fssh_off_t      io_size;                                                        /* optimal i/o size */
        fssh_off_t      total_blocks;                                           /* total number of blocks */
        fssh_off_t      free_blocks;                                            /* number of free blocks */
        fssh_off_t      total_nodes;                                            /* total number of nodes */
        fssh_off_t      free_nodes;                                                     /* number of free nodes */
        char            device_name[FSSH_B_DEV_NAME_LENGTH];    /* device holding fs */
        char            volume_name[FSSH_B_FILE_NAME_LENGTH];   /* volume name */
        char            fsh_name[FSSH_B_OS_NAME_LENGTH];                /* name of fs handler */
} fssh_fs_info;


#ifdef  __cplusplus
extern "C" {
#endif

extern fssh_dev_t       dev_for_path(const char *path);
extern fssh_dev_t       next_dev(int32_t *pos);
extern int                      fs_stat_dev(fssh_dev_t dev, fssh_fs_info *info);

#ifdef  __cplusplus
}
#endif

#endif  /* _FSSH_FS_INFO_H */