X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=hbytes%2Fhook.c;h=f570709494ce0588c29de51ed97ca254287cb794;hb=eef51b4e49bda639a2f4e871b4d8ac00a0988103;hp=a2198866b773bed905fbe68294a5c7bcefdef574;hpb=dea4e335a78d52ed5f4b71908aa8fcbf392e96be;p=chiark-tcl.git diff --git a/hbytes/hook.c b/hbytes/hook.c index a219886..f570709 100644 --- a/hbytes/hook.c +++ b/hbytes/hook.c @@ -1,6 +1,6 @@ /* * hbytes - hex-stringrep efficient byteblocks for Tcl - * Copyright 2006 Ian Jackson + * 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 @@ -13,9 +13,7 @@ * 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. + * along with this library; if not, see . */ @@ -67,12 +65,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); @@ -86,19 +85,19 @@ 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))); } static int hbytes_t_sfa(Tcl_Interp *ip, Tcl_Obj *o) { - char *str, *ep, *os; - Byte *startbytes, *bytes; + char *str, *ep; + Byte *bytes; int l; char cbuf[3]; @@ -110,13 +109,13 @@ static int hbytes_t_sfa(Tcl_Interp *ip, Tcl_Obj *o) { } else { - os= str= Tcl_GetStringFromObj(o,&l); assert(str); + str= Tcl_GetStringFromObj(o,&l); assert(str); cht_objfreeir(o); if (l & 1) return cht_staticerr(ip, "hbytes: conversion from hex:" " odd length in hex", "HBYTES SYNTAX"); - startbytes= bytes= cht_hb_arrayspace(OBJ_HBYTES(o), l/2); + bytes= cht_hb_arrayspace(OBJ_HBYTES(o), l/2); cbuf[2]= 0; while (l>0) { @@ -316,18 +315,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); -} - CHT_INIT(hbytes, CHTI_TYPE(cht_hbytes_type) CHTI_TYPE(cht_ulong_type), CHTI_COMMANDS(cht_hbytestoplevel_entries))