Re: [dwm] [patch] simplification to drawtext

From: Enno \ <gottox_AT_gmail.com>
Date: Sun, 1 Jun 2008 19:30:46 +0200

beware that it should be

memcpy(&buf[MAX(0, len - 3)], "...", 4);

not

memcpy(&buf[MAX(0, len - 3)], "...", 3);

otherwise it will overwrite the zero-terminator if len < 3.

Furthermore it will change the length of the string if len < 3, which
has no impact on the output, as XDrawString respects len, but it's
still ugly.

So I still prefer strncpy as the result doing the same with memcopy
should look like this to work properly:
memcpy(&buf[MAX(0, len - 3)], "...", MAX(len, 3));

I also prefer strncpy over memcpy because we're not copy plain data,
but strings.

regards
Gottox

2008/6/1, Anselm R. Garbe <arg_AT_suckless.org>:
> On Sun, Jun 01, 2008 at 01:21:03PM +0200, Premysl Hruby wrote:
> > Not much readable (because it firstly looks like it's error (buf maybe
> > not ended with \0)). I am against using strncpy in case that dest string
> > is not C string, but char[] + length.
> >
> > Maybe:
> >
> > memcpy(&buf[MAX(0, len - 3)], "...", 3);
> >
> > would be somewhat better ;)
> >
> >
> > > XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
> > > if(dc.font.set)
> > > XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
>
>
> I though a while about this, and I think the memcpy() idea is
> best.
>
> Kind regards,
>
> --
> Anselm R. Garbe >< http://www.suckless.org/ >< GPG key: 0D73F361
>
>

-- 
http://www.gnuffy.org - Real Community Distro
http://www.gnuffy.org/index.php/GnuEm - Gnuffy on Ipaq (Codename Peggy)
Received on Sun Jun 01 2008 - 19:30:48 UTC

This archive was generated by hypermail 2.2.0 : Sun Jul 13 2008 - 15:46:42 UTC