-- 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:

git.thebackupbox.net

rxvt-unicode-sixel

git://git.thebackupbox.net/rxvt-unicode-sixel

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

index 05ab8da5e7daa82a296d47feebe409dd8e093240..

index ..8c990d3195e786fcb9e37e24057e00b80c6f57c7 100644

--- 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

index e3bf8924a9031e16c5589b2299c249ca6629b9e4..

index ..75593421b4f7f124e9907e31de81d6c636ef7f51 100644

--- 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

index 522e51a1c98c27c67c710da47aa476407a52dcc8..

index ..97cac986bdc0a5e2b33a6a3264f3c7c2208ed06b 100644

--- 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

index aca610f8f7c7d5350f2706df3ae019f5e234f758..

index ..6afae97f80244ee7d7fd71734c229e64c41bdea6 100644

--- 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

index 71025707a6df1464bfc8e7c2ec390da69c495b4d..

index ..d1c98962c24ce1e95b41504ca9b6833fc6adf6a1 100644

--- 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

index 76e57bd8e0b3825072612a2a8a336da680e91561..

index ..049b9f772156dcea1400664b72334f89d47ad489 100644

--- 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