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) */