Owen Taylor <[EMAIL PROTECTED]> writes:
> However, that doesn't explain your behavior above. It's either
> an Xserver or Xlib bug (unlikely, IMO, this stuff doesn't change
> much at all), or a bug in the application code outside of what
> you have quoted.
I'm sorry, I should have included the full code. The function is below. It
crashes on the beginning of the for loop when it hits *prop.
gdb output:
Program received signal SIGSEGV, Segmentation fault.
0x0804d006 in cachewin (win=54526107) at cache.c:97
97 for (n = 1; *prop; n++)
1: name = (unsigned char *) 0x805e838 "konqueror"
(gdb) info locals
win = 1
new = (cacheinfo *) 0x805fc50
items = 9
left = 0
name = (unsigned char *) 0x805e838 "konqueror"
prop = (unsigned char *) 0x0
type = 31
format = 8
n = 1
cwin = 0
the function:
void cachewin(Window win)
{
cacheinfo *new;
unsigned long items, left;
unsigned char *name, *prop;
Atom type;
int format, n;
Window cwin;
cwin = client_window(win);
if (win != cwin)
{
cacheinfo *ci;
for (ci = cachehead; ci; ci = ci->next)
{
if (ci->win == cwin)
ci->parent = win;
}
return;
}
XSelectInput(dpy, cwin, EnterWindowMask | LeaveWindowMask);
if (XGetWindowProperty(dpy, win, XA_WM_NAME, 0, 1000, False,
AnyPropertyType, &type, &format, &items,
&left, &name) != Success || !items)
return;
XGetWindowProperty(dpy, win, XA_WM_CLASS, 0, 1000, False, AnyPropertyType,
&type, &format, &items, &left, &prop);
new = xmalloc(sizeof(cacheinfo) + (items * sizeof(char *)));
new->next = cachehead;
new->win = win;
new->names[0] = name;
if (items)
{
for (n = 1; *prop; n++)
{
new->names[n] = prop;
prop = strchr(prop, '\0') + 1;
}
new->numnames = n;
}
else
new->numnames = 1;
cachehead = new;
}
--
greg
_______________________________________________
XFree86 mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xfree86