[freetds] [PATCH] make replacements more configurable
Craig A. Berry
craigberry at mac.com
Sun Jan 26 18:24:49 EST 2003
In porting FreeTDS to VMS (which is nearly finished) I hit a small snag
using the strtok_r function supplied in src/replacements/strtok_r.c. The
latest version of the C run-time has its own strtok_r, but the second
latest doesn't. If I build FreeTDS with the older version, then upgrade
the C run-time, then link against the TDS libraries, I'll get a multiply
defined symbol error because the home-made strtok_r collides with the
system-supplied one. Similar problems are latent for the other
replacement functions.
The easiest around this was to prefix all the function names with
"freetds_" and then locate them when and where needed via the HAVE_xxx
macros. Patch below. Does anyone have any objections or see any
potential problems with this?
This was taken against the nightly snapshot from about a week ago; let
me know if anything's changed that would make it need to be reformulated.
-------------- next part --------------
--- include/replacements.h;-0 Thu Nov 21 10:53:43 2002
+++ include/replacements.h Thu Jan 23 19:07:59 2003
@@ -35,18 +35,22 @@
#include "tds_sysdep_public.h"
#if !HAVE_ASPRINTF
+#define asprintf freetds_asprintf
int asprintf(char **ret, const char *fmt, ...);
#endif /* !HAVE_ASPRINTF */
#if !HAVE_VASPRINTF
+#define vasprintf freetds_vasprintf
int vasprintf(char **ret, const char *fmt, va_list ap);
#endif /* !HAVE_VASPRINTF */
#if !HAVE_ATOLL
+#define atoll freetds_atoll
tds_sysdep_int64_type atoll(const char *nptr);
#endif /* !HAVE_ATOLL */
#if !HAVE_STRTOK_R
+#define strtok_r freetds_strtok_r
char *strtok_r(char *str, const char *sep, char **lasts);
#endif /* !HAVE_STRTOK_R */
--- src/replacements/asprintf.c;-0 Sun Nov 17 05:28:12 2002
+++ src/replacements/asprintf.c Thu Jan 23 19:01:44 2003
@@ -16,7 +16,7 @@
int
-asprintf(char **ret, const char *fmt, ...)
+freetds_asprintf(char **ret, const char *fmt, ...)
{
int len;
va_list ap;
--- src/replacements/atoll.c;-0 Sun Nov 17 05:28:12 2002
+++ src/replacements/atoll.c Thu Jan 23 19:01:59 2003
@@ -30,7 +30,7 @@
static void *no_unused_var_warn[] = { software_version, no_unused_var_warn };
tds_sysdep_int64_type
-atoll(const char *nptr)
+freetds_atoll(const char *nptr)
{
return atol(nptr);
}
--- src/replacements/strtok_r.c;-0 Sun Nov 17 05:28:12 2002
+++ src/replacements/strtok_r.c Thu Jan 23 19:02:16 2003
@@ -20,7 +20,7 @@
#include "replacements.h"
char *
-strtok_r(char *str, const char *sep, char **lasts)
+freetds_strtok_r(char *str, const char *sep, char **lasts)
{
char *p;
--- src/replacements/vasprintf.c;-0 Mon Dec 9 10:40:59 2002
+++ src/replacements/vasprintf.c Thu Jan 23 19:02:41 2003
@@ -40,7 +40,7 @@
#define CHUNKSIZE 512
int
-vasprintf(char **ret, const char *fmt, va_list ap)
+freetds_vasprintf(char **ret, const char *fmt, va_list ap)
{
#if HAVE_VSNPRINTF
int chunks;
More information about the FreeTDS
mailing list