src/lib/udc.c 1.15

1.15 2009/03/15 00:17:14 kent
Adding udcReadStringAndZero
Index: src/lib/udc.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/lib/udc.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -b -B -U 4 -r1.14 -r1.15
--- src/lib/udc.c	10 Mar 2009 00:31:04 -0000	1.14
+++ src/lib/udc.c	15 Mar 2009 00:17:14 -0000	1.15
@@ -947,8 +947,36 @@
     val = byteSwap16(val);
 return val;
 }
 
+char *udcReadStringAndZero(struct udcFile *file)
+/* Read in zero terminated string from file.  Do a freeMem of result when done. */
+{
+char shortBuf[2], *longBuf = NULL, *buf = shortBuf;
+int i, bufSize = sizeof(shortBuf);
+for (i=0; ; ++i)
+    {
+    /* See if need to expand buffer, which is initially on stack, but if it gets big goes into 
+     * heap. */
+    if (i >= bufSize)
+        {
+	int newBufSize = bufSize*2;
+	char *newBuf = needLargeMem(newBufSize);
+	memcpy(newBuf, buf, bufSize);
+	freeMem(longBuf);
+	buf = longBuf = newBuf;
+	bufSize = newBufSize;
+	}
+    char c = udcGetChar(file);
+    buf[i] = c;
+    if (c == 0)
+        break;
+    }
+char *retString = cloneString(buf);
+freeMem(longBuf);
+return retString;
+}
+
 
 
 void udcSeek(struct udcFile *file, bits64 offset)
 /* Seek to a particular position in file. */