[BACK]Return to file.h CVS log [TXT][DIR] Up to [local] / src / usr.bin / sndiod

Annotation of src/usr.bin/sndiod/file.h, Revision 1.1

1.1     ! ratchov     1: /*     $OpenBSD$       */
        !             2: /*
        !             3:  * Copyright (c) 2008-2012 Alexandre Ratchov <alex@caoua.org>
        !             4:  *
        !             5:  * Permission to use, copy, modify, and distribute this software for any
        !             6:  * purpose with or without fee is hereby granted, provided that the above
        !             7:  * copyright notice and this permission notice appear in all copies.
        !             8:  *
        !             9:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
        !            10:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
        !            11:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
        !            12:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
        !            13:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
        !            14:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
        !            15:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
        !            16:  */
        !            17: #ifndef FILE_H
        !            18: #define FILE_H
        !            19:
        !            20: #include <sys/types.h>
        !            21:
        !            22: struct file;
        !            23: struct pollfd;
        !            24:
        !            25: struct timo {
        !            26:        struct timo *next;
        !            27:        unsigned int val;               /* time to wait before the callback */
        !            28:        unsigned int set;               /* true if the timeout is set */
        !            29:        void (*cb)(void *arg);          /* routine to call on expiration */
        !            30:        void *arg;                      /* argument to give to 'cb' */
        !            31: };
        !            32:
        !            33: struct fileops {
        !            34:        char *name;
        !            35:        int (*pollfd)(void *, struct pollfd *);
        !            36:        int (*revents)(void *, struct pollfd *);
        !            37:        /*
        !            38:         * we have to handle POLLIN and POLLOUT events
        !            39:         * in separate handles, since handling POLLIN can
        !            40:         * close the file, and continuing (to handle POLLOUT)
        !            41:         * would make use of the free()'ed file structure
        !            42:         */
        !            43:        void (*in)(void *);
        !            44:        void (*out)(void *);
        !            45:        void (*hup)(void *);
        !            46: };
        !            47:
        !            48: struct file {
        !            49:        struct file *next;              /* next in file_list */
        !            50:        struct pollfd *pfd;             /* arg to poll(2) syscall */
        !            51:        struct fileops *ops;            /* event handlers */
        !            52:        void *arg;                      /* argument to event handlers */
        !            53: #define FILE_INIT      0               /* ready */
        !            54: #define FILE_ZOMB      1               /* closed, but not free()d yet */
        !            55:        unsigned int state;             /* one of above */
        !            56:        unsigned int nfds;              /* max number of descriptors */
        !            57:        char *name;                     /* for debug purposes */
        !            58: };
        !            59:
        !            60: extern struct file *file_list;
        !            61: extern int file_slowaccept;
        !            62:
        !            63: #ifdef DEBUG
        !            64: extern long long file_wtime, file_utime;
        !            65: #endif
        !            66:
        !            67: void timo_set(struct timo *, void (*)(void *), void *);
        !            68: void timo_add(struct timo *, unsigned int);
        !            69: void timo_del(struct timo *);
        !            70:
        !            71: void filelist_init(void);
        !            72: void filelist_done(void);
        !            73: void filelist_unlisten(void);
        !            74:
        !            75: struct file *file_new(struct fileops *, void *, char *, unsigned int);
        !            76: void file_del(struct file *);
        !            77: void file_log(struct file *);
        !            78:
        !            79: int file_poll(void);
        !            80:
        !            81: #endif /* !defined(FILE_H) */