summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2012-01-16 07:16:13 +0000
committerAdrian Thurston <thurston@complang.org>2012-01-16 07:16:13 +0000
commit02fb44a425ede98ed10f0bdf1936fdda5668d3a5 (patch)
treef04520c784151087fbfd73a3969db9bdca93057e
parent4d30106a01b776483cb4e6af1a220f962f282e3f (diff)
downloadcolm-02fb44a425ede98ed10f0bdf1936fdda5668d3a5.tar.gz
Fixes for the getData functions.
-rw-r--r--colm/input.c20
-rw-r--r--colm/pdarun.c3
2 files changed, 15 insertions, 8 deletions
diff --git a/colm/input.c b/colm/input.c
index 287a73a0..4aa66548 100644
--- a/colm/input.c
+++ b/colm/input.c
@@ -156,6 +156,10 @@ int fdGetData( SourceStream *is, int skip, char *dest, int length, int *copied )
int ret = 0;
*copied = 0;
+ if ( skip == 9 && length == 6 ) {
+ debug( REALM_INPUT, "foo\n" );
+ }
+
/* Move over skip bytes. */
RunBuf *buf = is->queue;
while ( true ) {
@@ -183,20 +187,20 @@ int fdGetData( SourceStream *is, int skip, char *dest, int length, int *copied )
if ( avail > 0 ) {
/* The source data from the current buffer. */
char *src = &buf->data[buf->offset];
- int slen = avail <= length ? avail : length;
/* Need to skip? */
- if ( skip > 0 && slen <= skip ) {
+ if ( skip > 0 && skip >= avail ) {
/* Skipping the the whole source. */
- skip -= slen;
+ skip -= avail;
}
else {
/* Either skip is zero, or less than slen. Skip goes to zero.
* Some data left over, copy it. */
src += skip;
- slen -= skip;
+ avail -= skip;
skip = 0;
+ int slen = avail < length ? avail : length;
memcpy( dest, src, slen ) ;
*copied += slen;
ret = INPUT_DATA;
@@ -453,20 +457,20 @@ int getData( FsmRun *fsmRun, InputStream *is, int skip, char *dest, int length,
if ( avail > 0 ) {
/* The source data from the current buffer. */
char *src = &buf->data[buf->offset];
- int slen = avail <= length ? avail : length;
/* Need to skip? */
- if ( skip > 0 && slen <= skip ) {
+ if ( skip > 0 && skip >= avail ) {
/* Skipping the the whole source. */
- skip -= slen;
+ skip -= avail;
}
else {
/* Either skip is zero, or less than slen. Skip goes to zero.
* Some data left over, copy it. */
src += skip;
- slen -= skip;
+ avail -= skip;
skip = 0;
+ int slen = avail <= length ? avail : length;
memcpy( dest, src, slen ) ;
*copied += slen;
ret = INPUT_DATA;
diff --git a/colm/pdarun.c b/colm/pdarun.c
index ff93e544..b5843dce 100644
--- a/colm/pdarun.c
+++ b/colm/pdarun.c
@@ -207,6 +207,9 @@ static void sendBackText( FsmRun *fsmRun, InputStream *inputStream, const char *
if ( length == 0 )
return;
+ debug( REALM_PARSE, "sending back text: %.*s\n",
+ (int)length, data );
+
undoConsumeData( fsmRun, inputStream, data, length );
undoPosition( inputStream, data, length );
}