Better memory use.
authorviric@llimona
Sat, 11 Aug 2007 14:09:03 +0200
changeset 1 5af08d964c9e
parent 0 7f37716d4f1e
child 2 57a1fcb0c75c
Better memory use.
filter.c
--- a/filter.c	Sun Aug 05 23:06:42 2007 +0200
+++ b/filter.c	Sat Aug 11 14:09:03 2007 +0200
@@ -7,6 +7,11 @@
 
 #include "dictre.h"
 
+enum
+{
+    SIZESTEP=100
+};
+
 extern struct Def defs[];
 extern int ndefs;
 extern int dont_touch[];
@@ -32,10 +37,10 @@
     int outrest;
 
     out = 0;
-    outsize = 1000;
+    outsize = SIZESTEP;
     outptr = 0;
     more_memory((void **) &out, outsize);
-    outrest = 1000;
+    outrest = SIZESTEP;
 
     maxfd = writeto;
     if (readfrom > maxfd)
@@ -66,8 +71,8 @@
             outptr += res;
             if (outrest == 0)
             {
-                outrest = 1000;
-                outsize += 1000;
+                outrest = SIZESTEP;
+                outsize += SIZESTEP;
                 more_memory((void **) &out, outsize);
             }
         }
@@ -75,8 +80,8 @@
         if (FD_ISSET(writeto, &writeset))
         {
             int res;
-            res = write(writeto, def+defptr, 1);
-            defptr++;
+            res = write(writeto, def+defptr, deflen - defptr);
+            defptr += res;
             if (defptr >= deflen)
                 close(writeto);
         }
@@ -168,10 +173,14 @@
         int newdeflen;
         if (!in_dont_touch(i))
         {
-            newdef = filter(defs[i].d, defs[i].length,
-                    filter_par, &newdeflen);
-            defs[i].length = newdeflen;
-            defs[i].d = newdef;
+            if (defs[i].length > 0)
+            {
+                newdef = filter(defs[i].d, defs[i].length,
+                        filter_par, &newdeflen);
+                defs[i].length = newdeflen;
+                free(defs[i].d);
+                defs[i].d = newdef;
+            }
         }
     }
 }