--- jd-1.8.5-beta061227/src/dbtree/nodetreebase.cpp.zero 2006-12-21 22:55:19.000000000 +0900
+++ jd-1.8.5-beta061227/src/dbtree/nodetreebase.cpp 2007-01-07 14:52:39.000000000 +0900
@@ -868,7 +868,7 @@
if( size_in > 1 ){
memcpy( m_buffer_lines + m_byte_buffer_lines_left , data, size_in );
m_buffer_lines[ m_byte_buffer_lines_left + size_in ] = '\0';
- add_raw_lines( m_buffer_lines );
+ add_raw_lines( m_buffer_lines, m_byte_buffer_lines_left + size_in );
}
// 残りの分をバッファにコピーしておく
@@ -921,8 +921,17 @@
//
// 鯖から生の(複数)行のデータを受け取ってdat形式に変換して add_one_dat_line() に出力
//
-void NodeTreeBase::add_raw_lines( char* rawlines )
+void NodeTreeBase::add_raw_lines( char* rawlines, size_t size )
{
+ // 時々サーバ側のdatファイルが壊れていてデータ中に \0 が
+ // 入っている時があるので取り除く
+ for( size_t i = 0; i < size; ++i ){
+ if( rawlines[ i ] == '\0' ){
+ MISC::ERRMSG( "EOF was inserted in the middle of the raw data" );
+ rawlines[ i ] = ' ';
+ }
+ }
+
// 保存前にrawデータを加工
rawlines = process_raw_lines( rawlines );
@@ -1014,6 +1023,7 @@
std::cout << datline << std::endl;
#endif
+ m_broken = true;
createTextNode( "broken", COLOR_CHAR );
createBrNode();
createBrNode();
--- jd-1.8.5-beta061227/src/dbtree/nodetreebase.h.zero 2006-12-21 22:05:29.000000000 +0900
+++ jd-1.8.5-beta061227/src/dbtree/nodetreebase.h 2007-01-07 14:37:48.000000000 +0900
@@ -216,7 +216,7 @@
NODE* createTextNodeN( const char* text, int n, int color_text, bool bold = false );
// 以下、構文解析用関数
- void add_raw_lines( char* rawines );
+ void add_raw_lines( char* rawines, size_t size );
const char* add_one_dat_line( const char* datline );
void parseName( NODE* header, const char* str, int lng );