Annotation of coherent/f/usr/include/sys/fd.h, revision 1.1

1.1     ! root        1: /* (-lgl
        !             2:  *     COHERENT Version 4.0
        !             3:  *     Copyright (c) 1982, 1992 by Mark Williams Company.
        !             4:  *     All rights reserved. May not be copied without permission.
        !             5:  -lgl) */
        !             6: /*
        !             7:  * /usr/include/sys/fd.h
        !             8:  * Open file descriptors.
        !             9:  */ 
        !            10: 
        !            11: #ifndef         __SYS_FD_H__
        !            12: #define         __SYS_FD_H__
        !            13: 
        !            14: #include <common/feature.h>
        !            15: #include <common/ccompat.h>
        !            16: #include <sys/types.h>
        !            17: #include <sys/inode.h>
        !            18: 
        !            19: #if    ! __KERNEL__
        !            20: # error        You must be compiling the kernel to use this header
        !            21: #endif
        !            22: 
        !            23: /*
        !            24:  * The FD_CLOEXEC is not actually stored in the structure above, because it
        !            25:  * is an attribute specific to a single file descriptor rather than global to
        !            26:  * an open file object (which may have multiple references to it).
        !            27:  *
        !            28:  * To capture this information, we note that pointers as returned by an
        !            29:  * allocator such as kalloc () are all aligned at integer granularity at a
        !            30:  * minimum, leaving us one or possibly two least-significant bits for pointer-
        !            31:  * tagging.
        !            32:  *
        !            33:  * We create a non-arithmetic pointer type for the purpose of holding tagged
        !            34:  * pointers. The operations on this type are hidden, however.
        !            35:  */
        !            36: 
        !            37: typedef        struct __tagged_fd    * tagfd_t;
        !            38: 
        !            39: /*
        !            40:  * We complete this type to work around a Coherent 'cc' bug.
        !            41:  */
        !            42: struct __tagged_fd {
        !            43:        char    _bogus;
        !            44: };
        !            45: 
        !            46: /*
        !            47:  * File descriptor structure.
        !            48:  */
        !            49: 
        !            50: typedef struct fd {
        !            51:        short    f_flag;                /* Flags */
        !            52:        short    f_refc;                /* Reference count */
        !            53:        fsize_t  f_seek;                /* Seek pointer */
        !            54:        struct   inode *f_ip;           /* Pointer to inode */
        !            55: } FD;
        !            56: 
        !            57: typedef        unsigned        fd_t;
        !            58: 
        !            59: #define        ERROR_FD        ((fd_t) -1)
        !            60: 
        !            61: __EXTERN_C_BEGIN__
        !            62: 
        !            63: FD           * fdget           __PROTO ((fd_t _fd));
        !            64: int            fdgetflags      __PROTO ((fd_t _fd));
        !            65: int            fdsetflags      __PROTO ((fd_t _fd, int _flags));
        !            66: 
        !            67: fd_t           fddup           __PROTO ((fd_t _old, fd_t _base));
        !            68: fd_t           fdalloc         __PROTO ((void));
        !            69: int            fdinit          __PROTO ((fd_t _fd, INODE * _ip, int _mode));
        !            70: fd_t           fdfinish        __PROTO ((fd_t _fd));
        !            71: fd_t           fdopen          __PROTO ((INODE * _ip, int _mode));
        !            72: void           fdclose         __PROTO ((fd_t _fd));
        !            73: 
        !            74: void           fdadupl         __PROTO ((void));
        !            75: void           fdaclose        __PROTO ((void));
        !            76: 
        !            77: __EXTERN_C_END__
        !            78: 
        !            79: #endif /* ! defined (__SYS_FD_H__) */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.