[PATCH] support for no terminator in bcp format file
Xavier <[email protected]>
| Newsgroups | gmane.comp.db.tds.freetds |
|---|---|
| Message-ID | <[email protected]> |
bcp_colfmt requires a null pointer when specifying no terminator, and currently barfs when zero length is supplied with non-null pointer (as is the case when specifying an empty string for terminator in the format file). The attached patch fixes the parsing of the bcp format file to pass a null pointer when an empty string was specified as terminator. NB: a nice side effect of this is the possibility to use a named pipe as input to freebcp When specifying a prefix length and no terminator for all columns in the format file, freebcp will not perform any fseek on the input stream, allowing the use of named pipes. - Xavier _______________________________________________ FreeTDS mailing list [email protected] http://lists.ibiblio.org/mailman/listinfo/freetds
no-terminator.patch
(text/x-diff, 679 B)
diff -ur freetds-cvs/src/dblib/bcp.c freetds/src/dblib/bcp.c
--- freetds-cvs/src/dblib/bcp.c 2008-11-25 14:58:28.000000000 -0800
+++ freetds/src/dblib/bcp.c 2008-12-06 12:04:37.000000000 -0800
@@ -2894,13 +2894,16 @@
if (*tok != '\"')
return (FALSE);
-
- if ((ci->terminator = malloc(i)) == NULL) {
- dbperror(dbproc, SYBEMEM, errno);
- return FALSE;
+
+ if(i > 0) {
+ if ((ci->terminator = malloc(i)) == NULL) {
+ dbperror(dbproc, SYBEMEM, errno);
+ return FALSE;
+ }
+ memcpy(ci->terminator, term, i);
}
-
- memcpy(ci->terminator, term, i);
+ else ci->terminator = NULL;
+
ci->term_len = i;
whichcol = TAB_COLNUM;