WISH: support tex fonts
TODO: document transient_for, vt and the grab etc. functionality
+TODO: add warning about perl interpreter and setuid/setgid
- perl: implement additional hook: line_update, add_lines.
- perl: urxvt::line now can set via ->t and ->r.
- perl: much increased functionality, better overlays, popup support
and much much more.
- perl: anyevent support.
+ - free the resource database: this plugs a massive memory hole. as a
+ side effect, it also gets rid of XGetDefault calls.
+ - free one of the cursors, fixes a small memory leaks.
6.3 Wed Jan 4 22:37:10 CET 2006
- SECURITY FIX: on systems using openpty, permissions were
"NoResources"
#else
# if defined(USE_XGETDEFAULT)
- "XGetDefaults"
+ "XGetDefault"
# else
".Xdefaults"
# endif
# endif /* ! USE_XGETDEFAULT */
#endif /* NO_RESOURCES */
+#ifdef USE_XGETDEFAULT
+char *get_res (XrmDatabase database, const char *program, const char *option)
+{
+ char resource[512];
+ char *type;
+ XrmValue result;
+
+ snprintf (resource, sizeof (resource), "%s.%s", program, option);
+ XrmGetResource (database, resource, resource, &type, &result);
+
+ return result.addr;
+}
+#endif
+
/*{{{ read the resources files */
/*
* using XGetDefault () or the hand-rolled replacement
*/
int entry;
-# ifdef XrmEnumOneLevel
char *displayResource, *xe;
XrmName name_prefix[3];
XrmClass class_prefix[3];
XrmDatabase database, rdb1;
- XrmInitialize ();
database = NULL;
// for ordering, see for example http://www.faqs.org/faqs/Xt-FAQ/ Subject: 20
}
}
- XrmSetDatabase (disp, database);
-# endif
+ xrmdatabase = database;
/*
* Query resources for options that affect us
if (kw == NULL || rs[optList[entry].doff] != NULL)
continue; /* previously set */
- p = XGetDefault (disp, rs[Rs_name], kw);
- p0 = XGetDefault (disp, "!INVALIDPROGRAMMENAMEDONTMATCH!", kw);
+ p = get_res (database, rs[Rs_name], kw);
+ p0 = get_res (database, "!INVALIDPROGRAMMENAMEDONTMATCH!", kw);
if (p == NULL || (p0 && strcmp (p, p0) == 0))
{
- p = XGetDefault (disp, RESCLASS, kw);
+ p = get_res (database, RESCLASS, kw);
#ifdef RESFALLBACK
if (p == NULL || (p0 && strcmp (p, p0) == 0))
- p = XGetDefault (disp, RESFALLBACK, kw);
+ p = get_res (database, RESFALLBACK, kw);
#endif
}
class_prefix[1] = XrmStringToName ("Keysym");
class_prefix[2] = NULLQUARK;
/* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */
- XrmEnumerateDatabase (XrmGetDatabase (disp), name_prefix, class_prefix,
+ XrmEnumerateDatabase (database, name_prefix, class_prefix,
XrmEnumOneLevel, rxvt_define_key, NULL);
# ifdef RESFALLBACK
name_prefix[0] = XrmStringToName (RESFALLBACK);
class_prefix[0] = XrmStringToName (RESFALLBACK);
class_prefix[1] = XrmStringToName ("Keysym");
/* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */
- XrmEnumerateDatabase (XrmGetDatabase (disp), name_prefix, class_prefix,
+ XrmEnumerateDatabase (database, name_prefix, class_prefix,
XrmEnumOneLevel, rxvt_define_key, NULL);
# endif
# endif