On Thursday 05 June 2008 07:44:11 François Perrad wrote:
> I'm not sure.
> Since r26988, I've same failure on Windows, with mingw gcc-3.4.2, and
> perl 5.8.8 (build 822 from ActiveState).
>
> The following patch solves (or hides) the problem
> Index: src/string.c
> ===================================================================
> --- src/string.c (revision 28084)
> +++ src/string.c (working copy)
> @@ -284,7 +284,7 @@
> for (i = 0; i < n_parrot_cstrings; ++i) {
> interp->const_cstring_table[i] = string_make_direct(interp,
> parrot_cstrings[i].string,
> - parrot_cstrings[i].len,
> + strlen(parrot_cstrings[i].string),
> PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
> PObj_external_FLAG|PObj_constant_FLAG);
> }
>
> Now, I start to investigate where are the difference with the following
> code :
> for (i = 0; i < n_parrot_cstrings; ++i) {
> if (strlen(parrot_cstrings[i].string) != parrot_cstrings[i].len) {
> printf("string_init %d %d 0x%08x %s\n",
> strlen(parrot_cstrings[i].string),
> parrot_cstrings[i].len,
> parrot_cstrings[i].hash_val,
> parrot_cstrings[i].string);
> }
> interp->const_cstring_table[i] = string_make_direct(interp,
> parrot_cstrings[i].string,
> strlen(parrot_cstrings[i].string),
> PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
> PObj_external_FLAG|PObj_constant_FLAG);
> }
>
> I obtain the following ouput (note the newline):
> string_init 1 2 0x00000c38 \
> string_init 3 4 0x00334876 ?%d
> string_init 1 2 0x00000c4a
>
> string_init 1 4 0x003477f8 "
> string_init 2 3 0x000193b0 \x
> string_init 2 3 0x000193ad \u
> string_init 0 2 0x00000c0c
>
> I suspect a problem in c2str.pl string only on Windows, something like a
> missing or bad binmode.
Look at get_length() in tools/build/c2str.pl. If that's the problem (and it
looks like it is), that's the place to fix it.
-- c