Browse code

cprintfでエラーになったときだけプロンプトを強制改行されるように変更

Masanobu Yasui authored on 2012/08/21 19:53:59
Showing 4 changed files
... ...
@@ -128,12 +128,16 @@ int workend(mcomm *c)
128 128
   if(moption.commpass && !c->authchk){
129 129
     m = "password: \x1b]E";
130 130
   }else{
131
-    m = "\n> ";
132 131
     if(c->logover && strcmp("dsync", c->parse[0][0])){
133 132
       if(cprintf(0, c, "[error] Log lost: %d lines\n", c->logover) == 0){
134 133
         c->logover = 0;
135 134
       }
136 135
     }
136
+    if(c->logfail){
137
+      m = "\n> ";
138
+    }else{
139
+      m = "> ";
140
+    }
137 141
   }
138 142
   if(cprintf(0, c, m) == 0){
139 143
     c->working = 0;
... ...
@@ -201,6 +201,7 @@ typedef struct
201 201
   int isalive;
202 202
   int logflag;
203 203
   int logover;
204
+  int logfail;
204 205
   char cmdline[2][MAKUO_BUFFER_SIZE];
205 206
   char parse[2][8][MAKUO_BUFFER_SIZE];
206 207
   char readbuff[2][MAKUO_BUFFER_SIZE];
... ...
@@ -294,6 +294,7 @@ int mexec_close(mcomm *c, int n)
294 294
     c->logflag  = 0;
295 295
     c->logover  = 0;
296 296
     c->loglevel = 0;
297
+    c->logfail  = 0;
297 298
     c->isalive  = 0;
298 299
     if(c->cpid){
299 300
       kill(c->cpid, SIGTERM);
... ...
@@ -195,12 +195,15 @@ int cprintf(int l, mcomm *c, char *fmt, ...)
195 195
   va_start(arg, fmt);
196 196
   vsnprintf(m, sizeof(m), fmt, arg);
197 197
   va_end(arg);
198
+  m[sizeof(m) - 2] = '\n';
198 199
   m[sizeof(m) - 1] = 0;
199 200
   n = strlen(m);
200 201
   if(write(c->fd[0], m, n) == n){
201 202
     fsync(c->fd[0]);
203
+    c->logfail = 0;
202 204
   }else{
203 205
     c->logover++;
206
+    c->logfail = 1;
204 207
     lprintf(0, "[error] %s: Resource temporarily unavailable: %s", __func__, m);
205 208
     return(-1);
206 209
   }