[Date Prev][Date Next] [Chronological] [Thread] [Top]

RE: EBCDIC slapd



> -----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.

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