diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2012-06-24 22:28:35 +0000 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2012-06-24 22:28:35 +0000 |
commit | 3950ffe2a485479f6561c27364d3d7df5a21d124 (patch) | |
tree | 468c6e14449d1b1e279222ec32f676b0311917d2 /src/lib/libcoshell/colib.h | |
download | ksh-upstream.tar.gz |
Imported Upstream version 93u+upstream
Diffstat (limited to 'src/lib/libcoshell/colib.h')
-rw-r--r-- | src/lib/libcoshell/colib.h | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/src/lib/libcoshell/colib.h b/src/lib/libcoshell/colib.h new file mode 100644 index 0000000..e4512b5 --- /dev/null +++ b/src/lib/libcoshell/colib.h @@ -0,0 +1,137 @@ +/*********************************************************************** +* * +* This software is part of the ast package * +* Copyright (c) 1990-2011 AT&T Intellectual Property * +* and is licensed under the * +* Eclipse Public License, Version 1.0 * +* by AT&T Intellectual Property * +* * +* A copy of the License is available at * +* http://www.eclipse.org/org/documents/epl-v10.html * +* (with md5 checksum b35adb5213ca9657e911e9befb180842) * +* * +* Information and Software Systems Research * +* AT&T Research * +* Florham Park NJ * +* * +* Glenn Fowler <gsf@research.att.com> * +* * +***********************************************************************/ +#pragma prototyped +/* + * Glenn Fowler + * AT&T Research + * + * coshell library private definitions + */ + +#ifndef _COLIB_H +#define _COLIB_H + +#include <ast.h> +#include <dt.h> +#include <vmalloc.h> + +#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 <coshell.h> +#include <error.h> +#include <sig.h> +#include <wait.h> + +#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 |