{
int i_result = 0x00;
int i_fd;
- Byte b_buf[DRD64_DRCC_DEFAULT_READBUF];
- Byte *pb_tmp_now;
- Byte *pb_tmp_start;
- Byte *pb_data_now;
+ Byte *pb_start;
Byte *pb_buffer;
Byte *pb_now;
ssize_t sz_read;
DWord dw_nowrow;
- DWord dw_nowpos;
- Drd64_DrCC_LineInfo *p_before;
- Drd64_DrCC_LineInfo *p_line;
+ DWord dw_allocsize;
+ DWord dw_pos;
- pb_buffer = (Byte *)malloc( dw_maxlength + 1 );
+ dw_allocsize = dw_maxlength + DRD64_DRCC_DEFAULT_READBUF + 1;
+ pb_buffer = (Byte *)malloc( dw_allocsize );
if( NULL == pb_buffer ) { return -0x01; }
memset( pb_buffer, 0x00, dw_maxlength + 1 );
i_fd = open( pstr_filepath, O_RDWR );
if( 0x00 > i_fd ) {
- i_result = -0x01;
+ i_result = -0x02;
goto goto_DrCC_EditText_File_ReadTextFile_post;
}
p_tinfo->i_fd = i_fd;
- pb_data_now = p_tinfo->pb_text;
- p_line = p_tinfo->p_lineinfo;
- p_before = NULL;
- dw_nowpos = 0;
dw_nowrow = 0;
-
- p_line->dw_start = 0;
-
- pb_now = pb_buffer;
+ dw_pos = 0;
+ pb_start = pb_buffer;
+ pb_now = pb_start;
do {
- sz_read = read( p_tinfo->i_fd, &b_buf, DRD64_DRCC_DEFAULT_READBUF );
- //sz_read = read( p_tinfo->i_fd, pb_now, DRD64_DRCC_DEFAULT_READBUF );
+ sz_read = read( p_tinfo->i_fd, pb_start, DRD64_DRCC_DEFAULT_READBUF );
if( 0 >= sz_read ) {
- i_result = -0x01;
+ i_result = -0x03;
goto goto_DrCC_EditText_File_ReadTextFile_post;
}
- pb_tmp_start = b_buf;
- pb_tmp_now = b_buf;
- //pb_tmp_start = pb_now;
- //pb_tmp_now = pb_now:;
dw_fsize -= (DWord)sz_read;
- for( ; 0 < sz_read; sz_read--, pb_tmp_now++ ) {
- if( '\n' == *pb_tmp_now ) {
- memcpy( pb_data_now, pb_tmp_start, (size_t)(pb_tmp_now - pb_tmp_start + 1) );
-
- p_line->dw_strlen += (DWord)(pb_tmp_now - pb_tmp_start + 1);
- p_line->dw_linelen = p_line->dw_strlen
- + DRD64_DRCC_DEFAULT_RESERVEBUF_INLINE;
-
- dw_nowpos += p_line->dw_linelen;
- pb_data_now += p_line->dw_linelen;
- p_before = p_line;
-
- i_result = DrCC_EditText_Line_AddSortChain( p_tinfo, p_line );
- if( 0x00 != i_result ) {
- i_result = -0x02;
- goto goto_DrCC_EditText_File_ReadTextFile_post;
- }
- p_line++;
+ for( ; 0 < sz_read; sz_read--, dw_pos++ ) {
+ if( '\n' == *pb_now ) {
+ i_result = DrCC_EditText_Line_AppendLine(
+ p_tinfo, pb_buffer, (DWord)(pb_now - pb_buffer + 1));
dw_nowrow++;
- pb_tmp_start = pb_tmp_now + 1;
-
- p_line->dw_start = dw_nowpos;
- p_before->p_next = p_line;
- p_line->p_before = p_before;
- }
- }
- if( 1 < (pb_tmp_now - pb_tmp_start) ) {
- memcpy( pb_data_now, pb_tmp_start, (size_t)(pb_tmp_now - pb_tmp_start) );
- p_line->dw_strlen += (DWord)(pb_tmp_now - pb_tmp_start);
- dw_nowpos += (DWord)(pb_tmp_now - pb_tmp_start);
- pb_data_now += (DWord)(pb_tmp_now - pb_tmp_start);
+ if( 1 < sz_read ) {
+ memcpy( pb_buffer, (pb_now + 1), sz_read - 1);
+ memset( pb_buffer + sz_read - 1, 0x00, dw_allocsize - sz_read );
+ }
+ pb_start = pb_buffer;
+ pb_now = pb_start;
+ }
+ else { pb_now++; }
}
-
+ pb_start = pb_now;
}while( 0 < dw_fsize );
-
- if( NULL == p_line->p_before ) {
- p_line->dw_strlen += (DWord)(pb_tmp_now - pb_tmp_start);
- p_line->dw_linelen = p_line->dw_strlen
- + DRD64_DRCC_DEFAULT_RESERVEBUF_INLINE;
-
- dw_nowpos += p_line->dw_linelen;
- p_line->p_next = NULL;
- i_result = DrCC_EditText_Line_AddSortChain( p_tinfo, p_line );
- if( 0x00 != i_result ) {
- i_result = -0x02;
- goto goto_DrCC_EditText_File_ReadTextFile_post;
- }
+ if( dw_nowrow + 1 == p_tinfo->dw_maxline ) {
+ i_result = DrCC_EditText_Line_AppendLine(
+ p_tinfo, pb_buffer, (DWord)(pb_now - pb_buffer));
+ dw_nowrow++;
}
- else {
- p_before->p_next = NULL;
+ else if( dw_nowrow != p_tinfo->dw_maxline ) {
+ i_result = -0x04;
}
- p_tinfo->dw_lastsize = dw_nowpos;
-
goto_DrCC_EditText_File_ReadTextFile_post:
free( pb_buffer );
/* Read Textfile & Generate LineInfo */
i_result = DrCC_EditText_File_ReadTextFile(
p_tinfo, str_filepath, t_ftype.dw_filesize, t_ftype.dw_maxlength );
- if( 0x00 != i_result ) { return -0x05; }
+ if( 0x00 != i_result ) { return -0x06; }
return p_tinfo->i_id;
}
/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
+DRCC_EDITTEXT_LINE_EXTERN
int
DrCC_EditText_Line_AppendLine(
Drd64_DrCC_TextInfo *p_tinfo,
dw_buflength = dw_length + DRD64_DRCC_DEFAULT_RESERVEBUF_INLINE;
p_line = DrCC_EditText_Line_GetEmptyLineInfo( p_tinfo, dw_buflength );
- if( NULL == p_line ) { return -0x01; }
+ if( NULL == p_line ) { return -0x11; }
/* p_line->dw_start */
+ if( NULL != p_before )
+ { p_before->p_next = p_line; }
p_line->dw_strlen = dw_length;
- p_before->p_next = p_line;
p_line->p_before = p_before;
i_result = DrCC_EditText_Line_AddSortChain( p_tinfo, p_line );
if( 0x00 != i_result ) {
- return -0x01;
+ return -0x12;
}
+ memcpy( p_tinfo->pb_text + p_line->dw_start, pstr_text, dw_length );
+
p_tinfo->p_line_end = p_line;
+
+ return 0x00;
}