# HG changeset patch # User kono # Date 1225125281 -32400 # Node ID ef6d2a18d7c2193bd509059ca00ea9dc6b3b302e # Parent 24808249e776207997dfa8714d829ceb1846ae19 *** empty log message *** diff -r 24808249e776 -r ef6d2a18d7c2 src/REPNOTE.txt --- a/src/REPNOTE.txt Tue Oct 28 00:55:29 2008 +0900 +++ b/src/REPNOTE.txt Tue Oct 28 01:34:41 2008 +0900 @@ -1,7 +1,24 @@ +Tue Oct 28 01:28:47 JST 2008 + +まぁ、一応、それっぽくはなって来たかな。 + +readが0を返す場合と、-1を返す場合がある。0の場合は、 +selectの関係があるので、close()しない方が良いと思う。 + Tue Oct 28 00:40:44 JST 2008 mode change の最初のml_replace で、delete command が出てない。 + prevline==-1 のcheckのせいだった delete command のasserttion がfailすることがある。 + assert del_cmd==0 は正しくない + +ml_append + 複数行(n) appendすると、prev_line_flushが xtr=1 で複数回呼ばれ + rep_register では、xtr=n となる。 +ml_delete + 複数行(n) deleteすると、prev_line_flushが xtr=-1 で複数回呼ばれ + rep_register では、xtr=-n となる。 + Mon Oct 27 15:53:19 JST 2008 diff -r 24808249e776 -r ef6d2a18d7c2 src/reditor.c --- a/src/reditor.c Tue Oct 28 00:55:29 2008 +0900 +++ b/src/reditor.c Tue Oct 28 01:34:41 2008 +0900 @@ -713,7 +713,7 @@ if ((r = read(sock, pkt + offset, len - offset)) < 0) { puts_sys_err(); return r; - } + } else if (r==0) return 0; } return offset; } @@ -920,17 +920,16 @@ } if (xtra<0) { // delete case, the command was sent, do nothing - assert(cursn->del_cmd==0); cursn->prevline=-1; } else if (xtra>0) { // append case - for(i=lnum;ibuf, i+1); + for(i=lnum;ibuf, i); unsigned int length = strlen(text); // make INSERT_CMD for insert or changed lines if any cmd = make_cmd(REPCMD_INSERT, cursn->sid, rep->eid, rep->seqno++, - i, length, text); + i-1, length, text); rep_send_cmd(rep->smfd,cmd); free_cmd(cmd); } @@ -1171,7 +1170,7 @@ header = &cmd_p->pkt[0]; /* read header part */ - if (readn(fd, header, REP_HEADER_SIZE) < 0) { + if (readn(fd, header, REP_HEADER_SIZE) <= 0) { puts_sys_err(); return(FALSE); } @@ -1187,7 +1186,7 @@ if (textsize > 0) { /* read text part */ - if (readn(fd, text, textsize) < 0) { + if (readn(fd, text, textsize) <= 0) { puts_sys_err(); rep_free(cmd_p); return(FALSE);