Changeset: f242c9cb9650 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f242c9cb9650
Modified Files:
        monetdb5/modules/mal/tablet.c
Branch: default
Log Message:

Allocate enough memory.
Also, reduce the number of (bogus as it happens) copies of code.


diffs (99 lines):

diff --git a/monetdb5/modules/mal/tablet.c b/monetdb5/modules/mal/tablet.c
--- a/monetdb5/modules/mal/tablet.c
+++ b/monetdb5/modules/mal/tablet.c
@@ -1495,30 +1495,23 @@ output_line(char **buf, int *len, char *
                                p = BUNtail(f->ci[0], f->p);
 
                                if (!p || ATOMcmp(f->adt, ATOMnilptr(f->adt), 
p) == 0) {
+                                       p = f->nullstr;
                                        l = (int) strlen(f->nullstr);
-                                       if ( fill + l + f->seplen > *len) {
-                                               /* extend the buffer */
-                                               *buf = (char *) 
GDKrealloc(*buf, *len+ BUFSIZ);
-                                               *len += BUFSIZ;
-                                               if ( *buf == NULL)
-                                                       return -1;
-                                       }
-                                       snprintf(*buf + fill,*len - fill -1, 
"%s",f->nullstr);
-                                       fill += l;
                                } else {
                                        l = f->tostr(f->extra, localbuf, 
locallen, f->adt, p);
-                                       if ( fill + l + f->seplen > *len) {
-                                               /* extend the buffer */
-                                               *buf = (char *) 
GDKrealloc(*buf, *len+ BUFSIZ);
-                                               *len += BUFSIZ;
-                                               if ( *buf == NULL)
-                                                       return -1;
-                                       }
-                                       strncpy(*buf + fill, *localbuf, l);
-                                       fill += l;
+                                       p = *localbuf;
                                }
+                               if (fill + l + f->seplen > *len) {
+                                       /* extend the buffer */
+                                       *buf = (char *) GDKrealloc(*buf, fill + 
l + f->seplen + BUFSIZ);
+                                       *len = fill + l + f->seplen + BUFSIZ;
+                                       if (*buf == NULL)
+                                               return -1;
+                               }
+                               strncpy(*buf + fill, p, *len - fill - 1);
+                               fill += l;
                        }
-                       snprintf(*buf+fill, *len - fill -1, "%s",f->sep);
+                       strncpy(*buf + fill, f->sep, *len - fill - 1);
                        fill += f->seplen;
                }
        }
@@ -1538,36 +1531,30 @@ output_line_dense(char **buf, int *len, 
 
                if (f->c[0]) {
                        char *p = BUNtail(f->ci[0], f->p);
+                       int l;
 
                        if (!p || ATOMcmp(f->adt, ATOMnilptr(f->adt), p) == 0) {
-                               int l = (int) strlen(f->nullstr);
-                               if ( fill + l + f->seplen > *len) {
-                                       /* extend the buffer */
-                                       *buf = (char *) GDKrealloc(*buf, *len+ 
BUFSIZ);
-                                       *len += BUFSIZ;
-                                       if ( *buf == NULL)
-                                               return -1;
-                               }
-                               snprintf(*buf + fill,*len - fill -1, 
"%s",f->nullstr);
-                               fill += l;
+                               p = f->nullstr;
+                               l = (int) strlen(p);
                        } else {
-                               int l = f->tostr(f->extra, localbuf, locallen, 
f->adt, p);
-                               if ( fill + l + f->seplen > *len) {
-                                       /* extend the buffer */
-                                       *buf = (char *) GDKrealloc(*buf, *len+ 
BUFSIZ);
-                                       *len += BUFSIZ;
-                                       if ( *buf == NULL)
-                                               return -1;
-                               }
-                               strncpy(*buf + fill, *localbuf, l);
-                               fill += l;
+                               l = f->tostr(f->extra, localbuf, locallen, 
f->adt, p);
+                               p = *localbuf;
                        }
+                       if (fill + l + f->seplen > *len) {
+                               /* extend the buffer */
+                               *buf = (char *) GDKrealloc(*buf, fill + l + 
f->seplen + BUFSIZ);
+                               *len = fill + l + f->seplen + BUFSIZ;
+                               if (*buf == NULL)
+                                       return -1;
+                       }
+                       strncpy(*buf + fill, p, *len - fill - 1);
+                       fill += l;
                        f->p++;
                }
-               snprintf(*buf+fill, *len - fill -1, "%s",f->sep);
+               strncpy(*buf + fill, f->sep, *len - fill - 1);
                fill += f->seplen;
        }
-       if (mnstr_write(fd, *buf, 1, fill) != fill) 
+       if (mnstr_write(fd, *buf, 1, fill) != fill)
                return TABLET_error(fd);
        return 0;
 }
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to