Howard Chu wrote:
-----Original Message----- From: jean-frederic clere [mailto:jfrederic.clere@fujitsu-siemens.com]
Hi,
I have ported slapd to BS2000. The BS2000 is an EBCDIC mainframe. The C compiler of the BS2000 supports an option: "-K literal_encoding_ascii" that allows to handle strings in ASCII. I have compile OpenLDAP with the options: "--without-threads --enable-ldbm --with-ldbm-api=berkeley --with-ldbm-module=static" and I have used bdb 4.1.24. After some fightings I have got a running slapd.
Find enclosed the corresponding patch against the actual HEAD.
Some comments: clients/tools/ldapsearch.c: That is not BS2000 specific: I need the same correction to build on Linux when configure --without-cyrus_sasl.
OK, the ldap_pvt_tls_destroy() call should have been #ifdef HAVE_TLS.
getopt (libraries/liblutil/getopt.c and include/getopt-compat.h). I have a getopt but it is EBCDIC based I have to redefine the OpenLDAP getopt to use an ASCII one.
The OpenLDAP getopt() is the one I use for OS/390. It takes care of charset
conversion already, which removes the need for your patch in slapd/main.c.
libraries/liblber/stdio.c: The writting to a pipe is not working well and I think writting to /dev/null is faster (and I keep the /dev/null open to make sure to have better performances).
libraries/liblunicode/ucdata/ucgendat.c: I think that the IBM machine also needs a similar patch because the *.txt should be in EBCDIC (text files).
The fgets function has already been #defined to ber_pvt_fgets, which already
does the translation. This patch in ucgendat.c should not be needed.
I also have had to patch the configure: +++ Index: configure =================================================================== RCS file: /repo/OpenLDAP/pkg/ldap/configure,v retrieving revision 1.508 diff -u -r1.508 configure --- configure 23 Apr 2003 14:50:56 -0000 1.508 +++ configure 20 May 2003 14:42:31 -0000 @@ -9722,10 +9722,12 @@ /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char regfree(); +#include <sys/types.h> +#include <regex.h>
int main() { -regfree() +regex_t *preg; +regfree(preg) ; return 0; } EOF if { (eval echo configure:9732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +++ But that is to prevent using the system regexp but I think that makes sense to #include regex.h before using regfree().
After configure I have modified include/portable.h, because the configure does not find that the machine is EBCDIC and __atoe(), __etoa() and __atoe_l() have different names in BS2000.
You should find out why the EBCDIC test failed and let us know.
I think that is a problem of autoconf.
+++ $ diff -u ./include/portable.h.ori ./include/portable.h --- ./include/portable.h.ori Mon May 19 17:44:13 2003 +++ ./include/portable.h Mon May 19 17:47:10 2003 @@ -16,6 +16,13 @@
/* end of preamble */
+#define OSD_POSIX 1 +#ifdef OSD_POSIX +#define HAVE_EBCDIC 1 +#define __atoe(x) _a2e(x) +#define __etoa(x) _e2a(x) +#define __atoe_l(x,l) _e2a_n(x,l) +#endif
Your atoe_l definition looks backwards.
Oops, you are right the correct is _a2e_n(x,l).
/* Define to empty if the keyword does not work. */ /* #undef const */ @@ -1067,7 +1074,7 @@ #endif #endif
-#ifdef HAVE_EBCDIC +#if defined(HAVE_EBCDIC) && !defined(OSD_POSIX) /* ASCII/EBCDIC converting replacements for stdio funcs * vsnprintf and snprintf are used too, but they are already * checked by the configure script +++
Why have you disabled these function replacements? That's going to cause a
lot of other conversion issues.
I think the patch to libldbm/ldbm.c is generic, should be HAVE_EBCDIC not
OSD_POSIX. Since I finished porting back-bdb, I no longer use ldbm so this
escaped my notice before. With that said, you should probably be using
back-bdb as well.
-- Howard Chu Chief Architect, Symas Corp. Director, Highland Sun http://www.symas.com http://highlandsun.com/hyc Symas: Premier OpenSource Development and Support