Remove xmalloc, xcalloc, xrealloc and xstrdup from utils.h and revert calls
to the normal malloc, calloc, realloc, strdup. Add new files malloc_wrap.[ch]
with the wrapper functions. malloc_wrap.h #defines malloc etc. to the
wrapper, but only if USE_MALLOC_WRAPPERS has been defined.
Put #include "malloc_wrap.h" in any file that uses *alloc or strdup. This
is also in a #ifdef USE_MALLOC_WRAPPERS ... #endif block to make using the
wrappers optional. Add -DUSE_MALLOC_WRAPPERS into the makefile so they
should normally get added.
This is an improvement on the previous method as we now don't need to
worry about stray function calls that were not changed to the wrapped version
and the code will still work even if the wrapping is disabled.
Other possible methods of doing this are using malloc_hook (glibc-specific),
adding -include malloc_wrap.h to the gcc command-line (somewhat
gcc-specific) or making our own malloc function and using dlopen (scary).
This way is probably the most portable.
Compiling using CLANG gives the following errors:
Undefined symbols for architecture x86_64:
"_bwt_occ", referenced from:
_bwt_cal_sa in bwt.o
_bwt_sa in bwt.o
"_bwt_2occ", referenced from:
_bwt_match_exact in bwt.o
_bwt_match_exact_alt in bwt.o
_bwt_cal_width in bwtaln.o
"_bwt_2occ4", referenced from:
_bwt_match_gap in bwtgap.o
_bsw2_core in bwtsw2_core.o
"_bwtl_2occ4", referenced from:
_bsw2_core in bwtsw2_core.o