Commit 572ec56a authored by unknown's avatar unknown

bug#27741: udf test fails on AIX < 5.3

problem #1: udf_example.so does not get built on AIX

solution#1: build it yourself using
cd sql; gcc  -g -I ../include/ -I /usr/include/ -lpthread  \
-shared -o udf_example.so udf_example.c; mv udf_example.so \
.libs/ 

problem#2 (the bug): udf_example fails because it does not
recognize the variable LD_LIBRARY_PATH when doing dl_open(),
it looks at LIBPATH

solution#2: add the library path to LIBPATH

problem#3: udf_example returns the wrong result length since 
it relies on strmov to return a pointer to the end of the 
string that it copies. On AIX builds, where m_string.h is not
included (m_string defines a macro expanding strmov to stpcpy),
there is a macro expanding strmov to strcpy, which returns a 
pointer to the first character.

solution#3: define strmov as stpcpy.

problem#4: #2 applies on hp-ux as well, but this platform
looks at SHLIB_PATH

solution#4: added the library path to SHLIB_PATH


mysql-test/mysql-test-run.pl:
  bug#27741: Added library paths to LIBPATH ( shared library 
  path environment variable used on AIX) and
  SHLIB_PATH (ditto on hp-ux)
sql/udf_example.c:
  bug#27741: define strmov as stpcpy rather than strcpy and 
  include string.h. The definition for strmov in the standalone 
  case was not maintained properly
parent 1e33cfb3
......@@ -1784,6 +1784,17 @@ sub environment_setup () {
split(':', $ENV{'DYLD_LIBRARY_PATH'}) : ());
mtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
# The environment variable used for shared libs on AIX
$ENV{'SHLIB_PATH'}= join(":", @ld_library_paths,
$ENV{'SHLIB_PATH'} ?
split(':', $ENV{'SHLIB_PATH'}) : ());
mtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
# The environment variable used for shared libs on hp-ux
$ENV{'LIBPATH'}= join(":", @ld_library_paths,
$ENV{'LIBPATH'} ?
split(':', $ENV{'LIBPATH'}) : ());
mtr_debug("LIBPATH: $ENV{'LIBPATH'}");
# --------------------------------------------------------------------------
# Also command lines in .opt files may contain env vars
......
......@@ -130,7 +130,8 @@ typedef long long longlong;
#include <m_string.h> /* To get strmov() */
#else
/* when compiled as standalone */
#define strmov(a,b) strcpy(a,b)
#include <string.h>
#define strmov(a,b) stpcpy(a,b)
#define bzero(a,b) memset(a,0,b)
#define memcpy_fixed(a,b,c) memcpy(a,b,c)
#endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment