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