X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-tcl.git;a=blobdiff_plain;f=base%2Fchiark-tcl.h;h=951ae12ee3e5d28889ceacab9bb84dcf15ef89a3;hp=15abca2544407f8e5c7194888b7ec27787d36e98;hb=d23a32272b954579fe15c78d6ea605e087d0a512;hpb=b845521abfac164a92742f984eafb91d5d7c743d;ds=sidebyside diff --git a/base/chiark-tcl.h b/base/chiark-tcl.h index 15abca2..951ae12 100644 --- a/base/chiark-tcl.h +++ b/base/chiark-tcl.h @@ -28,6 +28,12 @@ #include #include +#include +#include +#include +#include +#include +#include #include @@ -35,6 +41,8 @@ typedef unsigned char Byte; /* from hbytes.c */ +int Hbytes_Init(Tcl_Interp *ip); /* called by Tcl's "load" */ + /* Internal representation details: */ #define HBYTES_ISEMPTY(hb) (!(hb)->begin_complex && !(hb)->end_0) #define HBYTES_ISSENTINEL(hb) (!(hb)->begin_complex && (hb)->end_0) @@ -78,7 +86,7 @@ void hbytes_empty(HBytes_Value *returns); void hbytes_sentinel(HBytes_Value *returns); void hbytes_array(HBytes_Value *returns, const Byte *array, int l); Byte *hbytes_arrayspace(HBytes_Value *returns, int l); -void hbytes_free(HBytes_Value *frees); +void hbytes_free(const HBytes_Value *frees); /* _empty, _sentinel and _array do not free or read the old value; * _free it first if needed. _free leaves it garbage, so you * have to call _empty to reuse it. _arrayspace doesn't fill @@ -88,13 +96,35 @@ void hbytes_free(HBytes_Value *frees); /* The value made by hbytes_sentinel should not be passed to * anything except HBYTES_IS..., and hbytes_free. */ +/* from sockaddr.c */ + +typedef struct { + Byte *begin, *end; +} SockAddr_Value; + +extern Tcl_ObjType sockaddr_type; + +void sockaddr_clear(SockAddr_Value*); +void sockaddr_create(SockAddr_Value*, const struct sockaddr *addr, int len); +int sockaddr_len(const SockAddr_Value*); +const struct sockaddr *sockaddr_addr(const SockAddr_Value*); +void sockaddr_free(const SockAddr_Value*); + +/* from dgram.c */ + +extern Tcl_ObjType sockid_type; + /* from hook.c */ int staticerr(Tcl_Interp *ip, const char *m); +int posixerr(Tcl_Interp *ip, int errnoval, const char *m); void objfreeir(Tcl_Obj *o); -void obj_updatestr_array(Tcl_Obj *o, const Byte *array, int l); int get_urandom(Tcl_Interp *ip, Byte *buffer, int l); +void obj_updatestr_array(Tcl_Obj *o, const Byte *array, int l); +void obj_updatestr_array_prefix(Tcl_Obj *o, const Byte *byte, + int l, const char *prefix); + /* from parse.c */ typedef struct { @@ -187,9 +217,14 @@ typedef struct { extern const BlockCipherModeInfo blockciphermodeinfos[]; +/* from misc.c */ + +int setnonblock(int fd, int isnonblock); + /* useful macros */ #define OBJ_HBYTES(o) ((HBytes_Value*)&(o)->internalRep.twoPtrValue) +#define OBJ_SOCKADDR(o) ((SockAddr_Value*)&(o)->internalRep.twoPtrValue) #define TALLOC(s) ((void*)Tcl_Alloc((s))) #define TFREE(f) (Tcl_Free((void*)(f)))