If the caller can keep a function pointer valid, they can certainly keep a string valid. This also fixes an error with HAVE_STRDUP undefined.
+ branches/release-2.1 -> 2.2 base + 3.0 -> branches/cxxconversion + backport some immediate 3.0 functionality for 2.2 + other stuff