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. */