/*********************************************************************** * * * This software is part of the ast package * * Copyright (c) 1990-2011 AT&T Intellectual Property * * and is licensed under the * * Common Public License, Version 1.0 * * by AT&T Intellectual Property * * * * A copy of the License is available at * * http://www.opensource.org/licenses/cpl1.0.txt * * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * * * * Information and Software Systems Research * * AT&T Research * * Florham Park NJ * * * * Glenn Fowler * * * ***********************************************************************/ #pragma prototyped /* * Glenn Fowler * AT&T Research * * coshell library private definitions */ #ifndef _COLIB_H #define _COLIB_H #include #include #include #define _CO_JOB_PRIVATE_ /* Cojob_t private additions */ \ Cojob_t* next; /* next in list */ \ Coservice_t* service; /* service */ \ int pid; /* pid */ \ char* out; /* serialized stdout file */ \ char* err; /* serialized stderr file */ \ /* end of private additions */ #define _CO_SHELL_PRIVATE_ /* Coshell_t private additions */ \ Vmalloc_t* vm; /* Coshell_t vm */ \ Coshell_t* next; /* next in list */ \ Cojob_t* jobs; /* job list */ \ Coservice_t* service; /* service */ \ Dt_t* export; /* coexport() dictionary */ \ Dtdisc_t* exdisc; /* coexport() discipline */ \ struct Coinit_s /* initialization script state */ \ { \ char* script; /* initialization script */ \ dev_t pwd_dev; /* previous pwd dev */ \ ino_t pwd_ino; /* previous pwd inode number */ \ int mask; /* previous umask */ \ int sync; /* sync script */ \ } init; \ int cmdfd; /* command pipe fd */ \ int gsmfd; /* msgfp child write side */ \ int mask; /* CO_* flags to clear */ \ int mode; /* connection modes */ \ int svc_outstanding;/* outstanding service intercepts */ \ int svc_running; /* running service intercepts */ \ int pid; /* pid */ \ int index; /* coshell index */ \ int slots; /* number of job slots */ \ /* end of private additions */ typedef struct Coexport_s { Dtlink_t link; char* value; char name[1]; } Coexport_t; struct Coservice_s; typedef struct Coservice_s Coservice_t; struct Coservice_s /* service info */ { Coservice_t* next; /* next in list */ char* name; /* instance name */ char* path; /* coexec() command path */ char* db; /* state/db path */ int fd; /* command pipe */ int pid; /* pid */ char* argv[16]; /* coexec() command argv[] */ }; #include #include #include #include #define state _coshell_info_ /* hide external symbol */ #define CO_MODE_ACK (1<<0) /* wait for coexec() ack */ #define CO_MODE_INDIRECT (1<<1) /* indirect CO_SERVER */ #define CO_MODE_SEPARATE (1<<2) /* 1 shell+wait per action */ #define CO_INIT (CO_USER>>1) /* initial command */ #define CO_PID_FREE (-3) /* free job slot */ #define CO_PID_WARPED (-2) /* exit before start message */ #define CO_PID_ZOMBIE (-1) /* ready for wait */ #define CO_BUFSIZ (PATH_MAX/2) /* temporary buffer size */ #define CO_MAXEVAL (PATH_MAX*8) /* max eval'd action size */ typedef struct Costate_s /* global coshell state */ { const char* lib; /* library id */ Coshell_t* coshells; /* list of all coshells */ Coshell_t* current; /* current coshell */ Coshell_t* generic; /* generic coshell for coinit() */ char* pwd; /* pwd */ char* sh; /* sh from first coopen() */ char* type; /* CO_ENV_TYPE value */ int init; /* 0 if first coopen() */ int index; /* last coshell index */ } Costate_t; extern char coident[]; /* coshell ident script */ extern char cobinit[]; /* bsh initialition script */ extern char cokinit[]; /* ksh initialition script */ extern char* co_export[]; /* default export var list */ extern Costate_t state; /* global coshell info */ #ifndef errno extern int errno; #endif extern char* costash(Sfio_t*); extern char* coinitialize(Coshell_t*, int); #endif