-----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.
+++
$ 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.
/* 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.