diff options
author | Adrian Thurston <thurston@complang.org> | 2012-01-16 07:16:13 +0000 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2012-01-16 07:16:13 +0000 |
commit | 02fb44a425ede98ed10f0bdf1936fdda5668d3a5 (patch) | |
tree | f04520c784151087fbfd73a3969db9bdca93057e | |
parent | 4d30106a01b776483cb4e6af1a220f962f282e3f (diff) | |
download | colm-02fb44a425ede98ed10f0bdf1936fdda5668d3a5.tar.gz |
Fixes for the getData functions.
-rw-r--r-- | colm/input.c | 20 | ||||
-rw-r--r-- | colm/pdarun.c | 3 |
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 ); } |