X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-tcl.git;a=blobdiff_plain;f=hbytes%2Fhook.c;h=76dd50576e4d5d14c2910091c4d939f6992c2fb8;hp=985122ecb1c912690aa612a58a5c623536597ab4;hb=ca8b96bf81245f21fe3906c71dc2994bfc5e516f;hpb=288c17549e4d409b60147b6eb8444e72c0eea4e2;ds=sidebyside diff --git a/hbytes/hook.c b/hbytes/hook.c index 985122e..76dd505 100644 --- a/hbytes/hook.c +++ b/hbytes/hook.c @@ -1,6 +1,24 @@ /* + * hbytes - hex-stringrep efficient byteblocks for Tcl + * Copyright 2006-2012 Ian Jackson + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301, USA. */ + #include #include "chiark_tcl_hbytes.h" @@ -49,12 +67,13 @@ static void hbytes_t_free(Tcl_Obj *o) { cht_hb_free(OBJ_HBYTES(o)); } -void obj_updatestr_array_prefix(Tcl_Obj *o, const Byte *byte, +void cht_obj_updatestr_array_prefix(Tcl_Obj *o, const Byte *byte, int l, const char *prefix) { char *str; int pl; pl= strlen(prefix); + assert(l < INT_MAX/2 - 1 - pl); o->length= l*2+pl; str= o->bytes= TALLOC(o->length+1); @@ -68,12 +87,12 @@ void obj_updatestr_array_prefix(Tcl_Obj *o, const Byte *byte, *str= 0; } -void obj_updatestr_array(Tcl_Obj *o, const Byte *byte, int l) { - obj_updatestr_array_prefix(o,byte,l,""); +void cht_obj_updatestr_array(Tcl_Obj *o, const Byte *byte, int l) { + cht_obj_updatestr_array_prefix(o,byte,l,""); } static void hbytes_t_ustr(Tcl_Obj *o) { - obj_updatestr_array(o, + cht_obj_updatestr_array(o, cht_hb_data(OBJ_HBYTES(o)), cht_hb_len(OBJ_HBYTES(o))); } @@ -298,23 +317,6 @@ int cht_do_hbytes_ushort2h(ClientData cd, Tcl_Interp *ip, /* toplevel functions */ -int cht_do_hbytestoplevel_hbytes(ClientData cd, Tcl_Interp *ip, - const HBytes_SubCommand *subcmd, - int objc, Tcl_Obj *const *objv) { - return subcmd->func(0,ip,objc,objv); -} - -int cht_do_hbytestoplevel_ulong(ClientData cd, Tcl_Interp *ip, - const ULong_SubCommand *subcmd, - int objc, Tcl_Obj *const *objv) { - return subcmd->func(0,ip,objc,objv); -} - -int Chiark_tcl_hbytes_Init(Tcl_Interp *ip) { - static int initd; - - return cht_initextension(ip, cht_hbytestoplevel_entries, &initd, - &cht_hbytes_type, - &cht_ulong_type, - (Tcl_ObjType*)0); -} +CHT_INIT(hbytes, + CHTI_TYPE(cht_hbytes_type) CHTI_TYPE(cht_ulong_type), + CHTI_COMMANDS(cht_hbytestoplevel_entries))