[GRASSLIST:5303] Re: d.rgb kills monitor in cygwin

Mike Thomas mthomas at gil.com.au
Mon Jan 13 06:36:08 EST 2003


Hi there.

Thanks for the patch Glynn and report Jeff.

Can't do it tonight, but will try in the morning Australian time.

Cheers

Mike Thomas

----- Original Message -----
From: "Glynn Clements" <glynn.clements at virgin.net>
To: "Jeff D. Hamann" <jeff_hamann at hamanndonald.com>
Cc: "GRASSLIST" <GRASSLIST at baylor.edu>; "Mike Thomas" <mthomas at gil.com.au>
Sent: Sunday, January 12, 2003 9:24 AM
Subject: Re: [GRASSLIST:5289] d.rgb kills monitor in cygwin


>
> [CC'd to Mike]
>
> Jeff D. Hamann wrote:
>
> > I've recently upgraded to the generic version of grass on win32/cygwin
(nice
> > not to need two windowing systems on the desktop) but when I try to run
the
> > d.rgb command, the graphics monitor shuts down and I get nothing. I can
> > display single coverages at a time using d.rast but i need to use d.rgb,
> > unless there's a better way to do this....
>
> I've located the bug. The libW11 version of XCreateImage() [1] fails
> to set the bytes_per_line member of the XImage structure correctly.
> Consequently, XDRIVER doesn't allocate enough memory for the data,
> resulting in memory corruption.
>
> [1] in src/display/devices/windows/libW11/w32/xlib.c
>
> Basically, the implementation overlooks the following section of the
> XCreateImage() manpage:
>
>        If you pass a zero value in bytes_per_line, Xlib
>        assumes that the scanlines are contiguous in memory and
>        calculates the value of bytes_per_line itself.
>
> Could someone who has Cygwin and the GRASS source test the attached
> patch? Rebooting into Windows is inconvenient for me right now.
>
> --
> Glynn Clements <glynn.clements at virgin.net>
>
>


----------------------------------------------------------------------------
----


> Index: src/display/devices/windows/libW11/w32/xlib.c
> ===================================================================
> RCS file:
/grassrepository/grass/src/display/devices/windows/libW11/w32/xlib.c,v
> retrieving revision 1.5
> diff -u -r1.5 xlib.c
> --- src/display/devices/windows/libW11/w32/xlib.c 5 May 2002
07:40:23 -0000 1.5
> +++ src/display/devices/windows/libW11/w32/xlib.c 11 Jan 2003
23:25:34 -0000
> @@ -1821,6 +1821,15 @@
>      XImage *img = (XImage *) allocateMemory ( sizeof ( XImage ) );
>      NT_debug ("XCreateImage\n");
>      if (img) {
> +#define ROUNDUP(nbytes, pad) ((((nbytes) + ((pad)-1)) / (pad)) *
((pad)>>3))
> +        if (bytes_per_line == 0)
> +        {
> +            if (format == ZPixmap)
> +                bytes_per_line = ROUNDUP(depth * width, bitmap_pad);
> +            else
> +                bytes_per_line = ROUNDUP(width + offset, bitmap_pad);
> +        }
> +
>          img->depth = depth;
>          img->format = format;
>          img->xoffset = offset;
>




More information about the grass-user mailing list