Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

#include <sys/types.h>
#include <sys/limits.h>
#include <fcntl.h>
#include <ureg.h>

typedef struct Ureg Ureg;

/* mux buf for selecting (see _buf.c) */
enum {
        READMAX = 8192,                 /* read at most this much with _READ */
        PERFDMAX = 2*READMAX,           /* stop _READing an fd when it has this much */
        INITBUFS = 4,                   /* allow enough room for this many PERFDMAX */
};

typedef struct Muxbuf {
        int n;                          /* # unprocessed chars in buf */
        unsigned char*  putnext;        /* place for copy process to put next data */
        unsigned char*  getnext;        /* place for parent process to get next data */
        char            fd;             /* fd for which this is a buffer */
        unsigned char   eof;            /* true if eof after current data exhausted */
        unsigned char   roomwait;       /* true if copy process is waiting for room */
        unsigned char   datawait;       /* true if parent process is waiting for data */
        int             copypid;        /* pid of copyproc */
        unsigned char   data[PERFDMAX];
} Muxbuf;

/* be sure to change _fdinfo[] init in _fdinfo if you change this */
typedef struct Fdinfo{
        unsigned long   flags;
        unsigned long   oflags;
        uid_t   uid;
        gid_t   gid;    
        char            *name;
        /*
         * the following is used if flags&FD_BUFFERED
         */
        Muxbuf  *buf;   /* holds buffered data and state */
} Fdinfo;

/* #define FD_CLOEXEC 1 is in fcntl.h */

#define FD_ISOPEN       0x2
#define FD_BUFFERED     0x4
#define FD_BUFFEREDX    0x8
#define FD_ISTTY        0x20

#define MAXSIG SIGUSR2

extern Fdinfo   _fdinfo[];

extern int      _finishing;
extern int      _sessleader;
extern void     (*_sighdlr[])(int, char*, Ureg*);
extern char     *_sigstring(int);
extern int      _stringsig(char *);
extern long     _psigblocked;
extern int      _startbuf(int);
extern int      _selbuf(int);
extern void     _closebuf(int);
extern int _readbuf(int, void*, int, int);
extern void     _detachbuf(void);
extern void     _finish(int, char *);
extern char     *_ultoa(char *, unsigned long);
extern int      _notehandler(void *, char *);
extern void     _notetramp(int, void (*)(int, char*, Ureg*), Ureg*);
extern void     _syserrno(void);
extern int      _getpw(int *, char **, char **);
extern int _isatty(int);
extern void _fdinit(char*, char*);


void checkbug(char *, int);