Lines Matching refs:cmd

97 	register Cmdarg_t*	cmd;  in cmdopen_20120411()  local
149 if (!(cmd = newof(0, Cmdarg_t, 1, n + m))) in cmdopen_20120411()
155 cmd->id = lib; in cmdopen_20120411()
156 cmd->disc = disc; in cmdopen_20120411()
157 cmd->errorf = disc->errorf; in cmdopen_20120411()
158 if (!(cmd->runf = disc->runf)) in cmdopen_20120411()
159 cmd->runf = cmdrun; in cmdopen_20120411()
163 s = cmd->buf; in cmdopen_20120411()
167 cmd->echo = 1; in cmdopen_20120411()
171 cmd->echo = 1; in cmdopen_20120411()
179 if (cmd->errorf) in cmdopen_20120411()
180 (*cmd->errorf)(NiL, cmd, ERROR_SYSTEM|2, "%s: command not found", exe); in cmdopen_20120411()
183 free(cmd); in cmdopen_20120411()
191 cmd->insert = strcpy(s, argpat); in cmdopen_20120411()
192 cmd->insertlen = m - 1; in cmdopen_20120411()
195 s += sizeof(char**) - (s - cmd->buf) % sizeof(char**); in cmdopen_20120411()
198 cmd->argv = p; in cmdopen_20120411()
206 cmd->insertarg = p; in cmdopen_20120411()
207 argv = cmd->argv; in cmdopen_20120411()
208 c = *cmd->insert; in cmdopen_20120411()
211 while ((s = strchr(s, c)) && strncmp(cmd->insert, s, cmd->insertlen)) in cmdopen_20120411()
218 cmd->firstarg = cmd->nextarg = p; in cmdopen_20120411()
219 cmd->laststr = cmd->nextstr = cmd->buf + n; in cmdopen_20120411()
220 cmd->argmax = argmax; in cmdopen_20120411()
221 cmd->flags = disc->flags; in cmdopen_20120411()
222 cmd->offset = ((cmd->postarg = post) ? (argc - (post - argv)) : 0) + 3; in cmdopen_20120411()
223 return cmd; in cmdopen_20120411()
231 cmdflush(register Cmdarg_t* cmd) in cmdflush() argument
237 if (cmd->flags & CMD_EMPTY) in cmdflush()
238 cmd->flags &= ~CMD_EMPTY; in cmdflush()
239 else if (cmd->nextarg <= cmd->firstarg) in cmdflush()
241 if ((cmd->flags & CMD_MINIMUM) && cmd->argcount < cmd->argmax) in cmdflush()
243 if (cmd->errorf) in cmdflush()
244 (*cmd->errorf)(NiL, cmd, 2, "%d arg command would be too long", cmd->argcount); in cmdflush()
247 cmd->total.args += cmd->argcount; in cmdflush()
248 cmd->total.commands++; in cmdflush()
249 cmd->argcount = 0; in cmdflush()
250 if (p = cmd->postarg) in cmdflush()
251 while (*cmd->nextarg++ = *p++); in cmdflush()
253 *cmd->nextarg = 0; in cmdflush()
254 if (s = cmd->insert) in cmdflush()
264 a = cmd->firstarg[0]; in cmdflush()
265 b = (char*)&cmd->nextarg[1]; in cmdflush()
266 e = cmd->nextstr; in cmdflush()
268 m = cmd->insertlen; in cmdflush()
269 for (n = 1; cmd->argv[n]; n++) in cmdflush()
270 if (t = cmd->insertarg[n]) in cmdflush()
272 cmd->argv[n] = b; in cmdflush()
298 if (cmd->errorf) in cmdflush()
299 (*cmd->errorf)(NiL, cmd, 2, "%s: command too large after insert", a); in cmdflush()
303 n = (int)(cmd->nextarg - cmd->argv); in cmdflush()
304 cmd->nextarg = cmd->firstarg; in cmdflush()
305 cmd->nextstr = cmd->laststr; in cmdflush()
306 if (cmd->flags & (CMD_QUERY|CMD_TRACE)) in cmdflush()
308 p = cmd->argv; in cmdflush()
312 if (!(cmd->flags & CMD_QUERY)) in cmdflush()
319 if (cmd->echo) in cmdflush()
321 n = (cmd->flags & CMD_NEWLINE) ? '\n' : ' '; in cmdflush()
322 for (p = cmd->argv + 1; s = *p++;) in cmdflush()
326 else if ((n = (*cmd->runf)(n, cmd->argv, cmd->disc)) == -1) in cmdflush()
329 if (cmd->errorf) in cmdflush()
330 (*cmd->errorf)(NiL, cmd, ERROR_SYSTEM|2, "%s: command exec error", *cmd->argv); in cmdflush()
331 if (cmd->flags & CMD_EXIT) in cmdflush()
336 if (cmd->flags & CMD_EXIT) in cmdflush()
339 else if (!(cmd->flags & CMD_IGNORE)) in cmdflush()
341 if (n == EXIT_QUIT && (cmd->flags & CMD_EXIT)) in cmdflush()
354 cmdarg(register Cmdarg_t* cmd, const char* file, register int len) in cmdarg() argument
362 while ((cmd->nextstr -= len + 1) < (char*)(cmd->nextarg + cmd->offset)) in cmdarg()
364 if (cmd->nextarg == cmd->firstarg) in cmdarg()
366 if (cmd->errorf) in cmdarg()
367 (*cmd->errorf)(NiL, cmd, 2, "%s: path too long for exec args", file); in cmdarg()
370 if (i = cmdflush(cmd)) in cmdarg()
374 if (!(cmd->flags & CMD_IGNORE)) in cmdarg()
378 *cmd->nextarg++ = cmd->nextstr; in cmdarg()
379 memcpy(cmd->nextstr, file, len); in cmdarg()
380 cmd->nextstr[len] = 0; in cmdarg()
381 cmd->argcount++; in cmdarg()
382 if (cmd->argcount >= cmd->argmax && (i = cmdflush(cmd)) > r) in cmdarg()
386 cmd->argcount += len; in cmdarg()
395 cmdclose(Cmdarg_t* cmd) in cmdclose() argument
399 if ((cmd->flags & CMD_EXACT) && cmd->argcount < cmd->argmax) in cmdclose()
401 if (cmd->errorf) in cmdclose()
402 (*cmd->errorf)(NiL, cmd, 2, "only %d arguments for last command", cmd->argcount); in cmdclose()
407 cmd->flags &= ~CMD_MINIMUM; in cmdclose()
408 n = cmdflush(cmd); in cmdclose()
410 free(cmd); in cmdclose()