Russ Allbery > Eagle's Path > August 2019 |
Peter Paris requested that C TAP Harness support being built as C++ code.
I've not been a big fan of doing this with pure C code since I find some
of the requirements of C++ mildly irritating, but Peter's initial patch
also fixed one type error in a malloc
uncovered because of one of
C++'s rules requiring the return of malloc
be cast. It turned out
to be a mostly harmless error since the code was allocating a larger
struct than it needed to, but it's still evidence that there's some
potential here for catching bugs.
That said, adding an explicit cast to every malloc
isn't likely to
catch bugs. That's just having to repeat oneself in every allocation, and
you're nearly as likely to repeat yourself incorrectly.
However, if one is willing to use a macro instead of malloc
directly, this is fixable, and I'm willing to do that since I was already
using a macro for allocation to do error handling. So I've modified the
code to pass in the type of object to allocate instead of the size, and
then used a macro to add the return cast. This makes for somewhat cleaner
code and also makes it possible to build the code as pure C++. I also
added some functions to the TAP generator library, bcalloc_type
and
breallocarray_type
, that take the same approach. (I didn't remove
the old functions, to maintain backward compatibility.)
I'm reasonably happy with the results, although it's a bit of a hassle and I'm not sure if I'm going to go to the trouble in all of my other C packages. But I'm at least considering it. (Of course, I'm also considering rewriting them all in Rust, and considering my profound lack of time to do either of these things.)
You can get the latest release from the C TAP Harness distribution page.
Posted: 2019-08-31 18:53 — Why no comments?
Russ Allbery > Eagle's Path > August 2019 |