changeset 29:ef6d2a18d7c2

*** empty log message ***
author kono
date Tue, 28 Oct 2008 01:34:41 +0900
parents 24808249e776
children bf9fabc0ae84
files src/REPNOTE.txt src/reditor.c
diffstat 2 files changed, 23 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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
 
--- 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;i<lnume;i++) {
-	    char *text = get_memline_wrp(cursn->buf, i+1);
+	for(i=lnum;i<lnum+xtra;i++) {
+	    char *text = get_memline_wrp(cursn->buf, 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);