Changeset 41161 for trunk/Ohana/src/opihi/lib.shell/multicommand.c
- Timestamp:
- Nov 27, 2019, 11:07:45 AM (7 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/lib.shell/multicommand.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/lib.shell/multicommand.c
r39457 r41161 63 63 64 64 p = line; 65 int Nline = strlen(line); 66 65 67 done = FALSE; 66 68 status = TRUE; … … 74 76 tmpline = strncreate (p, q - p); 75 77 stripwhite (tmpline); 76 if (*tmpline) {78 myAssert (tmpline, "oops"); 77 79 78 if (bufferPending) { 79 // flush old messages 80 ExpectMessage (server, 0.2, &message); 81 bufferPending = FALSE; 80 // empty command, free and continue 81 if (*tmpline == 0) { 82 free (tmpline); 83 if (q == line + Nline) { 84 done = TRUE; 85 } else { 86 p = q + 1; 87 myAssert (p - line <= Nline, "oops"); 82 88 } 89 continue; 90 } 83 91 84 status = command (tmpline, &outline, verbose); 92 if (bufferPending) { 93 // flush old messages 94 ExpectMessage (server, 0.2, &message); 95 bufferPending = FALSE; 96 } 85 97 86 if (status == -1) { 87 if (server) { 88 // send the command to the server instead 89 if (!SendMessage (server, "%s", outline)) { 90 switch (errno) { 91 case EPIPE: 92 gprint (GP_ERR, "server connection has died\n"); 93 exit (32); 94 default: 95 gprint (GP_ERR, "server is busy...32\n"); 96 bufferPending = TRUE; 97 goto escape; 98 } 98 // input tmpline is freed by command 99 status = command (tmpline, &outline, verbose); 100 101 if (status == -1) { 102 if (server) { 103 // send the command to the server instead 104 if (!SendMessage (server, "%s", outline)) { 105 switch (errno) { 106 case EPIPE: 107 gprint (GP_ERR, "server connection has died\n"); 108 exit (32); 109 default: 110 gprint (GP_ERR, "server is busy...32\n"); 111 bufferPending = TRUE; 112 goto escape; 99 113 } 114 } 100 115 101 // receive the command exit status 102 if (ExpectMessage (server, MSG_TIMEOUT, &message)) { 103 switch (errno) { 104 case EPIPE: 105 gprint (GP_ERR, "server connection has died\n"); 106 exit (33); 107 default: 108 gprint (GP_ERR, "server is busy...33\n"); 109 bufferPending = TRUE; 110 goto escape; 111 } 112 } else { 113 sscanf (message.buffer, "STATUS %d", &status); 114 } 115 116 // receive the resulting stderr 117 if (ExpectMessage (server, MSG_TIMEOUT, &message)) { 118 switch (errno) { 119 case EPIPE: 120 gprint (GP_ERR, "server connection has died\n"); 121 exit (34); 122 default: 123 gprint (GP_ERR, "server is busy...34\n"); 124 bufferPending = TRUE; 125 goto escape; 126 } 127 } else { 128 gwrite (message.buffer, 1, message.Nbuffer, GP_ERR); 129 } 130 131 // receive the resulting stdout 132 if (ExpectMessage (server, MSG_TIMEOUT, &message)) { 133 switch (errno) { 134 case EPIPE: 135 gprint (GP_ERR, "server connection has died\n"); 136 exit (35); 137 default: 138 gprint (GP_ERR, "server is busy...35\n"); 139 bufferPending = TRUE; 140 goto escape; 141 } 142 } else { 143 gwrite (message.buffer, 1, message.Nbuffer, GP_LOG); 116 // receive the command exit status 117 if (ExpectMessage (server, MSG_TIMEOUT, &message)) { 118 switch (errno) { 119 case EPIPE: 120 gprint (GP_ERR, "server connection has died\n"); 121 exit (33); 122 default: 123 gprint (GP_ERR, "server is busy...33\n"); 124 bufferPending = TRUE; 125 goto escape; 144 126 } 145 127 } else { 146 // if no server is defined, we treat an unknown command as an error 147 status = FALSE; 148 } 149 } 150 escape: 151 if (outline != NULL) free (outline); 152 if (!status && auto_break) done = TRUE; 128 sscanf (message.buffer, "STATUS %d", &status); 129 } 130 131 // receive the resulting stderr 132 if (ExpectMessage (server, MSG_TIMEOUT, &message)) { 133 switch (errno) { 134 case EPIPE: 135 gprint (GP_ERR, "server connection has died\n"); 136 exit (34); 137 default: 138 gprint (GP_ERR, "server is busy...34\n"); 139 bufferPending = TRUE; 140 goto escape; 141 } 142 } else { 143 gwrite (message.buffer, 1, message.Nbuffer, GP_ERR); 144 } 145 146 // receive the resulting stdout 147 if (ExpectMessage (server, MSG_TIMEOUT, &message)) { 148 switch (errno) { 149 case EPIPE: 150 gprint (GP_ERR, "server connection has died\n"); 151 exit (35); 152 default: 153 gprint (GP_ERR, "server is busy...35\n"); 154 bufferPending = TRUE; 155 goto escape; 156 } 157 } else { 158 gwrite (message.buffer, 1, message.Nbuffer, GP_LOG); 159 } 160 } else { 161 // if no server is defined, we treat an unknown command as an error 162 status = FALSE; 163 } 153 164 } 165 escape: 166 if (outline != NULL) free (outline); 167 if (!status && auto_break) done = TRUE; 168 154 169 p = q + 1; 155 170 }
Note:
See TracChangeset
for help on using the changeset viewer.
