RTEMS 6.1-rc6
Loading...
Searching...
No Matches
imfs.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-2-Clause */
2
9/*
10 * COPYRIGHT (C) 1989, 2021 On-Line Applications Research Corporation (OAR).
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 * notice, this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above copyright
18 * notice, this list of conditions and the following disclaimer in the
19 * documentation and/or other materials provided with the distribution.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 * POSSIBILITY OF SUCH DAMAGE.
32 */
33
34#ifndef _RTEMS_IMFS_H
35#define _RTEMS_IMFS_H
36
37#include <sys/time.h>
38#include <limits.h>
39
40#include <rtems/libio_.h>
41#include <rtems/pipe.h>
42
52#ifdef __cplusplus
53extern "C" {
54#endif
55
56/*
57 * Data types
58 */
59
60struct IMFS_jnode_tt;
61typedef struct IMFS_jnode_tt IMFS_jnode_t;
62
85#define IMFS_MEMFILE_DEFAULT_BYTES_PER_BLOCK 128
86 extern const int imfs_memfile_bytes_per_block;
87
88#define IMFS_MEMFILE_BYTES_PER_BLOCK imfs_memfile_bytes_per_block
89#define IMFS_MEMFILE_BLOCK_SLOTS \
90 (IMFS_MEMFILE_BYTES_PER_BLOCK / sizeof(void *))
91
92typedef uint8_t *block_p;
93typedef block_p *block_ptr;
94
95/*
96 * Important block numbers for "memfiles"
97 */
98#define FIRST_INDIRECT (0)
99#define LAST_INDIRECT (IMFS_MEMFILE_BLOCK_SLOTS - 1)
100
101#define FIRST_DOUBLY_INDIRECT (LAST_INDIRECT + 1)
102#define LAST_DOUBLY_INDIRECT \
103 (LAST_INDIRECT + \
104 (IMFS_MEMFILE_BLOCK_SLOTS * IMFS_MEMFILE_BLOCK_SLOTS))
105
106#define FIRST_TRIPLY_INDIRECT (LAST_DOUBLY_INDIRECT + 1)
107#define LAST_TRIPLY_INDIRECT \
108 (LAST_DOUBLY_INDIRECT +\
109 (IMFS_MEMFILE_BLOCK_SLOTS * \
110 IMFS_MEMFILE_BLOCK_SLOTS * IMFS_MEMFILE_BLOCK_SLOTS))
111
112#define IMFS_MEMFILE_MAXIMUM_SIZE \
113 (LAST_TRIPLY_INDIRECT * IMFS_MEMFILE_BYTES_PER_BLOCK)
114
136typedef IMFS_jnode_t *(*IMFS_node_control_initialize)(
137 IMFS_jnode_t *node,
138 void *arg
139);
140
152 IMFS_jnode_t *node,
153 void *arg
154);
155
156IMFS_jnode_t *IMFS_node_initialize_directory(
157 IMFS_jnode_t *node,
158 void *arg
159);
160
173 IMFS_jnode_t *node,
174 void *arg
175);
176
188typedef IMFS_jnode_t *(*IMFS_node_control_remove)(
189 IMFS_jnode_t *node
190);
191
202 IMFS_jnode_t *node
203);
204
205IMFS_jnode_t *IMFS_node_remove_directory( IMFS_jnode_t *node );
206
215
224
233
237typedef struct {
238 const rtems_filesystem_file_handlers_r *handlers;
239 IMFS_node_control_initialize node_initialize;
240 IMFS_node_control_remove node_remove;
241 IMFS_node_control_destroy node_destroy;
243
244typedef struct {
245 IMFS_node_control node_control;
246 size_t node_size;
248
256/*
257 * Maximum length of a "basename" of an IMFS file/node.
258 */
259
260#define IMFS_NAME_MAX _POSIX_NAME_MAX
261
262/*
263
264 * The control structure for an IMFS jnode.
265 */
266
268 rtems_chain_node Node; /* for chaining them together */
269 IMFS_jnode_t *Parent; /* Parent node */
270 const char *name; /* "basename" (not \0 terminated) */
271 uint16_t namelen; /* Length of "basename" */
272 mode_t st_mode; /* File mode */
273 unsigned short reference_count;
274 nlink_t st_nlink; /* Link count */
275
276 uid_t st_uid; /* User ID of owner */
277 gid_t st_gid; /* Group ID of owner */
278
279 time_t stat_atime; /* Time of last access */
280 time_t stat_mtime; /* Time of last modification */
281 time_t stat_ctime; /* Time of last status change */
283};
284
285typedef struct {
286 IMFS_jnode_t Node;
287 rtems_chain_control Entries;
290
291typedef struct {
292 IMFS_jnode_t Node;
296
297typedef struct {
298 IMFS_jnode_t Node;
299 IMFS_jnode_t *link_node;
301
302typedef struct {
303 IMFS_jnode_t Node;
304 char *name;
306
307typedef struct {
308 IMFS_jnode_t Node;
309 size_t size; /* size of file in bytes */
311
312typedef struct {
313 IMFS_filebase_t File;
314 block_ptr indirect; /* array of 128 data blocks pointers */
315 block_ptr doubly_indirect; /* 128 indirect blocks */
316 block_ptr triply_indirect; /* 128 doubly indirect blocks */
318
319typedef struct {
320 IMFS_filebase_t File;
321 block_p direct; /* pointer to file image */
323
324/* Support copy on write for linear files */
325typedef union {
326 IMFS_jnode_t Node;
327 IMFS_filebase_t File;
328 IMFS_memfile_t Memfile;
329 IMFS_linearfile_t Linearfile;
331
332typedef struct {
333 IMFS_jnode_t Node;
334 pipe_control_t *pipe;
336
337typedef struct {
338 IMFS_jnode_t Node;
339 void *context;
341
342typedef struct {
343 const void *data;
344 size_t size;
346
347static inline IMFS_jnode_t *IMFS_iop_to_node( const rtems_libio_t *iop )
348{
349 return (IMFS_jnode_t *) iop->pathinfo.node_access;
350}
351
352static inline IMFS_directory_t *IMFS_iop_to_directory(
353 const rtems_libio_t *iop
354)
355{
356 return (IMFS_directory_t *) iop->pathinfo.node_access;
357}
358
359static inline IMFS_device_t *IMFS_iop_to_device( const rtems_libio_t *iop )
360{
361 return (IMFS_device_t *) iop->pathinfo.node_access;
362}
363
364static inline IMFS_file_t *IMFS_iop_to_file( const rtems_libio_t *iop )
365{
366 return (IMFS_file_t *) iop->pathinfo.node_access;
367}
368
369static inline IMFS_memfile_t *IMFS_iop_to_memfile( const rtems_libio_t *iop )
370{
371 return (IMFS_memfile_t *) iop->pathinfo.node_access;
372}
373
374typedef struct {
375 const IMFS_mknod_control *directory;
376 const IMFS_mknod_control *device;
378 const IMFS_mknod_control *fifo;
380
381typedef struct {
382 IMFS_directory_t Root_directory;
383 const IMFS_mknod_controls *mknod_controls;
385
386typedef struct {
387 IMFS_fs_info_t *fs_info;
389 const IMFS_mknod_controls *mknod_controls;
391
392/*
393 * Shared Data
394 */
395
396extern const IMFS_mknod_control IMFS_mknod_control_dir_default;
397extern const IMFS_mknod_control IMFS_mknod_control_dir_minimal;
398extern const IMFS_mknod_control IMFS_mknod_control_device;
399extern const IMFS_mknod_control IMFS_mknod_control_memfile;
400extern const IMFS_node_control IMFS_node_control_linfile;
401extern const IMFS_mknod_control IMFS_mknod_control_fifo;
402extern const IMFS_mknod_control IMFS_mknod_control_enosys;
403
404extern const rtems_filesystem_limits_and_options_t IMFS_LIMITS_AND_OPTIONS;
405
406/*
407 * Routines
408 */
409
410extern int IMFS_initialize(
412 const void *data
413);
414
415extern int IMFS_initialize_support(
417 const void *data
418);
419
423extern void IMFS_fsunmount(
425);
426
478extern int rtems_tarfs_load(
479 const char *mountpoint,
480 const void *tar_image,
481 size_t tar_size
482);
483
487extern void IMFS_node_destroy( IMFS_jnode_t *node );
488
493
497extern void IMFS_node_free( const rtems_filesystem_location_info_t *loc );
498
504extern int IMFS_stat(
506 struct stat *buf
507);
508
509extern int IMFS_stat_file(
511 struct stat *buf
512);
513
517extern void IMFS_eval_path(
519);
520
524extern void IMFS_eval_path_devfs(
526);
527
535extern int IMFS_link(
536 const rtems_filesystem_location_info_t *parentloc,
537 const rtems_filesystem_location_info_t *targetloc,
538 const char *name,
539 size_t namelen
540);
541
548extern int IMFS_chown(
550 uid_t owner,
551 gid_t group
552);
553
559extern int IMFS_mknod(
560 const rtems_filesystem_location_info_t *parentloc,
561 const char *name,
562 size_t namelen,
563 mode_t mode,
564 dev_t dev
565);
566
567extern IMFS_jnode_t *IMFS_initialize_node(
568 IMFS_jnode_t *node,
569 const IMFS_node_control *node_control,
570 const char *name,
571 size_t namelen,
572 mode_t mode,
573 void *arg
574);
575
583 const rtems_filesystem_location_info_t *parentloc,
584 const IMFS_node_control *node_control,
585 size_t node_size,
586 const char *name,
587 size_t namelen,
588 mode_t mode,
589 void *arg
590);
591
592static inline bool IMFS_is_imfs_instance(
594)
595{
596 return loc->mt_entry->ops->clonenod_h == IMFS_node_clone;
597}
598
606#define IMFS_NODE_CONTROL_INITIALIZER( handlers, init, destroy ) \
607 { \
608 ( handlers ), \
609 ( init ), \
610 IMFS_node_remove_default, \
611 ( destroy ) \
612 }
613
626#define IMFS_NODE_INITIALIZER( node_control, name, namelen, mode ) \
627 { \
628 { NULL, NULL }, \
629 NULL, \
630 ( name ), \
631 ( namelen ), \
632 ( mode ), \
633 0, \
634 0, \
635 0, \
636 0, \
637 0, \
638 0, \
639 0, \
640 ( node_control ) \
641 }
642
656static inline void IMFS_node_preinitialize(
657 IMFS_jnode_t *node,
658 const IMFS_node_control *node_control,
659 const char *name,
660 size_t namelen,
661 mode_t mode
662)
663{
664 node->control = node_control;
665 node->name = name;
666 node->namelen = namelen;
667 node->st_mode = mode;
668}
669
683int IMFS_add_node( const char *path, IMFS_jnode_t *node, void *arg );
684
685extern int IMFS_make_node(
686 const char *path,
687 mode_t mode,
688 const IMFS_node_control *node_control,
689 size_t node_size,
690 void *context
691);
692
704extern int IMFS_make_linearfile(
705 const char *path,
706 mode_t mode,
707 const void *data,
708 size_t size
709);
710
729/* Provided for backward compatibility */
730#define IMFS_GENERIC_INITIALIZER( handlers, init, destroy ) \
731 IMFS_NODE_CONTROL_INITIALIZER( handlers, init, destroy )
732
740#define IMFS_GENERIC_CONTROL_INITIALIZER( handlers, init, destroy ) \
741 IMFS_NODE_CONTROL_INITIALIZER( handlers, init, destroy )
742
753#define IMFS_GENERIC_NODE_INITIALIZER( node_control, name, namelen, mode ) \
754 { IMFS_NODE_INITIALIZER( node_control, name, namelen, mode ), NULL }
755
769static inline void IMFS_generic_node_preinitialize(
770 IMFS_generic_t *node,
771 const IMFS_node_control *node_control,
772 const char *name,
773 size_t namelen,
774 mode_t mode
775)
776{
777 IMFS_node_preinitialize( &node->Node, node_control, name, namelen, mode );
778}
779
840extern int IMFS_make_generic_node(
841 const char *path,
842 mode_t mode,
843 const IMFS_node_control *node_control,
844 void *context
845);
846
857extern int IMFS_mount(
858 rtems_filesystem_mount_table_entry_t *mt_entry /* IN */
859);
860
864extern int IMFS_unmount(
865 rtems_filesystem_mount_table_entry_t *mt_entry /* IN */
866);
867
879extern ssize_t IMFS_memfile_write(
880 IMFS_memfile_t *memfile,
881 off_t start,
882 const unsigned char *source,
883 unsigned int length
884);
885
896extern int device_open(
897 rtems_libio_t *iop, /* IN */
898 const char *pathname, /* IN */
899 int oflag, /* IN */
900 mode_t mode /* IN */
901);
902
903extern int device_close(
904 rtems_libio_t *iop /* IN */
905);
906
907extern ssize_t device_read(
908 rtems_libio_t *iop, /* IN */
909 void *buffer, /* IN */
910 size_t count /* IN */
911);
912
913extern ssize_t device_write(
914 rtems_libio_t *iop, /* IN */
915 const void *buffer, /* IN */
916 size_t count /* IN */
917);
918
919extern int device_ioctl(
920 rtems_libio_t *iop,
921 ioctl_command_t command,
922 void *buffer
923);
924
925extern int device_ftruncate(
926 rtems_libio_t *iop, /* IN */
927 off_t length /* IN */
928);
929
939extern int IMFS_utimens(
941 struct timespec times[2]
942);
943
947extern int IMFS_fchmod(
949 mode_t mode
950);
951
959extern int IMFS_symlink(
960 const rtems_filesystem_location_info_t *parentloc,
961 const char *name,
962 size_t namelen,
963 const char *target
964);
965
973extern ssize_t IMFS_readlink(
975 char *buf,
976 size_t bufsize
977);
978
985extern int IMFS_rename(
986 const rtems_filesystem_location_info_t *oldparentloc,
988 const rtems_filesystem_location_info_t *newparentloc,
989 const char *name,
990 size_t namelen
991);
998extern int IMFS_rmnod(
999 const rtems_filesystem_location_info_t *parentloc,
1001);
1002
1003/*
1004 * Turn on IMFS assertions when RTEMS_DEBUG is defined.
1005 */
1006#ifdef RTEMS_DEBUG
1007 #include <assert.h>
1008
1009 #define IMFS_assert(_x) assert(_x)
1010#else
1011 #define IMFS_assert(_x)
1012#endif
1013
1014static inline void IMFS_Set_handlers( rtems_filesystem_location_info_t *loc )
1015{
1016 IMFS_jnode_t *node = (IMFS_jnode_t *) loc->node_access;
1017
1018 loc->handlers = node->control->handlers;
1019}
1020
1021static inline void IMFS_add_to_directory(
1022 IMFS_jnode_t *dir_node,
1023 IMFS_jnode_t *entry_node
1024)
1025{
1026 IMFS_directory_t *dir = (IMFS_directory_t *) dir_node;
1027
1028 entry_node->Parent = dir_node;
1029 rtems_chain_append_unprotected( &dir->Entries, &entry_node->Node );
1030}
1031
1032static inline void IMFS_remove_from_directory( IMFS_jnode_t *node )
1033{
1034 IMFS_assert( node->Parent != NULL );
1035 node->Parent = NULL;
1036 rtems_chain_extract_unprotected( &node->Node );
1037}
1038
1039static inline bool IMFS_is_directory( const IMFS_jnode_t *node )
1040{
1041 return S_ISDIR( node->st_mode );
1042}
1043
1044#define IMFS_STAT_FMT_HARD_LINK 0
1045
1046static inline bool IMFS_is_hard_link( mode_t mode )
1047{
1048 return ( mode & S_IFMT ) == IMFS_STAT_FMT_HARD_LINK;
1049}
1050
1051static inline ino_t IMFS_node_to_ino( const IMFS_jnode_t *node )
1052{
1053 return (ino_t) ((uintptr_t) node);
1054}
1055
1063static inline void *IMFS_generic_get_context_by_node(
1064 const IMFS_jnode_t *node
1065)
1066{
1067 const IMFS_generic_t *generic = (const IMFS_generic_t *) node;
1068
1069 return generic->context;
1070}
1071
1072static inline void *IMFS_generic_get_context_by_location(
1074)
1075{
1076 return loc->node_access_2;
1077}
1078
1079static inline void *IMFS_generic_get_context_by_iop(
1080 const rtems_libio_t *iop
1081)
1082{
1083 return IMFS_generic_get_context_by_location( &iop->pathinfo );
1084}
1085
1086static inline dev_t IMFS_generic_get_device_identifier_by_node(
1087 const IMFS_jnode_t *node
1088)
1089{
1090 return rtems_filesystem_make_dev_t_from_pointer( node );
1091}
1092
1093#ifdef __cplusplus
1094}
1095#endif
1097#endif
1098/* end of include file */
clock_t times(struct tms *ptms)
Definition: __times.c:97
This header file provides the interfaces of the Assert Handler.
void IMFS_do_nothing_destroy(IMFS_jnode_t *node)
Does nothing.
Definition: imfs_node.c:125
IMFS_jnode_t * IMFS_node_initialize_default(IMFS_jnode_t *node, void *arg)
Returns the node and does nothing else.
Definition: imfs_initsupp.c:91
IMFS_jnode_t * IMFS_node_remove_default(IMFS_jnode_t *node)
Returns the node and does nothing else.
Definition: imfs_node.c:118
void(* IMFS_node_control_destroy)(IMFS_jnode_t *node)
Destroys an IMFS node.
Definition: imfs.h:214
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:188
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:44
IMFS_jnode_t *(* IMFS_node_control_initialize)(IMFS_jnode_t *node, void *arg)
Initializes an IMFS node.
Definition: imfs.h:136
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:56
void IMFS_node_destroy_default(IMFS_jnode_t *node)
Frees the node.
Definition: imfs_node_destroy_default.c:44
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:47
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:46
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:45
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:69
void IMFS_fsunmount(rtems_filesystem_mount_table_entry_t *mt_entry)
Unmount this instance of IMFS.
Definition: imfs_fsunmount.c:55
int IMFS_make_linearfile(const char *path, mode_t mode, const void *data, size_t size)
Makes a linear IMFS file.
Definition: imfs_make_linfile.c:34
int rtems_tarfs_load(const char *mountpoint, const void *tar_image, size_t tar_size)
RTEMS load tarfs.
Definition: imfs_load_tar.c:46
void IMFS_node_free(const rtems_filesystem_location_info_t *loc)
Free an IMFS node.
Definition: imfs_node.c:107
int IMFS_unmount(rtems_filesystem_mount_table_entry_t *mt_entry)
Unmount an IMFS.
Definition: imfs_unmount.c:46
void IMFS_node_destroy(IMFS_jnode_t *node)
Destroy an IMFS node.
Definition: imfs_node.c:100
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:47
int IMFS_add_node(const char *path, IMFS_jnode_t *node, void *arg)
Adds an IMFS node.
Definition: imfs_add_node.c:42
int IMFS_node_clone(rtems_filesystem_location_info_t *loc)
Clone an IMFS node.
Definition: imfs_node.c:91
int IMFS_mount(rtems_filesystem_mount_table_entry_t *mt_entry)
Mount an IMFS.
Definition: imfs_mount.c:46
int IMFS_utimens(const rtems_filesystem_location_info_t *loc, struct timespec times[2])
Set IMFS file access and modification times.
Definition: imfs_utimens.c:44
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:63
void IMFS_eval_path(rtems_filesystem_eval_path_context_t *ctx)
IMFS evaluation node support.
Definition: imfs_eval.c:195
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:45
int IMFS_stat(const rtems_filesystem_location_info_t *loc, struct stat *buf)
Perform a status processing for the IMFS.
Definition: imfs_stat.c:46
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:76
int IMFS_fchmod(const rtems_filesystem_location_info_t *loc, mode_t mode)
Change the IMFS file mode.
Definition: imfs_fchmod.c:43
void IMFS_eval_path_devfs(rtems_filesystem_eval_path_context_t *ctx)
IMFS device filesystem evaluation node support.
Definition: imfs_eval_devfs.c:123
uint32_t rtems_device_major_number
This integer type represents the major number of devices.
Definition: io.h:103
uint32_t rtems_device_minor_number
This integer type represents the minor number of devices.
Definition: io.h:115
LibIO Internal Interface.
POSIX FIFO/pipe File System Support.
rtems_termios_device_context * context
Definition: console-config.c:62
This structure represents a chain node.
Definition: chain.h:78
Definition: imfs.h:291
Definition: imfs.h:285
Definition: imfs.h:332
Definition: imfs.h:307
Definition: imfs.h:381
Definition: imfs.h:337
Definition: imfs.h:267
Definition: imfs.h:342
Definition: imfs.h:319
Definition: imfs.h:312
Definition: imfs.h:244
Definition: imfs.h:374
Definition: imfs.h:386
IMFS node control.
Definition: imfs.h:237
File system node operations table.
Definition: libio.h:1021
File system operations table.
Definition: libio.h:489
Definition: intercom.c:87
Definition: mongoose.c:448
Definition: pipe.h:57
Path evaluation context.
Definition: libio.h:103
Contain file system specific information which is required to support fpathconf().
Definition: libio.h:1307
File system location.
Definition: fs.h:72
Mount table entry.
Definition: libio.h:1622
An open file data structure.
Definition: libio.h:1338
This union represents a chain control block.
Definition: chain.h:96
Definition: imfs.h:325