Boost logo

Boost :

Subject: Re: [boost] Build boost 1.40.0 on IBM z/OS (EBCDIC)
From: norbert.hanke_at_[hidden]
Date: 2009-10-30 05:19:06


vladimir_at_[hidden] wrote:
>
>Fun. The most relevant code is probably in tools/jam/src/regexp.c, and looks like this:
>
> case ANYBUT:
> if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) != NULL)
> return(0);
> reginput++;
> break;
>
>you might want to modify it like this:
>
> case ANYBUT:
> if (strcmp (reginput, "03") == 0)
> printf ("you were supposed to break here\n");
> if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) != NULL)
> return(0);
> reginput++;
> break;
>
>then rebuild bjam and set breakpoint on the printf. I am not aware of any assumptions
>that 0-9 range is <0x80, but apparently something does not like this, or something else
>
>- Volodya

Thanks for the hint! Apparently, the match in numbers.jam is performed by the code in glob.c that assumes that all
character values are <128. Surprisingly it did not fail in a more drastic way since array bounds are being exceeded. I
adapted glob.c for EBCDIC and the numbers.check rule now works correctly.

Next I will have a closer look at regexp.c . It is being heavily used with expressions like [a-z] that have a very
strange meaning whithout taking into account that a-z on EBCDIC is not encoded as a consecutive range of character
values.

I keep you tuned on the progress.

regards,

Norbert


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk