xref: /titanic_53/usr/src/cmd/zonecfg/zonecfg_lex.l (revision 0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024f)
17c478bd9Sstevel@tonic-gate %{
27c478bd9Sstevel@tonic-gate /*
37c478bd9Sstevel@tonic-gate  * CDDL HEADER START
47c478bd9Sstevel@tonic-gate  *
57c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
6ffbafc53Scomay  * Common Development and Distribution License (the "License").
7ffbafc53Scomay  * You may not use this file except in compliance with the License.
87c478bd9Sstevel@tonic-gate  *
97c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
107c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
117c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
127c478bd9Sstevel@tonic-gate  * and limitations under the License.
137c478bd9Sstevel@tonic-gate  *
147c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
157c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
167c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
177c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
187c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
197c478bd9Sstevel@tonic-gate  *
207c478bd9Sstevel@tonic-gate  * CDDL HEADER END
21ffbafc53Scomay  */
22ffbafc53Scomay 
23ffbafc53Scomay /*
24a20ee416SGlenn Faden  * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
257c478bd9Sstevel@tonic-gate  */
267c478bd9Sstevel@tonic-gate 
277c478bd9Sstevel@tonic-gate #include <string.h>
287c478bd9Sstevel@tonic-gate #include <libintl.h>
297c478bd9Sstevel@tonic-gate #include "zonecfg.h"
307c478bd9Sstevel@tonic-gate #include "zonecfg_grammar.tab.h"
317c478bd9Sstevel@tonic-gate 
327c478bd9Sstevel@tonic-gate int lex_lineno = 1;	/* line number for error reporting */
337c478bd9Sstevel@tonic-gate static int state = INITIAL;
34bbec428eSgjelinek extern boolean_t cmd_file_mode;
35bbec428eSgjelinek extern boolean_t saw_error;
367c478bd9Sstevel@tonic-gate extern void yyerror(char *s);
377c478bd9Sstevel@tonic-gate char *safe_strdup(char *s);
387c478bd9Sstevel@tonic-gate %}
397c478bd9Sstevel@tonic-gate 
40cb8a054bSGlenn Faden %a 7000
41cb8a054bSGlenn Faden %p 5000
420209230bSgjelinek %e 2000
430209230bSgjelinek %n 1000
447c478bd9Sstevel@tonic-gate 
457c478bd9Sstevel@tonic-gate %{
467c478bd9Sstevel@tonic-gate /*
477c478bd9Sstevel@tonic-gate  * The three states below are for tokens, lists and complex property values.
487c478bd9Sstevel@tonic-gate  * Note that simple property values are a subset of tokens.
497c478bd9Sstevel@tonic-gate  */
507c478bd9Sstevel@tonic-gate %}
517c478bd9Sstevel@tonic-gate %s TSTATE
527c478bd9Sstevel@tonic-gate %s LSTATE
537c478bd9Sstevel@tonic-gate %s CSTATE
547c478bd9Sstevel@tonic-gate %%
557c478bd9Sstevel@tonic-gate 
567c478bd9Sstevel@tonic-gate <INITIAL>"#"[^\n]*	{ }
577c478bd9Sstevel@tonic-gate 
587c478bd9Sstevel@tonic-gate <INITIAL>add	{
597c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
607c478bd9Sstevel@tonic-gate 			state = TSTATE;
617c478bd9Sstevel@tonic-gate 			return ADD;
627c478bd9Sstevel@tonic-gate 		}
637c478bd9Sstevel@tonic-gate 
647c478bd9Sstevel@tonic-gate <INITIAL>cancel	{
657c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
667c478bd9Sstevel@tonic-gate 			state = TSTATE;
677c478bd9Sstevel@tonic-gate 			return CANCEL;
687c478bd9Sstevel@tonic-gate 		}
697c478bd9Sstevel@tonic-gate 
707c478bd9Sstevel@tonic-gate <INITIAL>commit	{
717c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
727c478bd9Sstevel@tonic-gate 			state = TSTATE;
737c478bd9Sstevel@tonic-gate 			return COMMIT;
747c478bd9Sstevel@tonic-gate 		}
757c478bd9Sstevel@tonic-gate 
767c478bd9Sstevel@tonic-gate <INITIAL>create	{
777c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
787c478bd9Sstevel@tonic-gate 			state = TSTATE;
797c478bd9Sstevel@tonic-gate 			return CREATE;
807c478bd9Sstevel@tonic-gate 		}
817c478bd9Sstevel@tonic-gate 
827c478bd9Sstevel@tonic-gate <INITIAL>delete {
837c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
847c478bd9Sstevel@tonic-gate 			state = TSTATE;
857c478bd9Sstevel@tonic-gate 			return DELETE;
867c478bd9Sstevel@tonic-gate 		}
877c478bd9Sstevel@tonic-gate 
887c478bd9Sstevel@tonic-gate <INITIAL>end	{
897c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
907c478bd9Sstevel@tonic-gate 			state = TSTATE;
917c478bd9Sstevel@tonic-gate 			return END;
927c478bd9Sstevel@tonic-gate 		}
937c478bd9Sstevel@tonic-gate 
947c478bd9Sstevel@tonic-gate <INITIAL>exit	{
957c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
967c478bd9Sstevel@tonic-gate 			state = TSTATE;
977c478bd9Sstevel@tonic-gate 			return EXIT;
987c478bd9Sstevel@tonic-gate 		}
997c478bd9Sstevel@tonic-gate 
1007c478bd9Sstevel@tonic-gate <INITIAL>export	{
1017c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
1027c478bd9Sstevel@tonic-gate 			state = TSTATE;
1037c478bd9Sstevel@tonic-gate 			return EXPORT;
1047c478bd9Sstevel@tonic-gate 		}
1057c478bd9Sstevel@tonic-gate 
1067c478bd9Sstevel@tonic-gate <INITIAL>"?"|help {
1077c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
1087c478bd9Sstevel@tonic-gate 			state = TSTATE;
1097c478bd9Sstevel@tonic-gate 			return HELP;
1107c478bd9Sstevel@tonic-gate 		}
1117c478bd9Sstevel@tonic-gate 
1127c478bd9Sstevel@tonic-gate <INITIAL>info	{
1137c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
1147c478bd9Sstevel@tonic-gate 			state = TSTATE;
1157c478bd9Sstevel@tonic-gate 			return INFO;
1167c478bd9Sstevel@tonic-gate 		}
1177c478bd9Sstevel@tonic-gate 
1187c478bd9Sstevel@tonic-gate <INITIAL>remove	{
1197c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
1207c478bd9Sstevel@tonic-gate 			state = TSTATE;
1217c478bd9Sstevel@tonic-gate 			return REMOVE;
1227c478bd9Sstevel@tonic-gate 		}
1237c478bd9Sstevel@tonic-gate 
1247c478bd9Sstevel@tonic-gate <INITIAL>revert	{
1257c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
1267c478bd9Sstevel@tonic-gate 			state = TSTATE;
1277c478bd9Sstevel@tonic-gate 			return REVERT;
1287c478bd9Sstevel@tonic-gate 		}
1297c478bd9Sstevel@tonic-gate 
1307c478bd9Sstevel@tonic-gate <INITIAL>select {
1317c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
1327c478bd9Sstevel@tonic-gate 			state = TSTATE;
1337c478bd9Sstevel@tonic-gate 			return SELECT;
1347c478bd9Sstevel@tonic-gate 		}
1357c478bd9Sstevel@tonic-gate 
1367c478bd9Sstevel@tonic-gate <INITIAL>set {
1377c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
1387c478bd9Sstevel@tonic-gate 			state = TSTATE;
1397c478bd9Sstevel@tonic-gate 			return SET;
1407c478bd9Sstevel@tonic-gate 		}
1417c478bd9Sstevel@tonic-gate 
1420209230bSgjelinek <INITIAL>clear {
1430209230bSgjelinek 			BEGIN TSTATE;
1440209230bSgjelinek 			state = TSTATE;
1450209230bSgjelinek 			return CLEAR;
1460209230bSgjelinek 		}
1470209230bSgjelinek 
1487c478bd9Sstevel@tonic-gate <INITIAL>verify	{
1497c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
1507c478bd9Sstevel@tonic-gate 			state = TSTATE;
1517c478bd9Sstevel@tonic-gate 			return VERIFY;
1527c478bd9Sstevel@tonic-gate 		}
1537c478bd9Sstevel@tonic-gate 
1547c478bd9Sstevel@tonic-gate <TSTATE>net	{ return NET; }
1557c478bd9Sstevel@tonic-gate 
1567c478bd9Sstevel@tonic-gate <TSTATE>fs	{ return FS; }
1577c478bd9Sstevel@tonic-gate 
1587c478bd9Sstevel@tonic-gate <TSTATE>inherit-pkg-dir	{ return IPD; }
1597c478bd9Sstevel@tonic-gate 
1607c478bd9Sstevel@tonic-gate <TSTATE>device	{ return DEVICE; }
1617c478bd9Sstevel@tonic-gate 
1627c478bd9Sstevel@tonic-gate <TSTATE>rctl	{ return RCTL; }
1637c478bd9Sstevel@tonic-gate 
1647c478bd9Sstevel@tonic-gate <TSTATE>attr	{ return ATTR; }
1657c478bd9Sstevel@tonic-gate 
166cb8a054bSGlenn Faden <TSTATE>admin	{ return ADMIN; }
167cb8a054bSGlenn Faden 
168087719fdSdp <TSTATE>zonename	{ return ZONENAME; }
169087719fdSdp <CSTATE>zonename	{ return ZONENAME; }
170087719fdSdp 
171fa9e4066Sahrens <TSTATE>dataset	{ return DATASET; }
172fa9e4066Sahrens 
1730209230bSgjelinek <TSTATE>dedicated-cpu	{ return PSET; }
1740209230bSgjelinek 
175c97ad5cdSakolb <TSTATE>capped-cpu	{ return PCAP; }
176c97ad5cdSakolb 
1770209230bSgjelinek <TSTATE>capped-memory	{ return MCAP; }
1780209230bSgjelinek 
1797c478bd9Sstevel@tonic-gate <TSTATE>zonepath	{ return ZONEPATH; }
1807c478bd9Sstevel@tonic-gate <CSTATE>zonepath	{ return ZONEPATH; }
1817c478bd9Sstevel@tonic-gate 
1829acbbeafSnn35248 <TSTATE>brand	{ return BRAND; }
1839acbbeafSnn35248 <CSTATE>brand	{ return BRAND; }
1849acbbeafSnn35248 
1857c478bd9Sstevel@tonic-gate <TSTATE>autoboot	{ return AUTOBOOT; }
1867c478bd9Sstevel@tonic-gate <CSTATE>autoboot	{ return AUTOBOOT; }
1877c478bd9Sstevel@tonic-gate 
188f4b3ec61Sdh155122 <TSTATE>ip-type		{ return IPTYPE; }
189f4b3ec61Sdh155122 <CSTATE>ip-type		{ return IPTYPE; }
190f4b3ec61Sdh155122 
1917c478bd9Sstevel@tonic-gate <TSTATE>pool	{ return POOL; }
1927c478bd9Sstevel@tonic-gate <CSTATE>pool	{ return POOL; }
1937c478bd9Sstevel@tonic-gate 
194ffbafc53Scomay <TSTATE>limitpriv	{ return LIMITPRIV; }
195ffbafc53Scomay <CSTATE>limitpriv	{ return LIMITPRIV; }
196ffbafc53Scomay 
1973f2f09c1Sdp <TSTATE>bootargs	{ return BOOTARGS; }
1983f2f09c1Sdp <CSTATE>bootargs	{ return BOOTARGS; }
1993f2f09c1Sdp 
2007c478bd9Sstevel@tonic-gate <TSTATE>type	{ return TYPE; }
2017c478bd9Sstevel@tonic-gate <CSTATE>type	{ return TYPE; }
2027c478bd9Sstevel@tonic-gate 
2037c478bd9Sstevel@tonic-gate <TSTATE>value	{ return VALUE; }
2047c478bd9Sstevel@tonic-gate <CSTATE>value	{ return VALUE; }
2057c478bd9Sstevel@tonic-gate 
2067c478bd9Sstevel@tonic-gate <TSTATE>options	{ return OPTIONS; }
2077c478bd9Sstevel@tonic-gate <CSTATE>options	{ return OPTIONS; }
2087c478bd9Sstevel@tonic-gate 
2097c478bd9Sstevel@tonic-gate <TSTATE>address	{ return ADDRESS; }
2107c478bd9Sstevel@tonic-gate <CSTATE>address	{ return ADDRESS; }
2117c478bd9Sstevel@tonic-gate 
2127c478bd9Sstevel@tonic-gate <TSTATE>physical	{ return PHYSICAL; }
2137c478bd9Sstevel@tonic-gate <CSTATE>physical	{ return PHYSICAL; }
2147c478bd9Sstevel@tonic-gate 
215de860bd9Sgfaden <TSTATE>defrouter	{ return DEFROUTER; }
216de860bd9Sgfaden <CSTATE>defrouter	{ return DEFROUTER; }
217de860bd9Sgfaden 
2187c478bd9Sstevel@tonic-gate <TSTATE>dir	{ return DIR; }
2197c478bd9Sstevel@tonic-gate <CSTATE>dir	{ return DIR; }
2207c478bd9Sstevel@tonic-gate 
2217c478bd9Sstevel@tonic-gate <TSTATE>special	{ return SPECIAL; }
2227c478bd9Sstevel@tonic-gate <CSTATE>special	{ return SPECIAL; }
2237c478bd9Sstevel@tonic-gate 
2247c478bd9Sstevel@tonic-gate <TSTATE>raw	{ return RAW; }
2257c478bd9Sstevel@tonic-gate <CSTATE>raw	{ return RAW; }
2267c478bd9Sstevel@tonic-gate 
2277c478bd9Sstevel@tonic-gate <TSTATE>name	{ return NAME; }
2287c478bd9Sstevel@tonic-gate <CSTATE>name	{ return NAME; }
2297c478bd9Sstevel@tonic-gate 
2307c478bd9Sstevel@tonic-gate <TSTATE>match	{ return MATCH; }
2317c478bd9Sstevel@tonic-gate <CSTATE>match	{ return MATCH; }
2327c478bd9Sstevel@tonic-gate 
2337c478bd9Sstevel@tonic-gate <TSTATE>priv	{ return PRIV; }
2347c478bd9Sstevel@tonic-gate <CSTATE>priv	{ return PRIV; }
2357c478bd9Sstevel@tonic-gate 
2367c478bd9Sstevel@tonic-gate <TSTATE>limit	{ return LIMIT; }
2377c478bd9Sstevel@tonic-gate <CSTATE>limit	{ return LIMIT; }
2387c478bd9Sstevel@tonic-gate 
2397c478bd9Sstevel@tonic-gate <TSTATE>action	{ return ACTION; }
2407c478bd9Sstevel@tonic-gate <CSTATE>action	{ return ACTION; }
2417c478bd9Sstevel@tonic-gate 
2420209230bSgjelinek <TSTATE>ncpus	{ return NCPUS; }
2430209230bSgjelinek <CSTATE>ncpus	{ return NCPUS; }
2440209230bSgjelinek 
2450209230bSgjelinek <TSTATE>locked	{ return LOCKED; }
2460209230bSgjelinek <CSTATE>locked	{ return LOCKED; }
2470209230bSgjelinek 
2480209230bSgjelinek <TSTATE>swap	{ return SWAP; }
2490209230bSgjelinek <CSTATE>swap	{ return SWAP; }
2500209230bSgjelinek 
2510209230bSgjelinek <TSTATE>importance	{ return IMPORTANCE; }
2520209230bSgjelinek <CSTATE>importance	{ return IMPORTANCE; }
2530209230bSgjelinek 
2540209230bSgjelinek <TSTATE>cpu-shares	{ return SHARES; }
2550209230bSgjelinek <CSTATE>cpu-shares	{ return SHARES; }
2560209230bSgjelinek 
2570209230bSgjelinek <TSTATE>max-lwps	{ return MAXLWPS; }
2580209230bSgjelinek <CSTATE>max-lwps	{ return MAXLWPS; }
2590209230bSgjelinek 
2600209230bSgjelinek <TSTATE>max-shm-memory	{ return MAXSHMMEM; }
2610209230bSgjelinek <CSTATE>max-shm-memory	{ return MAXSHMMEM; }
2620209230bSgjelinek 
2630209230bSgjelinek <TSTATE>max-shm-ids	{ return MAXSHMIDS; }
2640209230bSgjelinek <CSTATE>max-shm-ids	{ return MAXSHMIDS; }
2650209230bSgjelinek 
2660209230bSgjelinek <TSTATE>max-msg-ids	{ return MAXMSGIDS; }
2670209230bSgjelinek <CSTATE>max-msg-ids	{ return MAXMSGIDS; }
2680209230bSgjelinek 
2690209230bSgjelinek <TSTATE>max-sem-ids	{ return MAXSEMIDS; }
2700209230bSgjelinek <CSTATE>max-sem-ids	{ return MAXSEMIDS; }
2710209230bSgjelinek 
2720209230bSgjelinek <TSTATE>scheduling-class	{ return SCHED; }
2730209230bSgjelinek <CSTATE>scheduling-class	{ return SCHED; }
2740209230bSgjelinek 
2755679c89fSjv227347 <TSTATE>hostid		{ return HOSTID; }
2765679c89fSjv227347 <CSTATE>hostid		{ return HOSTID; }
2775679c89fSjv227347 
278cb8a054bSGlenn Faden <TSTATE>user	{ return USER; }
279cb8a054bSGlenn Faden <CSTATE>user	{ return USER; }
280cb8a054bSGlenn Faden 
281cb8a054bSGlenn Faden <TSTATE>auths	{ return AUTHS; }
282cb8a054bSGlenn Faden <CSTATE>auths	{ return AUTHS; }
283cb8a054bSGlenn Faden 
284*0fbb751dSJohn Levon <TSTATE>fs-allowed	{ return FS_ALLOWED; }
285*0fbb751dSJohn Levon <CSTATE>fs-allowed	{ return FS_ALLOWED; }
286*0fbb751dSJohn Levon 
2877c478bd9Sstevel@tonic-gate <TSTATE>=	{ return EQUAL; }
2887c478bd9Sstevel@tonic-gate <LSTATE>=	{ return EQUAL; }
2897c478bd9Sstevel@tonic-gate <CSTATE>=	{ return EQUAL; }
2907c478bd9Sstevel@tonic-gate 
2917c478bd9Sstevel@tonic-gate <TSTATE>"["	{
2927c478bd9Sstevel@tonic-gate 			BEGIN LSTATE;
2937c478bd9Sstevel@tonic-gate 			state = LSTATE;
2947c478bd9Sstevel@tonic-gate 			return OPEN_SQ_BRACKET;
2957c478bd9Sstevel@tonic-gate 		}
2967c478bd9Sstevel@tonic-gate 
2977c478bd9Sstevel@tonic-gate <LSTATE>"]"	{
2987c478bd9Sstevel@tonic-gate 			BEGIN TSTATE;
2997c478bd9Sstevel@tonic-gate 			state = TSTATE;
3007c478bd9Sstevel@tonic-gate 			return CLOSE_SQ_BRACKET;
3017c478bd9Sstevel@tonic-gate 		}
3027c478bd9Sstevel@tonic-gate 
3037c478bd9Sstevel@tonic-gate <TSTATE>"("	{
3047c478bd9Sstevel@tonic-gate 			BEGIN CSTATE;
3057c478bd9Sstevel@tonic-gate 			return OPEN_PAREN;
3067c478bd9Sstevel@tonic-gate 		}
3077c478bd9Sstevel@tonic-gate 
3087c478bd9Sstevel@tonic-gate <LSTATE>"("	{
3097c478bd9Sstevel@tonic-gate 			BEGIN CSTATE;
3107c478bd9Sstevel@tonic-gate 			return OPEN_PAREN;
3117c478bd9Sstevel@tonic-gate 		}
3127c478bd9Sstevel@tonic-gate 
3137c478bd9Sstevel@tonic-gate <CSTATE>")"	{
3147c478bd9Sstevel@tonic-gate 			BEGIN state;
3157c478bd9Sstevel@tonic-gate 			return CLOSE_PAREN;
3167c478bd9Sstevel@tonic-gate 		}
3177c478bd9Sstevel@tonic-gate 
3187c478bd9Sstevel@tonic-gate <LSTATE>","	{ return COMMA; }
3197c478bd9Sstevel@tonic-gate <CSTATE>","	{ return COMMA; }
3207c478bd9Sstevel@tonic-gate 
3217c478bd9Sstevel@tonic-gate <TSTATE>[^ \t\n\";=\[\]\(\)]+	{
3227c478bd9Sstevel@tonic-gate 			yylval.strval = safe_strdup(yytext);
3237c478bd9Sstevel@tonic-gate 			return TOKEN;
3247c478bd9Sstevel@tonic-gate 		}
3257c478bd9Sstevel@tonic-gate 
3267c478bd9Sstevel@tonic-gate <LSTATE>[^ \t\n\",;=\[\]\(\)]+	{
3277c478bd9Sstevel@tonic-gate 			yylval.strval = safe_strdup(yytext);
3287c478bd9Sstevel@tonic-gate 			return TOKEN;
3297c478bd9Sstevel@tonic-gate 		}
3307c478bd9Sstevel@tonic-gate 
3317c478bd9Sstevel@tonic-gate <CSTATE>[^ \t\n\",;=\(\)]+	{
3327c478bd9Sstevel@tonic-gate 			yylval.strval = safe_strdup(yytext);
3337c478bd9Sstevel@tonic-gate 			return TOKEN;
3347c478bd9Sstevel@tonic-gate 		}
3357c478bd9Sstevel@tonic-gate 
3367c478bd9Sstevel@tonic-gate <TSTATE>\"[^\"\n]*[\"\n] {
3377c478bd9Sstevel@tonic-gate 			yylval.strval = safe_strdup(yytext + 1);
3387c478bd9Sstevel@tonic-gate 			if (yylval.strval[yyleng - 2] == '"')
3397c478bd9Sstevel@tonic-gate 				yylval.strval[yyleng - 2] = 0;
3407c478bd9Sstevel@tonic-gate 			return TOKEN;
3417c478bd9Sstevel@tonic-gate 		}
3427c478bd9Sstevel@tonic-gate 
3437c478bd9Sstevel@tonic-gate <LSTATE>\"[^\"\n]*[\"\n] {
3447c478bd9Sstevel@tonic-gate 			yylval.strval = safe_strdup(yytext + 1);
3457c478bd9Sstevel@tonic-gate 			if (yylval.strval[yyleng - 2] == '"')
3467c478bd9Sstevel@tonic-gate 				yylval.strval[yyleng - 2] = 0;
3477c478bd9Sstevel@tonic-gate 			return TOKEN;
3487c478bd9Sstevel@tonic-gate 		}
3497c478bd9Sstevel@tonic-gate 
3507c478bd9Sstevel@tonic-gate ";"		{
3517c478bd9Sstevel@tonic-gate 			BEGIN INITIAL;
3527c478bd9Sstevel@tonic-gate 			return (yytext[0]);
3537c478bd9Sstevel@tonic-gate 		}
3547c478bd9Sstevel@tonic-gate 
3557c478bd9Sstevel@tonic-gate \n		{
3567c478bd9Sstevel@tonic-gate 			lex_lineno++;
3577c478bd9Sstevel@tonic-gate 			BEGIN INITIAL;
3587c478bd9Sstevel@tonic-gate 			return (yytext[0]);
3597c478bd9Sstevel@tonic-gate 		}
3607c478bd9Sstevel@tonic-gate 
3617c478bd9Sstevel@tonic-gate [ \t]		;	/* Ignore whitespace */
3627c478bd9Sstevel@tonic-gate 
3637c478bd9Sstevel@tonic-gate .		{
3647c478bd9Sstevel@tonic-gate 			return (yytext[0]);
3657c478bd9Sstevel@tonic-gate 		}
3667c478bd9Sstevel@tonic-gate 
3677c478bd9Sstevel@tonic-gate %%
3687c478bd9Sstevel@tonic-gate 
3697c478bd9Sstevel@tonic-gate char *
3707c478bd9Sstevel@tonic-gate safe_strdup(char *s)
3717c478bd9Sstevel@tonic-gate {
3727c478bd9Sstevel@tonic-gate 	char *result;
3737c478bd9Sstevel@tonic-gate 
3747c478bd9Sstevel@tonic-gate 	if ((result = strdup(s)) == NULL) {
3757c478bd9Sstevel@tonic-gate 		yyerror("Out of memory");
3767c478bd9Sstevel@tonic-gate 		exit(Z_ERR);
3777c478bd9Sstevel@tonic-gate 	}
3787c478bd9Sstevel@tonic-gate 	return (result);
3797c478bd9Sstevel@tonic-gate }
3807c478bd9Sstevel@tonic-gate 
3817c478bd9Sstevel@tonic-gate void
3827c478bd9Sstevel@tonic-gate yyerror(char *s)
3837c478bd9Sstevel@tonic-gate {
3847c478bd9Sstevel@tonic-gate 	/* feof(yyin) is not an error; anything else is, so we set saw_error */
3857c478bd9Sstevel@tonic-gate 	if (yytext[0] == '\0') {
3867c478bd9Sstevel@tonic-gate 		if (!feof(yyin)) {
387bbec428eSgjelinek 			saw_error = B_TRUE;
3887c478bd9Sstevel@tonic-gate 			(void) fprintf(stderr, gettext("%s, token expected\n"),
3897c478bd9Sstevel@tonic-gate 			    s);
3907c478bd9Sstevel@tonic-gate 		}
3917c478bd9Sstevel@tonic-gate 		return;
3927c478bd9Sstevel@tonic-gate 	}
3937c478bd9Sstevel@tonic-gate 
394bbec428eSgjelinek 	saw_error = B_TRUE;
3957c478bd9Sstevel@tonic-gate 	if (cmd_file_mode)
3967c478bd9Sstevel@tonic-gate 		(void) fprintf(stderr, gettext("%s on line %d at '%s'\n"), s,
3977c478bd9Sstevel@tonic-gate 		    lex_lineno, (yytext[0] == '\n') ? "\\n" : yytext);
3987c478bd9Sstevel@tonic-gate 	else
3997c478bd9Sstevel@tonic-gate 		(void) fprintf(stderr, gettext("%s at '%s'\n"), s,
4007c478bd9Sstevel@tonic-gate 		    (yytext[0] == '\n') ? "\\n" : yytext);
401bbec428eSgjelinek 	usage(B_FALSE, HELP_SUBCMDS);
4027c478bd9Sstevel@tonic-gate }
403