22 #include <rtems/pipe.h> 66 #define IMFS_MEMFILE_DEFAULT_BYTES_PER_BLOCK 128 67 extern int imfs_rq_memfile_bytes_per_block;
68 extern int imfs_memfile_bytes_per_block;
70 #define IMFS_MEMFILE_BYTES_PER_BLOCK imfs_memfile_bytes_per_block 71 #define IMFS_MEMFILE_BLOCK_SLOTS \ 72 (IMFS_MEMFILE_BYTES_PER_BLOCK / sizeof(void *)) 74 typedef uint8_t *block_p;
75 typedef block_p *block_ptr;
80 #define FIRST_INDIRECT (0) 81 #define LAST_INDIRECT (IMFS_MEMFILE_BLOCK_SLOTS - 1) 83 #define FIRST_DOUBLY_INDIRECT (LAST_INDIRECT + 1) 84 #define LAST_DOUBLY_INDIRECT \ 86 (IMFS_MEMFILE_BLOCK_SLOTS * IMFS_MEMFILE_BLOCK_SLOTS)) 88 #define FIRST_TRIPLY_INDIRECT (LAST_DOUBLY_INDIRECT + 1) 89 #define LAST_TRIPLY_INDIRECT \ 90 (LAST_DOUBLY_INDIRECT +\ 91 (IMFS_MEMFILE_BLOCK_SLOTS * \ 92 IMFS_MEMFILE_BLOCK_SLOTS * IMFS_MEMFILE_BLOCK_SLOTS)) 94 #define IMFS_MEMFILE_MAXIMUM_SIZE \ 95 (LAST_TRIPLY_INDIRECT * IMFS_MEMFILE_BYTES_PER_BLOCK) 233 #define IMFS_NAME_MAX _POSIX_NAME_MAX 247 unsigned short reference_count;
259 #define IMFS_NODE_FLAG_NAME_ALLOCATED 0x1 269 rtems_device_major_number major;
270 rtems_device_minor_number minor;
291 block_ptr doubly_indirect;
292 block_ptr triply_indirect;
340 static inline void IMFS_update_atime(
IMFS_jnode_t *jnode )
344 gettimeofday( &now, 0 );
346 jnode->stat_atime = now.tv_sec;
349 static inline void IMFS_update_mtime(
IMFS_jnode_t *jnode )
353 gettimeofday( &now, 0 );
355 jnode->stat_mtime = now.tv_sec;
358 static inline void IMFS_update_ctime(
IMFS_jnode_t *jnode )
362 gettimeofday( &now, 0 );
364 jnode->stat_ctime = now.tv_sec;
367 static inline void IMFS_mtime_ctime_update(
IMFS_jnode_t *jnode )
371 gettimeofday( &now, 0 );
373 jnode->stat_mtime = now.tv_sec;
374 jnode->stat_ctime = now.tv_sec;
413 extern int IMFS_initialize(
418 extern int IMFS_initialize_support(
482 const char *mountpoint,
512 extern int IMFS_stat_file(
588 static inline bool IMFS_is_imfs_instance(
620 #define IMFS_GENERIC_INITIALIZER( handlers, init, destroy ) \ 624 IMFS_node_remove_default, \ 726 extern ssize_t IMFS_memfile_write(
729 const unsigned char *source,
743 extern int device_open(
745 const char *pathname,
750 extern int device_close(
754 extern ssize_t device_read(
760 extern ssize_t device_write(
766 extern int device_ioctl(
768 ioctl_command_t command,
772 extern int device_ftruncate(
857 #define IMFS_assert(_x) assert(_x) 859 #define IMFS_assert(_x) 866 loc->handlers = node->control->handlers;
869 static inline void IMFS_add_to_directory(
876 entry_node->Parent = dir_node;
880 static inline void IMFS_remove_from_directory(
IMFS_jnode_t *node )
882 IMFS_assert( node->Parent != NULL );
887 static inline bool IMFS_is_directory(
const IMFS_jnode_t *node )
889 return S_ISDIR( node->st_mode );
892 #define IMFS_STAT_FMT_HARD_LINK 0 894 static inline bool IMFS_is_hard_link( mode_t mode )
896 return ( mode & S_IFMT ) == IMFS_STAT_FMT_HARD_LINK;
899 static inline ino_t IMFS_node_to_ino(
const IMFS_jnode_t *node )
901 return (ino_t) ((uintptr_t) node);
911 static inline void *IMFS_generic_get_context_by_node(
917 return generic->context;
920 static inline void *IMFS_generic_get_context_by_location(
924 return loc->node_access_2;
927 static inline void *IMFS_generic_get_context_by_iop(
931 return IMFS_generic_get_context_by_location( &iop->pathinfo );
934 static inline dev_t IMFS_generic_get_device_identifier_by_node(
938 return rtems_filesystem_make_dev_t_from_pointer( node );
void IMFS_fsunmount(rtems_filesystem_mount_table_entry_t *mt_entry)
Unmount this instance of IMFS.
Definition: imfs_fsunmount.c:35
This is used to manage each element (node) which is placed on a chain.
Definition: chain.h:65
Contain file system specific information which is required to support fpathconf().
Definition: libio.h:1250
IMFS_jnode_t * IMFS_node_remove_default(IMFS_jnode_t *node)
Returns the node and does nothing else.
Definition: imfs_initsupp.c:186
RTEMS_INLINE_ROUTINE void rtems_chain_extract_unprotected(rtems_chain_node *the_node)
Extract the specified node from a chain (unprotected).
Definition: chain.h:584
int IMFS_link(const rtems_filesystem_location_info_t *parentloc, const rtems_filesystem_location_info_t *targetloc, const char *name, size_t namelen)
Create a new IMFS link node.
Definition: imfs_link.c:25
IMFS_jnode_t *(* IMFS_node_control_initialize)(IMFS_jnode_t *node, void *arg)
Initializes an IMFS node.
Definition: imfs.h:118
int IMFS_mount(rtems_filesystem_mount_table_entry_t *mt_entry)
Mount an IMFS.
Definition: imfs_mount.c:26
void IMFS_node_free(const rtems_filesystem_location_info_t *loc)
Free an IMFS node.
Definition: imfs_initsupp.c:157
This is used to manage a chain.
Definition: chain.h:83
IMFS_jnode_t * IMFS_node_initialize_default(IMFS_jnode_t *node, void *arg)
Returns the node and does nothing else.
Definition: imfs_initsupp.c:178
File system node operations table.
Definition: libio.h:982
void IMFS_eval_path(rtems_filesystem_eval_path_context_t *ctx)
IMFS evaluation node support.
Definition: imfs_eval.c:175
RTEMS_INLINE_ROUTINE void rtems_chain_append_unprotected(rtems_chain_control *the_chain, rtems_chain_node *the_node)
Append a node on the end of a chain (unprotected).
Definition: chain.h:692
int IMFS_node_clone(rtems_filesystem_location_info_t *loc)
Clone an IMFS node.
Definition: imfs_initsupp.c:141
IMFS node control.
Definition: imfs.h:210
void(* IMFS_node_control_destroy)(IMFS_jnode_t *node)
Destroys an IMFS node.
Definition: imfs.h:196
int IMFS_stat(const rtems_filesystem_location_info_t *loc, struct stat *buf)
Perform a status processing for the IMFS.
Definition: imfs_stat.c:26
IMFS_jnode_t * IMFS_node_initialize_generic(IMFS_jnode_t *node, void *arg)
Returns the node and sets the generic node context.
Definition: imfs_make_generic_node.c:30
int IMFS_mknod(const rtems_filesystem_location_info_t *parentloc, const char *name, size_t namelen, mode_t mode, dev_t dev)
Create an IMFS node.
Definition: imfs_mknod.c:43
void IMFS_node_destroy_default(IMFS_jnode_t *node)
Frees the node.
Definition: imfs_initsupp.c:193
int IMFS_fchmod(const rtems_filesystem_location_info_t *loc, mode_t mode)
Change the IMFS file mode.
Definition: imfs_fchmod.c:23
int rtems_tarfs_load(const char *mountpoint, uint8_t *tar_image, size_t tar_size)
RTEMS load tarfs.
Definition: imfs_load_tar.c:33
int IMFS_chown(const rtems_filesystem_location_info_t *loc, uid_t owner, gid_t group)
Change the owner of IMFS.
Definition: imfs_chown.c:27
int IMFS_symlink(const rtems_filesystem_location_info_t *parentloc, const char *name, size_t namelen, const char *target)
Create a new IMFS symbolic link node.
Definition: imfs_symlink.c:27
IMFS_jnode_t *(* IMFS_node_control_remove)(IMFS_jnode_t *node)
Prepares the removal of an IMFS node from its parent directory.
Definition: imfs.h:170
Mount table entry.
Definition: libio.h:1542
void IMFS_node_destroy(IMFS_jnode_t *node)
Destroy an IMFS node.
Definition: imfs_initsupp.c:150
int IMFS_unmount(rtems_filesystem_mount_table_entry_t *mt_entry)
Unmount an IMFS.
Definition: imfs_unmount.c:26
File system operations table.
Definition: libio.h:471
LibIO Internal Interface.
int IMFS_rmnod(const rtems_filesystem_location_info_t *parentloc, const rtems_filesystem_location_info_t *loc)
IMFS node removal handler.
Definition: imfs_rmnod.c:26
ssize_t IMFS_readlink(const rtems_filesystem_location_info_t *loc, char *buf, size_t bufsize)
Put IMFS symbolic link into buffer.
Definition: imfs_symlink.c:56
Path evaluation context.
Definition: libio.h:83
int IMFS_utime(const rtems_filesystem_location_info_t *loc, time_t actime, time_t modtime)
Set IMFS file access and modification times.
Definition: imfs_utime.c:25
int pipe(int filsdes[2])
POSIX 1003.1b 6.1.1 Create an Inter-Process Channel.
Definition: pipe.c:31
An open file data structure.
Definition: libio.h:1281
int IMFS_make_generic_node(const char *path, mode_t mode, const IMFS_node_control *node_control, void *context)
Makes a generic IMFS node.
Definition: imfs_make_generic_node.c:42
int IMFS_rename(const rtems_filesystem_location_info_t *oldparentloc, const rtems_filesystem_location_info_t *oldloc, const rtems_filesystem_location_info_t *newparentloc, const char *name, size_t namelen)
Rename the IMFS.
Definition: imfs_rename.c:26
File system location.
Definition: fs.h:53
Definition: mongoose.c:439
IMFS_jnode_t * IMFS_create_node(const rtems_filesystem_location_info_t *parentloc, const IMFS_node_control *node_control, size_t node_size, const char *name, size_t namelen, mode_t mode, void *arg)
Create an IMFS node.
Definition: imfs_creat.c:25