Lines Matching +full:cmd +full:- +full:cnt +full:- +full:name
1 /*-
37 * argv_init --
48 exp->argsoff = 0; in argv_init()
51 excp->argv = exp->args; in argv_init()
52 excp->argc = exp->argsoff; in argv_init()
57 * argv_exp0 --
63 argv_exp0(SCR *sp, EXCMD *excp, CHAR_T *cmd, size_t cmdlen) in argv_exp0() argument
69 MEMCPY(exp->args[exp->argsoff]->bp, cmd, cmdlen); in argv_exp0()
70 exp->args[exp->argsoff]->bp[cmdlen] = '\0'; in argv_exp0()
71 exp->args[exp->argsoff]->len = cmdlen; in argv_exp0()
72 ++exp->argsoff; in argv_exp0()
73 excp->argv = exp->args; in argv_exp0()
74 excp->argc = exp->argsoff; in argv_exp0()
79 * argv_exp1 --
80 * Do file name expansion on a string, and append it to the
86 argv_exp1(SCR *sp, EXCMD *excp, CHAR_T *cmd, size_t cmdlen, int is_bang) in argv_exp1() argument
96 if (argv_fexp(sp, excp, cmd, cmdlen, bp, &len, &bp, &blen, is_bang)) { in argv_exp1()
118 * argv_exp2 --
119 * Do file name and shell expansion on a string, and append it to
125 argv_exp2(SCR *sp, EXCMD *excp, CHAR_T *cmd, size_t cmdlen) in argv_exp2() argument
134 #define SHELLOFFSET (SIZE(SHELLECHO) - 1) in argv_exp2()
140 TRACE(sp, "file_argv: {%.*s}\n", (int)cmdlen, cmd); in argv_exp2()
143 if (argv_fexp(sp, excp, cmd, cmdlen, p, &len, &bp, &blen, 0)) { in argv_exp2()
153 * Do shell word expansion -- it's very, very hard to figure out what in argv_exp2()
166 n = len - SHELLOFFSET; in argv_exp2()
167 for (; n > 0; --n, ++p) in argv_exp2()
186 len -= SHELLOFFSET; in argv_exp2()
204 * argv_exp3 --
211 argv_exp3(SCR *sp, EXCMD *excp, CHAR_T *cmd, size_t cmdlen) in argv_exp3() argument
218 for (exp = EXP(sp); cmdlen > 0; ++exp->argsoff) { in argv_exp3()
220 for (; cmdlen > 0; --cmdlen, ++cmd) { in argv_exp3()
221 ch = *cmd; in argv_exp3()
237 for (ap = cmd, len = 0; cmdlen > 0; ++cmd, --cmdlen, ++len) { in argv_exp3()
238 ch = *cmd; in argv_exp3()
240 ++cmd; in argv_exp3()
241 --cmdlen; in argv_exp3()
254 off = exp->argsoff; in argv_exp3()
255 exp->args[off]->len = len; in argv_exp3()
256 for (p = exp->args[off]->bp; len > 0; --len, *p++ = *ap++) in argv_exp3()
261 excp->argv = exp->args; in argv_exp3()
262 excp->argc = exp->argsoff; in argv_exp3()
265 for (cnt = 0; cnt < exp->argsoff; ++cnt) in argv_exp3()
266 TRACE(sp, "arg %d: {%s}\n", cnt, exp->argv[cnt]); in argv_exp3()
272 * argv_flt_ex --
279 argv_flt_ex(SCR *sp, EXCMD *excp, CHAR_T *cmd, size_t cmdlen) in argv_flt_ex() argument
288 for (off = exp->argsoff, cp = cmds; cp->name != NULL; ++cp) { in argv_flt_ex()
289 len = STRLEN(cp->name); in argv_flt_ex()
291 (cmdlen > len || MEMCMP(cmd, cp->name, cmdlen))) in argv_flt_ex()
294 /* Copy the matched ex command name. */ in argv_flt_ex()
296 MEMCPY(exp->args[exp->argsoff]->bp, cp->name, len + 1); in argv_flt_ex()
297 exp->args[exp->argsoff]->len = len; in argv_flt_ex()
298 ++exp->argsoff; in argv_flt_ex()
299 excp->argv = exp->args; in argv_flt_ex()
300 excp->argc = exp->argsoff; in argv_flt_ex()
307 * argv_flt_user --
321 off = exp->argsoff; in argv_flt_user()
324 INT2CHAR(sp, uname + 1, ulen - 1, np, nlen); in argv_flt_user()
330 len = strlen(pw->pw_name); in argv_flt_user()
332 (nlen > len || memcmp(np, pw->pw_name, nlen))) in argv_flt_user()
335 /* Copy '~' + the matched user name. */ in argv_flt_user()
336 CHAR2INT(sp, pw->pw_name, len + 1, uname, ulen); in argv_flt_user()
338 exp->args[exp->argsoff]->bp[0] = '~'; in argv_flt_user()
339 MEMCPY(exp->args[exp->argsoff]->bp + 1, uname, ulen); in argv_flt_user()
340 exp->args[exp->argsoff]->len = ulen; in argv_flt_user()
341 ++exp->argsoff; in argv_flt_user()
342 excp->argv = exp->args; in argv_flt_user()
343 excp->argc = exp->argsoff; in argv_flt_user()
348 qsort(exp->args + off, exp->argsoff - off, sizeof(ARGS *), argv_comp); in argv_flt_user()
353 * argv_fexp --
354 * Do file name and bang command expansion.
357 argv_fexp(SCR *sp, EXCMD *excp, CHAR_T *cmd, size_t cmdlen, CHAR_T *p, size_t *lenp, CHAR_T **bpp, … in argv_fexp() argument
366 /* Replace file name characters. */ in argv_fexp()
367 for (bp = *bpp, blen = *blenp, len = *lenp; cmdlen > 0; --cmdlen, ++cmd) in argv_fexp()
368 switch (*cmd) { in argv_fexp()
373 if (exp->lastbcomm == NULL) { in argv_fexp()
378 len += tlen = STRLEN(exp->lastbcomm); in argv_fexp()
379 off = p - bp; in argv_fexp()
382 MEMCPY(p, exp->lastbcomm, tlen); in argv_fexp()
387 if ((t = sp->frp->name) == NULL) { in argv_fexp()
394 off = p - bp; in argv_fexp()
403 if ((t = sp->alt_name) == NULL) { in argv_fexp()
409 off = p - bp; in argv_fexp()
425 (cmd[1] == '%' || cmd[1] == '#' || cmd[1] == '!')) { in argv_fexp()
426 ++cmd; in argv_fexp()
427 --cmdlen; in argv_fexp()
432 off = p - bp; in argv_fexp()
435 *p++ = *cmd; in argv_fexp()
440 off = p - bp; in argv_fexp()
446 *lenp = len - 1; in argv_fexp()
453 * argv_alloc --
461 int cnt, off; in argv_alloc() local
469 off = exp->argsoff; in argv_alloc()
470 if (exp->argscnt == 0 || off + 2 >= exp->argscnt - 1) { in argv_alloc()
471 cnt = exp->argscnt + INCREMENT; in argv_alloc()
472 REALLOC(sp, exp->args, ARGS **, cnt * sizeof(ARGS *)); in argv_alloc()
473 if (exp->args == NULL) { in argv_alloc()
477 memset(&exp->args[exp->argscnt], 0, INCREMENT * sizeof(ARGS *)); in argv_alloc()
478 exp->argscnt = cnt; in argv_alloc()
482 if (exp->args[off] == NULL) { in argv_alloc()
483 CALLOC(sp, exp->args[off], 1, sizeof(ARGS)); in argv_alloc()
484 if (exp->args[off] == NULL) in argv_alloc()
489 ap = exp->args[off]; in argv_alloc()
490 ap->len = 0; in argv_alloc()
491 if (ap->blen < len + 1) { in argv_alloc()
492 ap->blen = len + 1; in argv_alloc()
493 REALLOC(sp, ap->bp, CHAR_T *, ap->blen * sizeof(CHAR_T)); in argv_alloc()
494 if (ap->bp == NULL) { in argv_alloc()
495 ap->bp = NULL; in argv_alloc()
496 ap->blen = 0; in argv_alloc()
505 if (exp->args[++off] == NULL) { in argv_alloc()
506 CALLOC(sp, exp->args[off], 1, sizeof(ARGS)); in argv_alloc()
507 if (exp->args[off] == NULL) in argv_alloc()
510 /* 0 length serves as end-of-argument marker. */ in argv_alloc()
511 exp->args[off]->len = 0; in argv_alloc()
516 * argv_free --
528 if (exp->args != NULL) { in argv_free()
529 for (off = 0; off < exp->argscnt; ++off) { in argv_free()
530 if (exp->args[off] == NULL) in argv_free()
532 if (F_ISSET(exp->args[off], A_ALLOCATED)) in argv_free()
533 free(exp->args[off]->bp); in argv_free()
534 free(exp->args[off]); in argv_free()
536 free(exp->args); in argv_free()
538 exp->args = NULL; in argv_free()
539 exp->argscnt = 0; in argv_free()
540 exp->argsoff = 0; in argv_free()
545 * argv_flt_path --
561 char *name, *tp, *epd = NULL; in argv_flt_path() local
567 /* Set up the name and length for comparison. */ in argv_flt_path()
589 dlen = p - path; in argv_flt_path()
605 if ((name = v_strdup(sp, tp, nlen)) == NULL) { in argv_flt_path()
610 for (off = exp->argsoff; (dp = readdir(dirp)) != NULL;) { in argv_flt_path()
612 if (dp->d_name[0] == '.') in argv_flt_path()
615 len = dp->d_namlen; in argv_flt_path()
617 len = strlen(dp->d_name); in argv_flt_path()
621 len = dp->d_namlen; in argv_flt_path()
623 len = strlen(dp->d_name); in argv_flt_path()
625 if (len < nlen || memcmp(dp->d_name, name, nlen)) in argv_flt_path()
629 /* Directory + name + slash + null. */ in argv_flt_path()
630 CHAR2INT(sp, dp->d_name, len + 1, wp, wlen); in argv_flt_path()
632 n = exp->args[exp->argsoff]->bp; in argv_flt_path()
638 exp->args[exp->argsoff]->len = dlen + 1; in argv_flt_path()
641 exp->args[exp->argsoff]->len += wlen - 1; in argv_flt_path()
642 ++exp->argsoff; in argv_flt_path()
643 excp->argv = exp->args; in argv_flt_path()
644 excp->argc = exp->argsoff; in argv_flt_path()
647 free(name); in argv_flt_path()
650 qsort(exp->args + off, exp->argsoff - off, sizeof(ARGS *), argv_comp); in argv_flt_path()
655 * argv_comp --
661 return (STRCMP((*(ARGS **)a)->bp, (*(ARGS **)b)->bp)); in argv_comp()
665 * argv_sexp --
711 std_output[0] = std_output[1] = -1; in argv_sexp()
726 case -1: /* Error. */ in argv_sexp()
730 else if (std_output[0] != -1) in argv_sexp()
732 if (std_output[1] != -1) in argv_sexp()
746 * Assume that all shells have -c. in argv_sexp()
749 execl(sh_path, sh, "-c", np, (char *)NULL); in argv_sexp()
767 (ch = GETC(ifp)) != EOF; *p++ = ch, blen -= sizeof(CHAR_T), ++len) in argv_sexp()
771 blen = *blenp - len * sizeof(CHAR_T); in argv_sexp()
775 if (p > bp && (p[-1] == '\n' || p[-1] == '\r')) { in argv_sexp()
776 --p; in argv_sexp()
777 --len; in argv_sexp()
803 for (p = bp; len; ++p, --len) in argv_sexp()
816 * argv_esc --
838 for (p = bp; len > 0; ++str, --len) { in argv_esc()
840 off = p - bp; in argv_esc()
841 if (blen / sizeof(CHAR_T) - off < 3) { in argv_esc()
853 case '+': /* Ex +cmd. */ in argv_esc()
861 case ',': case '-': case '.': case '/': /* Safe. */ in argv_esc()
879 * argv_uesc --
892 for (p = bp; len > 0; ++str, --len) { in argv_uesc()
894 if (--len < 1) in argv_uesc()
898 if (--len < 1) in argv_uesc()
907 --len; in argv_uesc()