------------------------------------------------------------
revno: 770
revision-id:[EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Andrew Tridgell <[EMAIL PROTECTED]>
branch nick: tridge.stable
timestamp: Wed 2008-01-16 22:40:01 +1100
message:
  fixed handling of \r from stdout of subprocesses
modified:
  server/ctdb_logging.c          
ctdb_logging.c-20080116110143-ua6l03e8hednumk9-1
=== modified file 'server/ctdb_logging.c'
--- a/server/ctdb_logging.c     2008-01-16 11:16:15 +0000
+++ b/server/ctdb_logging.c     2008-01-16 11:40:01 +0000
@@ -106,17 +106,17 @@
                             uint16_t flags, void *private)
 {
        struct ctdb_context *ctdb = talloc_get_type(private, struct 
ctdb_context);
-       ssize_t n;
+       int n1, n2;
        char *p;
 
        if (!(flags & EVENT_FD_READ)) {
                return;
        }
        
-       n = read(ctdb->log->pfd, &ctdb->log->buf[ctdb->log->buf_used],
+       n1 = read(ctdb->log->pfd, &ctdb->log->buf[ctdb->log->buf_used],
                 sizeof(ctdb->log->buf) - ctdb->log->buf_used);
-       if (n > 0) {
-               ctdb->log->buf_used += n;
+       if (n1 > 0) {
+               ctdb->log->buf_used += n1;
        }
 
        if (ctdb->log->buf_used == sizeof(ctdb->log->buf)) {
@@ -131,10 +131,15 @@
                return;
        }
 
-       n = (p - ctdb->log->buf)+1;
-       do_debug("%*.*s", (int)n, (int)n, ctdb->log->buf);
-       memmove(ctdb->log->buf, ctdb->log->buf+n, sizeof(ctdb->log->buf) - n);
-       ctdb->log->buf_used -= n;
+       n1 = (p - ctdb->log->buf)+1;
+       n2 = n1 - 1;
+       /* swallow \r from child processes */
+       if (n2 > 0 && ctdb->log->buf[n2-1] == '\r') {
+               n2--;
+       }
+       do_debug("%*.*s\n", n2, n2, ctdb->log->buf);
+       memmove(ctdb->log->buf, p+1, sizeof(ctdb->log->buf) - n1);
+       ctdb->log->buf_used -= n1;
 }
 
 

Reply via email to