Lines Matching refs:aa
71 static int flush_exec(struct dirtree *new, struct exec_range *aa)
77 if (!aa->namecount) return 0;
79 if (aa->dir && new->parent) dl = (void *)&new->parent->extra;
80 else dl = &aa->names;
85 if (aa->dir && new->parent) rc = fchdir(new->parent->data);
94 newargs = xmalloc(sizeof(char *)*(aa->arglen+aa->namecount+1));
95 if (aa->curly < 0) {
96 memcpy(newargs, aa->argstart, sizeof(char *)*aa->arglen);
97 newargs[aa->arglen] = 0;
100 int pos = aa->curly, rest = aa->arglen - aa->curly;
103 memcpy(newargs, aa->argstart, sizeof(char *)*pos);
105 rest = aa->arglen - aa->curly - 1;
106 memcpy(newargs+pos, aa->argstart+aa->curly+1, sizeof(char *)*rest);
114 aa->namecount = 0;
395 struct exec_range *aa;
406 dlist_add_nomalloc(&TT.argdata, (void *)(aa = xzalloc(sizeof(*aa))));
407 aa->argstart = ++ss;
408 aa->curly = -1;
414 aa->curly = len;
425 aa->plus++;
429 } else aa->argsize += sizeof(char *) + strlen(ss[len]) + 1;
433 aa->arglen = len;
434 aa->dir = !!strchr(s, 'd');
435 if (aa->dir && TT.topdir == -1) TT.topdir = xopen(".", 0);
443 aa = (void *)llist_pop(&argdata);
444 ss += aa->arglen + 1;
448 name = aa->dir ? xstrdup(new->name) : dirtree_path(new, 0);
452 if (aa->dir) aa->prev = (void *)1;
465 if (aa->dir && new->parent)
467 else ddl = &aa->names;
470 if (aa->plus) {
476 if (TT.envsize+aa->argsize+aa->namesize+size >= 131072)
477 toys.exitval |= flush_exec(new, aa);
478 aa->namesize += size;
481 aa->namecount++;
482 if (!aa->plus) test = flush_exec(new, aa);