Kaynağa Gözat

* Don't use heap for the ghost_write return buffer

Bryan Drewery 17 yıl önce
ebeveyn
işleme
6579251b2b
3 değiştirilmiş dosya ile 12 ekleme ve 11 silme
  1. 6 5
      src/enclink.c
  2. 2 2
      src/enclink.h
  3. 4 4
      src/net.c

+ 6 - 5
src/enclink.c

@@ -130,9 +130,10 @@ static int ghost_read(int snum, char *src, size_t *len)
   return OK;
 }
 
-static char *ghost_write(int snum, char *src, size_t *len)
+static const char *ghost_write(int snum, const char *src, size_t *len)
 {
-  char *srcbuf = NULL, *buf = NULL, *line = NULL, *eol = NULL, *eline = NULL;
+  static char buf[SGRAB + 14] = "";
+  char *srcbuf = NULL, *line = NULL, *eol = NULL, *eline = NULL;
   size_t bufpos = 0;
 
   const size_t bufsiz = *len + 9 + 1;
@@ -153,7 +154,7 @@ static char *ghost_write(int snum, char *src, size_t *len)
       if (!socklist[snum].oseed)
         socklist[snum].oseed++;
     }
-    buf = (char *) my_realloc(buf, bufpos + strlen(eline) + 1 + 9);
+//    buf = (char *) my_realloc(buf, bufpos + strlen(eline) + 1 + 9);
     strcpy((char *) &buf[bufpos], eline);
     free(eline);
     strcat(buf, "\n");
@@ -172,7 +173,7 @@ static char *ghost_write(int snum, char *src, size_t *len)
       if (!socklist[snum].oseed)
         socklist[snum].oseed++;
     }
-    buf = (char *) my_realloc(buf, bufpos + strlen(eline) + 1 + 9);
+//    buf = (char *) my_realloc(buf, bufpos + strlen(eline) + 1 + 9);
     strcpy((char *) &buf[bufpos], eline);
     free(eline);
     strcat(buf, "\n");
@@ -264,7 +265,7 @@ int link_read(int snum, char *buf, size_t *len)
   return -1;
 }
 
-char *link_write(int snum, char *buf, size_t *len)
+const char *link_write(int snum, const char *buf, size_t *len)
 {
   int i = socklist[snum].enclink;
 

+ 2 - 2
src/enclink.h

@@ -27,7 +27,7 @@ struct enc_link {
   const char *name;
   int type;
   void (*link) (int, direction_t);
-  char *(*write) (int, char *, size_t *);
+  const char *(*write) (int, const char *, size_t *);
   int (*read) (int, char *, size_t *);
   void (*parse) (int, int, char *);
 };
@@ -43,7 +43,7 @@ extern struct enc_link enclink[];
 extern int link_find_by_type(int);
 
 extern void link_link(int, int, int, direction_t);
-extern char *link_write(int, char *, size_t *);
+extern const char *link_write(int, const char *, size_t *);
 extern int link_read(int, char *, size_t *);
 extern void link_hash(int, char *);
 extern void link_send(int, const char *, ...) __attribute__((format(printf, 2, 3)));

+ 4 - 4
src/net.c

@@ -1274,8 +1274,8 @@ void tputs(register int z, char *s, size_t len)
 	memcpy(p + socklist[i].outbuflen, s, len);
 	socklist[i].outbuf = p;
 	socklist[i].outbuflen += len;
-        if (socklist[i].encstatus && s)
-          free(s);
+//        if (socklist[i].encstatus && s)
+//          free(s);
 	return;
       }
       /* Try. */
@@ -1298,8 +1298,8 @@ void tputs(register int z, char *s, size_t len)
 	memcpy(socklist[i].outbuf, &s[x], len - x);
 	socklist[i].outbuflen = len - x;
       }
-      if (socklist[i].encstatus && s)
-        free(s);
+//      if (socklist[i].encstatus && s)
+//        free(s);
       return;
     }
   }