예제 #1
0
파일: parser.c 프로젝트: hakan-akan/cor
STATIC void
parsefname() {
      union node *n = redirnode;

      if (readtoken() != TWORD)
            synexpect(-1);
      if (n->type == NHERE) {
            struct heredoc *here = heredoc;
            struct heredoc *p;
            int i;

            if (quoteflag == 0)
                  n->type = NXHERE;
            TRACE(("Here document %d\n", n->type));
            if (here->striptabs) {
                  while (*wordtext == '\t')
                        wordtext++;
            }
            if (! noexpand(wordtext) || (i = strlen(wordtext)) == 0 || i > EOFMARKLEN)
                  synerror("Illegal eof marker for << redirection");
            rmescapes(wordtext);
            here->eofmark = wordtext;
            here->next = NULL;
            if (heredoclist == NULL)
                  heredoclist = here;
            else {
                  for (p = heredoclist ; p->next ; p = p->next);
                  p->next = here;
            }
      } else if (n->type == NTOFD || n->type == NFROMFD) {
            if (is_digit(wordtext[0]))
                  n->ndup.dupfd = digit_val(wordtext[0]);
            else if (wordtext[0] == '-')
                  n->ndup.dupfd = -1;
            else
                  goto bad;
            if (wordtext[1] != '\0') {
bad:
                  synerror("Bad fd number");
            }
      } else {
            n->nfile.fname = (union node *)stalloc(sizeof (struct narg));
            n = n->nfile.fname;
            n->type = NARG;
            n->narg.next = NULL;
            n->narg.text = wordtext;
            n->narg.backquote = backquotelist;
      }
}
예제 #2
0
파일: parser.c 프로젝트: 7shi/minix-tools
STATIC void
parsefname(void)
{
	union node *n = redirnode;

	if (readtoken() != TWORD)
		synexpect(-1);
	if (n->type == NHERE) {
		struct heredoc *here = heredoc;
		struct heredoc *p;
		int i;

		if (quoteflag == 0)
			n->type = NXHERE;
		TRACE(("Here document %d\n", n->type));
		if (here->striptabs) {
			while (*wordtext == '\t')
				wordtext++;
		}
		if (! noexpand(wordtext) || (i = strlen(wordtext)) == 0 || i > EOFMARKLEN)
			synerror("Illegal eof marker for << redirection");
		rmescapes(wordtext);
		here->eofmark = wordtext;
		here->next = NULL;
		if (heredoclist == NULL)
			heredoclist = here;
		else {
			for (p = heredoclist ; p->next ; p = p->next);
			p->next = here;
		}
	} else if (n->type == NTOFD || n->type == NFROMFD) {
		fixredir(n, wordtext, 0);
	} else {
		n->nfile.fname = makename();
	}
}