[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;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.