The following should print \"; from OpenBSD
$ cat << EOF \" EOF
This commit is contained in:
parent
cf017dd18f
commit
57c8db64ce
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: exec.c,v 1.11 2005/06/26 19:09:00 christos Exp $ */
|
/* $NetBSD: exec.c,v 1.12 2005/09/11 22:16:00 christos Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* execute command tree
|
* execute command tree
|
||||||
@ -6,7 +6,7 @@
|
|||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: exec.c,v 1.11 2005/06/26 19:09:00 christos Exp $");
|
__RCSID("$NetBSD: exec.c,v 1.12 2005/09/11 22:16:00 christos Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -1484,7 +1484,7 @@ herein(content, sub)
|
|||||||
s = pushs(SSTRING, ATEMP);
|
s = pushs(SSTRING, ATEMP);
|
||||||
s->start = s->str = content;
|
s->start = s->str = content;
|
||||||
source = s;
|
source = s;
|
||||||
if (yylex(ONEWORD) != LWORD)
|
if (yylex(ONEWORD|HEREDOC) != LWORD)
|
||||||
internal_errorf(1, "herein: yylex");
|
internal_errorf(1, "herein: yylex");
|
||||||
source = osource;
|
source = osource;
|
||||||
shf_puts(evalstr(yylval.cp, 0), shf);
|
shf_puts(evalstr(yylval.cp, 0), shf);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: lex.c,v 1.11 2005/04/19 20:14:29 rillig Exp $ */
|
/* $NetBSD: lex.c,v 1.12 2005/09/11 22:16:00 christos Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* lexical analysis and source input
|
* lexical analysis and source input
|
||||||
@ -6,7 +6,7 @@
|
|||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
__RCSID("$NetBSD: lex.c,v 1.11 2005/04/19 20:14:29 rillig Exp $");
|
__RCSID("$NetBSD: lex.c,v 1.12 2005/09/11 22:16:00 christos Exp $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -248,10 +248,16 @@ yylex(cf)
|
|||||||
case '\\':
|
case '\\':
|
||||||
c = getsc();
|
c = getsc();
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case '"': case '\\':
|
case '\\':
|
||||||
case '$': case '`':
|
case '$': case '`':
|
||||||
*wp++ = QCHAR, *wp++ = c;
|
*wp++ = QCHAR, *wp++ = c;
|
||||||
break;
|
break;
|
||||||
|
case '"':
|
||||||
|
if ((cf & HEREDOC) == 0) {
|
||||||
|
*wp++ = QCHAR, *wp++ = c;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* FALLTROUGH */
|
||||||
default:
|
default:
|
||||||
Xcheck(ws, wp);
|
Xcheck(ws, wp);
|
||||||
if (c) { /* trailing \ is lost */
|
if (c) { /* trailing \ is lost */
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
/* $NetBSD: lex.h,v 1.6 2004/07/07 19:20:09 mycroft Exp $ */
|
/* $NetBSD: lex.h,v 1.7 2005/09/11 22:16:00 christos Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Source input, lexer and parser
|
* Source input, lexer and parser
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: lex.h,v 1.6 2004/07/07 19:20:09 mycroft Exp $ */
|
/* $Id: lex.h,v 1.7 2005/09/11 22:16:00 christos Exp $ */
|
||||||
|
|
||||||
#define IDENT 64
|
#define IDENT 64
|
||||||
|
|
||||||
@ -115,6 +115,7 @@ typedef union {
|
|||||||
#define ESACONLY BIT(7) /* only accept esac keyword */
|
#define ESACONLY BIT(7) /* only accept esac keyword */
|
||||||
#define CMDWORD BIT(8) /* parsing simple command (alias related) */
|
#define CMDWORD BIT(8) /* parsing simple command (alias related) */
|
||||||
#define HEREDELIM BIT(9) /* parsing <<,<<- delimiter */
|
#define HEREDELIM BIT(9) /* parsing <<,<<- delimiter */
|
||||||
|
#define HEREDOC BIT(10) /* parsing heredoc */
|
||||||
|
|
||||||
#define HERES 10 /* max << in line */
|
#define HERES 10 /* max << in line */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user