-- Leo's gemini proxy
-- Connecting to git.thebackupbox.net:1965...
-- Connected
-- Sending request
-- Meta line: 20 text/gemini
repo: rxvt-unicode-sixel action: commit revision: path_from: revision_from: 0a9ceda52396ed9451bc103e1bf840381b3ac40a: path_to: revision_to:
commit 0a9ceda52396ed9451bc103e1bf840381b3ac40a Author: Marc Lehmann <schmorp@schmorp.de> Date: Sun Jan 8 07:55:36 2006 +0000 *** empty log message *** diff --git a/Changes b/Changes
--- a/Changes +++ b/Changes @@ -10,6 +10,7 @@ WISH: just for fun, do shade and tint with XRender. 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. @@ -18,6 +19,9 @@ TODO: document transient_for, vt and the grab etc. functionality - 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 diff --git a/src/command.C b/src/command.C
--- a/src/command.C +++ b/src/command.C @@ -989,13 +989,15 @@ rxvt_term::flush () { l = &ROW (row++); - if (!(l->f & LINE_FILTERED)) + if (l->f & LINE_FILTERED) + row++; + else { // line not filtered, mark it as filtered l->f |= LINE_FILTERED; while (l->is_longer ()) { - l = &ROW (row++); + l = &ROW (++row); l->f |= LINE_FILTERED; } diff --git a/src/main.C b/src/main.C
--- a/src/main.C +++ b/src/main.C @@ -276,6 +276,9 @@ rxvt_term::~rxvt_term () #if OFF_FOCUS_FADING delete pix_colors_unfocused; #endif +#if USE_XGETDEFAULT + XrmDestroyDatabase (xrmdatabase); +#endif displays.put (display); @@ -615,6 +618,10 @@ rxvt_init () old_xerror_handler = XSetErrorHandler ((XErrorHandler) rxvt_xerror_handler); // TODO: handle this with exceptions and tolerate the memory loss XSetIOErrorHandler (rxvt_xioerror_handler); + +#ifdef USE_XGETDEFAULT + XrmInitialize (); +#endif } /* ------------------------------------------------------------------------- * diff --git a/src/rxvt.h b/src/rxvt.h
--- a/src/rxvt.h +++ b/src/rxvt.h @@ -979,6 +979,9 @@ struct rxvt_term : zero_initialized, rxvt_vars { #if ENABLE_PERL rxvt_perl_term perl; #endif +#if USE_XGETDEFAULT + XrmDatabase xrmdatabase; +#endif struct mbstate mbstate; // current input multibyte state diff --git a/src/rxvttoolkit.C b/src/rxvttoolkit.C
--- a/src/rxvttoolkit.C +++ b/src/rxvttoolkit.C @@ -229,6 +229,9 @@ bool rxvt_display::init () rxvt_display::~rxvt_display () { +#ifdef POINTER_BLANK + XFreeCursor (display, blank_cursor); +#endif x_ev.stop (); #ifdef USE_XIM xims.clear (); diff --git a/src/xdefaults.C b/src/xdefaults.C
--- a/src/xdefaults.C +++ b/src/xdefaults.C @@ -406,7 +406,7 @@ static const char optionsstring[] = "options: " "NoResources" #else # if defined(USE_XGETDEFAULT) - "XGetDefaults" + "XGetDefault" # else ".Xdefaults" # endif @@ -882,6 +882,20 @@ rxvt_term::get_xdefaults (FILE *stream, const char *name) # 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 @@ -915,13 +929,11 @@ rxvt_term::extract_resources () */ 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 @@ -992,8 +1004,7 @@ rxvt_term::extract_resources () } } - XrmSetDatabase (disp, database); -# endif + xrmdatabase = database; /* * Query resources for options that affect us @@ -1007,14 +1018,14 @@ rxvt_term::extract_resources () 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 } @@ -1051,7 +1062,7 @@ rxvt_term::extract_resources () 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); @@ -1059,7 +1070,7 @@ rxvt_term::extract_resources () 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
-----END OF PAGE-----
-- Response ended
-- Page fetched on Sun Jun 2 10:12:26 2024