--- 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;
+ }
}
}
}