三国です
想像ですが(ソースを見てみました)、
ログデータをfread()しているところで、
改行コード(CR+LF)が、片割れになってreadされる場合はないでしょうか?
CRまでしかreadされなかった場合、次のfreadでは、LFから
始まって、"corrupt line"となる場合がある(必ずではない)ような気がします。
fread()しているところ→
=====input.c=====
・・・・
choice getmoredata(FILE *f, char *start, size_t length) {
block_end = start + fread((void *)start, 1, length, f);
block_bell = block_end - BLOCK_EPSILON; /* saves repeating this calc. */
if (block_end == start)
return(EOF);
return(OK);
}
・・・・・
試しに以下の修正をしたところ発生しなくなりました。
=====input.c=====
・・・・
void shunt_data(FILE *f) {
memmove((void *)block_start, (void *)record_start,
(size_t)(block_end - record_start));
(void)getmoredata(f, block_start + (block_end - record_start),
(size_t)(BLOCKSIZE - (block_end - record_start)));
/* CRから開始された場合、CRをスキップする */
if(*(block_start + (block_end - record_start)) == '\n') {
if(block_end == record_start) { /* この条件も必要 */
debug('C', "CR(%.100s)",block_start+(block_end-record_start) );
block_start++;
}
}
・・・・
Takayuki Matsuki wrote:
> 松木です。
>
> On Thu, 6 Nov 2003 18:03:15 +0900
> Mikuni-S <mikuni@ssl.fujitsu.com> wrote:
>
>>いまだ原因は不明ですが、
>>とりあえず、例の回避策が有効そうなので
>>そのようにしようかと思います。
>
>
> On Wed, 5 Nov 2003 14:51:13 +0900
> Mikuni-S <mikuni@ssl.fujitsu.com> wrote:
>
>>なお、いろいろ試してわかったことですが、
>>ログファイルの各行の最後、改行コード(PCでは通常、CR+LF)を、
>>UNIXで通常使われるLFのみに変換して試したところ、
>>上記の異常ログ行(Corrupt line)はカウントされなくなりました。
>
>
> 多分推測にしかすぎないのですが、行末に改行コード以外の
> コードが入り込んだのではないかと思います。上記の改行コード変換は
> エディターの機能で一括変換されたのだと思いますが、行末だけの
> コードを取り出して見るということはできないでしょうか?
--