X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-tcl.git;a=blobdiff_plain;f=hbytes%2Fhook.c;h=e53af08ba8e8fd8dd01cafa1c263a71df1698899;hp=b6c0c9e2128e54ad06b137cb3f1d8928a87b2329;hb=d23a32272b954579fe15c78d6ea605e087d0a512;hpb=d30ded35f199708808df64a9db9c83100e073c9f diff --git a/hbytes/hook.c b/hbytes/hook.c index b6c0c9e..e53af08 100644 --- a/hbytes/hook.c +++ b/hbytes/hook.c @@ -71,11 +71,18 @@ static void hbytes_t_free(Tcl_Obj *o) { hbytes_free(OBJ_HBYTES(o)); } -void obj_updatestr_array(Tcl_Obj *o, const Byte *byte, int l) { +void obj_updatestr_array_prefix(Tcl_Obj *o, const Byte *byte, + int l, const char *prefix) { char *str; + int pl; + + pl= strlen(prefix); + o->length= l*2+pl; + str= o->bytes= TALLOC(o->length+1); + + memcpy(str,prefix,pl); + str += pl; - str= o->bytes= TALLOC(l*2+1); - o->length= l*2; while (l>0) { sprintf(str,"%02x",*byte); str+=2; byte++; l--; @@ -83,6 +90,10 @@ void obj_updatestr_array(Tcl_Obj *o, const Byte *byte, int l) { *str= 0; } +void obj_updatestr_array(Tcl_Obj *o, const Byte *byte, int l) { + obj_updatestr_array_prefix(o,byte,l,""); +} + static void hbytes_t_ustr(Tcl_Obj *o) { obj_updatestr_array(o, hbytes_data(OBJ_HBYTES(o)), @@ -172,6 +183,12 @@ int do__hbytes(ClientData cd, Tcl_Interp *ip, return subcmd->func(0,ip,objc,objv); } +int do__dgram_socket(ClientData cd, Tcl_Interp *ip, + const DgramSocket_SubCommand *subcmd, + int objc, Tcl_Obj *const *objv) { + return subcmd->func(0,ip,objc,objv); +} + #define URANDOM "/dev/urandom" int get_urandom(Tcl_Interp *ip, Byte *buffer, int l) { @@ -202,6 +219,9 @@ int Hbytes_Init(Tcl_Interp *ip) { Tcl_RegisterObjType(&blockcipherkey_type); Tcl_RegisterObjType(&enum_nearlytype); Tcl_RegisterObjType(&enum1_nearlytype); - Tcl_CreateObjCommand(ip,"hbytes", pa__hbytes,0,0); + Tcl_RegisterObjType(&sockaddr_type); + Tcl_RegisterObjType(&sockid_type); + Tcl_CreateObjCommand(ip, "hbytes", pa__hbytes, 0,0); + Tcl_CreateObjCommand(ip, "dgram-socket", pa__dgram_socket, 0,0); return TCL_OK; }