touched up record reading function a little bit
This commit is contained in:
parent
40fad800f3
commit
7b4914c794
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: rio.c 444 2011-04-27 14:04:13Z hyunghwan.chung $
|
* $Id: rio.c 445 2011-04-28 14:11:19Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2011 Chung, Hyung-Hwan.
|
Copyright 2006-2011 Chung, Hyung-Hwan.
|
||||||
This file is part of QSE.
|
This file is part of QSE.
|
||||||
@ -138,18 +138,23 @@ static QSE_INLINE int match_long_rs (qse_awk_rtx_t* run, qse_str_t* buf, int eof
|
|||||||
* to the record before the call to this function.
|
* to the record before the call to this function.
|
||||||
* if the match is found and it ends one character
|
* if the match is found and it ends one character
|
||||||
* before this last character, it is the longest
|
* before this last character, it is the longest
|
||||||
* match.
|
* match. The code here is more generic in that
|
||||||
|
* the match is determined seeing if it does not end
|
||||||
|
* at the end of of the buffer.
|
||||||
*/
|
*/
|
||||||
if (QSE_STR_PTR(buf) + QSE_STR_LEN(buf) == match.ptr + match.len + 1)
|
const qse_char_t* be = QSE_STR_PTR(buf) + QSE_STR_LEN(buf);
|
||||||
|
const qse_char_t* me = match.ptr + match.len;
|
||||||
|
|
||||||
|
if (be > me)
|
||||||
{
|
{
|
||||||
/* drop the RS part and the last one character after RS */
|
/* drop the RS part and the characters after RS */
|
||||||
QSE_STR_LEN(buf) -= match.len + 1;
|
QSE_STR_LEN(buf) -= match.len + (be - me);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* if the match does not ends at the desired position,
|
/* if the match doesn't at the desired position,
|
||||||
* it is no match as it is not the longest match */
|
* it is no match as it is not the longest match */
|
||||||
n = 0;
|
n = 0; /* switch to no match */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -257,7 +262,7 @@ int qse_awk_rtx_readio (
|
|||||||
* of the input. the user io handler can return 0 for the
|
* of the input. the user io handler can return 0 for the
|
||||||
* open request if it doesn't have any files to open. One
|
* open request if it doesn't have any files to open. One
|
||||||
* advantage of doing this would be that you can skip the
|
* advantage of doing this would be that you can skip the
|
||||||
* entire pattern-block matching and exeuction. */
|
* entire pattern-block matching and execution. */
|
||||||
if (x == 0)
|
if (x == 0)
|
||||||
{
|
{
|
||||||
p->in.eos = 1;
|
p->in.eos = 1;
|
||||||
@ -271,7 +276,8 @@ int qse_awk_rtx_readio (
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ready to read a line. clear the line buffer */
|
/* ready to read a record (typically a line).
|
||||||
|
* clear the buffer. */
|
||||||
qse_str_clear (buf);
|
qse_str_clear (buf);
|
||||||
|
|
||||||
/* get the record separator */
|
/* get the record separator */
|
||||||
@ -417,10 +423,9 @@ int qse_awk_rtx_readio (
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* I don't do anything here if RS is composed of
|
/* I don't do anything here if RS is composed of
|
||||||
* multiple characters. See the comment furthur down */
|
* multiple characters. See the comment further down */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (qse_str_ccat (buf, c) == (qse_size_t)-1)
|
if (qse_str_ccat (buf, c) == (qse_size_t)-1)
|
||||||
{
|
{
|
||||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM, QSE_NULL);
|
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM, QSE_NULL);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user