Annotation of embedaddon/tmux/compat/imsg.h, revision 1.1.1.1

1.1       misho       1: /*     $OpenBSD: imsg.h,v 1.4 2017/03/24 09:34:12 nicm Exp $   */
                      2: 
                      3: /*
                      4:  * Copyright (c) 2006, 2007 Pierre-Yves Ritschard <pyr@openbsd.org>
                      5:  * Copyright (c) 2006, 2007, 2008 Reyk Floeter <reyk@openbsd.org>
                      6:  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
                      7:  *
                      8:  * Permission to use, copy, modify, and distribute this software for any
                      9:  * purpose with or without fee is hereby granted, provided that the above
                     10:  * copyright notice and this permission notice appear in all copies.
                     11:  *
                     12:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
                     13:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
                     14:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
                     15:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     16:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
                     17:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
                     18:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     19:  */
                     20: 
                     21: #ifndef _IMSG_H_
                     22: #define _IMSG_H_
                     23: 
                     24: #define IBUF_READ_SIZE         65535
                     25: #define IMSG_HEADER_SIZE       sizeof(struct imsg_hdr)
                     26: #define MAX_IMSGSIZE           16384
                     27: 
                     28: struct ibuf {
                     29:        TAILQ_ENTRY(ibuf)        entry;
                     30:        u_char                  *buf;
                     31:        size_t                   size;
                     32:        size_t                   max;
                     33:        size_t                   wpos;
                     34:        size_t                   rpos;
                     35:        int                      fd;
                     36: };
                     37: 
                     38: struct msgbuf {
                     39:        TAILQ_HEAD(, ibuf)       bufs;
                     40:        uint32_t                 queued;
                     41:        int                      fd;
                     42: };
                     43: 
                     44: struct ibuf_read {
                     45:        u_char                   buf[IBUF_READ_SIZE];
                     46:        u_char                  *rptr;
                     47:        size_t                   wpos;
                     48: };
                     49: 
                     50: struct imsg_fd {
                     51:        TAILQ_ENTRY(imsg_fd)    entry;
                     52:        int                     fd;
                     53: };
                     54: 
                     55: struct imsgbuf {
                     56:        TAILQ_HEAD(, imsg_fd)    fds;
                     57:        struct ibuf_read         r;
                     58:        struct msgbuf            w;
                     59:        int                      fd;
                     60:        pid_t                    pid;
                     61: };
                     62: 
                     63: #define IMSGF_HASFD    1
                     64: 
                     65: struct imsg_hdr {
                     66:        uint32_t         type;
                     67:        uint16_t         len;
                     68:        uint16_t         flags;
                     69:        uint32_t         peerid;
                     70:        uint32_t         pid;
                     71: };
                     72: 
                     73: struct imsg {
                     74:        struct imsg_hdr  hdr;
                     75:        int              fd;
                     76:        void            *data;
                     77: };
                     78: 
                     79: 
                     80: /* buffer.c */
                     81: struct ibuf    *ibuf_open(size_t);
                     82: struct ibuf    *ibuf_dynamic(size_t, size_t);
                     83: int             ibuf_add(struct ibuf *, const void *, size_t);
                     84: void           *ibuf_reserve(struct ibuf *, size_t);
                     85: void           *ibuf_seek(struct ibuf *, size_t, size_t);
                     86: size_t          ibuf_size(struct ibuf *);
                     87: size_t          ibuf_left(struct ibuf *);
                     88: void            ibuf_close(struct msgbuf *, struct ibuf *);
                     89: int             ibuf_write(struct msgbuf *);
                     90: void            ibuf_free(struct ibuf *);
                     91: void            msgbuf_init(struct msgbuf *);
                     92: void            msgbuf_clear(struct msgbuf *);
                     93: int             msgbuf_write(struct msgbuf *);
                     94: void            msgbuf_drain(struct msgbuf *, size_t);
                     95: 
                     96: /* imsg.c */
                     97: void    imsg_init(struct imsgbuf *, int);
                     98: ssize_t         imsg_read(struct imsgbuf *);
                     99: ssize_t         imsg_get(struct imsgbuf *, struct imsg *);
                    100: int     imsg_compose(struct imsgbuf *, uint32_t, uint32_t, pid_t, int,
                    101:            const void *, uint16_t);
                    102: int     imsg_composev(struct imsgbuf *, uint32_t, uint32_t,  pid_t, int,
                    103:            const struct iovec *, int);
                    104: struct ibuf *imsg_create(struct imsgbuf *, uint32_t, uint32_t, pid_t, uint16_t);
                    105: int     imsg_add(struct ibuf *, const void *, uint16_t);
                    106: void    imsg_close(struct imsgbuf *, struct ibuf *);
                    107: void    imsg_free(struct imsg *);
                    108: int     imsg_flush(struct imsgbuf *);
                    109: void    imsg_clear(struct imsgbuf *);
                    110: 
                    111: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>