X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=base%2Fchiark-tcl.h;h=37697bb7dfa7e3db01cf061d99c2afbcc3148d7c;hb=bc152fdba00b88a09a1c263bc8ff8490099b7027;hp=c5ffc06bbf0da4cd07826a2f1bdf9e6cb0a0c3b5;hpb=aa983421528c717a29c402c0cb4c8438b96fd860;p=chiark-tcl.git diff --git a/base/chiark-tcl.h b/base/chiark-tcl.h index c5ffc06..37697bb 100644 --- a/base/chiark-tcl.h +++ b/base/chiark-tcl.h @@ -28,6 +28,13 @@ #include #include +#include +#include +#include +#include +#include +#include +#include #include @@ -35,6 +42,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 +87,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 +97,36 @@ 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; +typedef struct DgramSocket *DgramSockID; + /* 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 { @@ -138,15 +170,20 @@ typedef struct { int pad, use_algname; } PadMethod; -Tcl_ObjType blockcipherkey_type; +extern Tcl_ObjType blockcipherkey_type; -/* from hash.c */ +/* from algtables.c */ typedef struct { - int blocksize, hashsize; + const char *name; + int hashsize, blocksize, statesize; + void (*init)(void *state); + void (*update)(void *state, const Byte *data, int len); + void (*final)(void *state, Byte *digest); + void (*oneshot)(Byte *digest, const Byte *data, int len); } HashAlgInfo; -/* from blockciph.c */ +extern const HashAlgInfo hashalginfos[]; typedef struct { void (*make_schedule)(void *schedule, const Byte *key, int keylen); @@ -182,9 +219,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)))