From: SourceForge.net <no...@so...> - 2008-11-18 22:02:46
|
Bugs item #2308236, was opened at 2008-11-18 07:32 Message generated for change (Comment added) made by nijtmans You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=2308236&group_id=10894 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: 41. Memory Allocation Group: development: 8.6a4 Status: Closed Resolution: Fixed Priority: 5 Private: No Submitted By: Jan Nijtmans (nijtmans) Assigned to: Jan Nijtmans (nijtmans) Summary: signature of Tcl_HashStats() wrong Initial Comment: Although the documentation states that this function returns a malloc'ed string, it's return type was const char*. This means that, since Tcl 8.4, users are forced to use an unsafe type cast to used it: char *s = (char *)Tcl_HashStats(....) .... ckfree(s); Fixing the signature has the effect that this type cast is no longer neccessary, so it is fully source and binary compatible. The signature is wrong since the implementation of TIP #27 in Tcl 8.4 ---------------------------------------------------------------------- Comment By: Jan Nijtmans (nijtmans) Date: 2008-11-18 23:02 Message: Just for the record (2): This is how Tcl_HashStats() must be used in Tcl 8.5: char *s = (char *)Tcl_HashStats(t); ...... do something with it if (t->typePtr->flags & TCL_HASH_KEY_SYSTEM_HASH) { TclpSysFree((char *) tablePtr->buckets); } else { ckfree((char *) tablePtr->buckets); } The documentation didn't mention this, and apart from that the function TclpSysFree is not in the public API. So in Tcl 8.6 I modified this simply to: char *s = Tcl_HashStats(t); ...... do something with it ckfree((char *) tablePtr->buckets); I don't think that anyone would use Tcl_HashStats with hash tables with the TCL_HASH_KEY_SYSTEM_HASH flag set, so in practice it doesn't make a difference. At least, in Tcl 8.6 the function works now as documented. In Tcl 8.5 the signature is changed such that a type cast is not needed any more, but the further behavior is unchanged. ---------------------------------------------------------------------- Comment By: Don Porter (dgp) Date: 2008-11-18 16:21 Message: Just for the record, this change wasn't backported for 8.4.20, and I think that's the right decision. ---------------------------------------------------------------------- Comment By: Jan Nijtmans (nijtmans) Date: 2008-11-18 08:04 Message: fixed and backported to Tcl 8.5 branch ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=2308236&group_id=10894 |