Annotation of src/usr.bin/aucat/file.h, Revision 1.4
1.4 ! ratchov 1: /* $OpenBSD: file.h,v 1.3 2008/08/14 09:58:55 ratchov Exp $ */
1.1 ratchov 2: /*
3: * Copyright (c) 2008 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/queue.h>
21: #include <sys/types.h>
22:
1.4 ! ratchov 23: struct file;
1.1 ratchov 24: struct aparams;
25: struct aproc;
26: struct abuf;
1.4 ! ratchov 27: struct pollfd;
! 28:
! 29: struct fileops {
! 30: char *name;
! 31: size_t size;
! 32: void (*close)(struct file *);
! 33: unsigned (*read)(struct file *, unsigned char *, unsigned);
! 34: unsigned (*write)(struct file *, unsigned char *, unsigned);
! 35: void (*start)(struct file *);
! 36: void (*stop)(struct file *);
! 37: int (*nfds)(struct file *);
! 38: int (*pollfd)(struct file *, struct pollfd *, int);
! 39: int (*revents)(struct file *, struct pollfd *);
! 40: };
1.1 ratchov 41:
42: struct file {
1.4 ! ratchov 43: struct fileops *ops;
1.1 ratchov 44: struct pollfd *pfd; /* arg to poll(2) syscall */
45: #define FILE_ROK 0x1 /* file readable */
46: #define FILE_WOK 0x2 /* file writable */
47: #define FILE_EOF 0x4 /* eof on the read end */
1.4 ! ratchov 48: #define FILE_HUP 0x8 /* hang-up on the write end */
! 49: #define FILE_ZOMB 0x10 /* closed, but struct not freed */
! 50: unsigned state; /* one of above */
! 51: unsigned refs; /* reference counter */
1.1 ratchov 52: char *name; /* for debug purposes */
53: struct aproc *rproc, *wproc; /* reader and/or writer */
54: LIST_ENTRY(file) entry;
55: };
56:
57: LIST_HEAD(filelist,file);
58:
59: extern struct filelist file_list;
60:
1.4 ! ratchov 61: void filelist_init(void);
! 62: void filelist_done(void);
! 63: void filelist_unlisten(void);
! 64:
! 65: struct file *file_new(struct fileops *, char *, unsigned);
1.1 ratchov 66: void file_del(struct file *);
1.4 ! ratchov 67:
1.1 ratchov 68: void file_attach(struct file *, struct aproc *, struct aproc *);
69: unsigned file_read(struct file *, unsigned char *, unsigned);
70: unsigned file_write(struct file *, unsigned char *, unsigned);
71: int file_poll(void);
72: void file_eof(struct file *);
73: void file_hup(struct file *);
74:
75: #endif /* !defined(FILE_H) */