Lines Matching refs:arg
122 struct sh_arg arg;
208 // arg = append to this
213 static void expand_arg(struct sh_arg *arg, char *new, unsigned flags,
216 if (!(arg->c&32)) arg->v = xrealloc(arg->v, sizeof(void *)*(arg->c+33));
218 arg->v[arg->c++] = new;
219 arg->v[arg->c] = 0;
295 struct sh_process *run_command(struct sh_arg *arg, int **rdlist)
304 for (envlen = 0; envlen<arg->c; envlen++) {
305 s = arg->v[envlen];
311 if (envlen == arg->c) {
316 expand_arg(&aa, arg->v[j], NO_PATH|NO_SPLIT, 0);
333 for (j = envlen; j<arg->c; j++) {
336 ss = (s = arg->v[j]) + redir_prefix(arg->v[j]);
341 expand_arg(&pp->arg, s, 0, 0);
357 if (++j == arg->c || (isdigit(*s) && ss-s>5)) goto flush;
358 fd = pp->arg.c;
362 expand_arg(&pp->arg, arg->v[j], NO_PATH|(NO_SPLIT*!strcmp(ss, "<<<")), 0);
363 if (fd+1 != pp->arg.c) goto flush;
364 sss = pp->arg.v[--pp->arg.c];
365 } else dlist_add((void *)&pp->delete, sss = xstrdup(arg->v[j]));
472 if ((tl = toy_find(*pp->arg.v))
486 toy_init(tl, pp->arg.v);
500 if (-1 == (pp->pid = xpopen_both(pp->arg.v, pipe)))
501 perror_msg("%s: vfork", *pp->arg.v);
607 // Allocate more space for arg, and possibly terminator
608 void argxtend(struct sh_arg *arg)
610 if (!(arg->c&31)) arg->v = xrealloc(arg->v, (33+arg->c)*sizeof(void *));
617 struct sh_arg arg[1];
628 if (!(pp = run_command((*pl)->arg, &rd))) rc = 0;
649 // TODO: lifetime rules for arg? remember "shift" command.
650 struct sh_arg *arg; // arguments to function call
661 for (i = 0; i<=pl->arg->c; i++) free(pl->arg[j].v[i]);
662 free(pl->arg[j].v);
702 struct sh_arg *arg = 0;
707 arg = pl->arg;
710 if (arg->c<0) {
711 delete = start = xmprintf("%s%s", arg->v[arg->c = (-arg->c)-1], start);
712 free(arg->v[arg->c]);
713 arg->v[arg->c] = 0;
717 arg += 1+pl->here;
719 argxtend(arg);
720 if (strcmp(line, arg->v[arg->c])) {
722 arg->v[arg->c+1] = arg->v[arg->c];
723 arg->v[arg->c++] = xstrdup(line);
726 arg->v[arg->c] = 0;
742 arg = pl->arg;
745 for (i = 0; i<arg->c; i++) {
746 s = arg->v[i] + redir_prefix(arg->v[i]);
748 if (i+1 == arg->c) goto flush;
750 // Add another arg[] to the pipeline segment (removing/readding to list
757 arg[pl->count].v = xzalloc(2*sizeof(void *));
758 *arg[pl->count].v = arg->v[++i];
759 arg[pl->count].c = -(s[2] == '<'); // note <<< as c = -1
780 arg = pl->arg;
783 argxtend(arg);
788 arg->v[arg->c] = xstrndup(start, strlen(start));
789 arg->c = -(arg->c+1);
799 if (end == start || (arg->c && *start == ')' && pl->type!='f')) {
800 arg->v[arg->c] = 0;
802 if (pl->type == 'f' && arg->c<3) {
808 if (arg->c == 1 && ex && !memcmp(ex, "do\0A", 4)) {
814 if (!arg->c) free_pipeline(dlist_lpop(&sp->pipeline));
825 s = arg->v[arg->c] = xstrndup(start, end-start);
830 if (!arg->c) goto flush;
834 arg->v[arg->c] = 0;
842 } else arg->v[++arg->c] = 0;
845 if (arg->c>1 && !strcmp(s, "(")) pl->type = 'f';
847 if (arg->c == 2 && strcmp(s, "(")) goto flush;
848 if (arg->c == 3) {
872 } else if (arg->c>1) continue;
879 free(arg->v[--arg->c]); // don't save the {, function starts the block
890 if (!strncmp(pl->prev->arg->v[1], "((", 2)) goto flush;
978 while (pl->count<pl->here && pl->arg[pl->count].c<0)
979 pl->arg[pl->count++].c = 0;
1014 for (i = 0; i<pl->arg->c; i++)
1015 printf("arg[%d][%ld]=%s\n", q, i, pl->arg->v[i]);
1016 printf("type=%d term[%d]=%s\n", pl->type, q++, pl->arg->v[pl->arg->c]);
1037 struct sh_arg farg; // for/select arg stack
1045 char *s = *pl->arg->v, *ss = pl->arg->v[1];
1046 //dprintf(2, "s=%s %s %d %s %d\n", s, ss, pl->type, blk ? blk->start->arg->v[0] : "X", blk ? blk->run : 0);
1056 if (!blk || pl->arg->c>2 || ss[strspn(ss, "0123456789")]) {
1120 for (i = 1; i<pl->next->arg->c; i++)
1121 expand_arg(&blk->farg, pl->next->arg->v[i], 0, &blk->fdelete);
1143 ss = *blk->start->arg->v;
1275 // TODO: ./blah.sh one two three: put one two three in scratch.arg