Blame lib/master_tok.l

Packit Service a4b2a9
%{
Packit Service a4b2a9
/* ----------------------------------------------------------------------- *
Packit Service a4b2a9
 *   
Packit Service a4b2a9
 *  master_tok.l - master map tokenizer.
Packit Service a4b2a9
 *
Packit Service a4b2a9
 *   Copyright 2006 Ian Kent <raven@themaw.net>
Packit Service a4b2a9
 *
Packit Service a4b2a9
 *   This program is free software; you can redistribute it and/or modify
Packit Service a4b2a9
 *   it under the terms of the GNU General Public License as published by
Packit Service a4b2a9
 *   the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
Packit Service a4b2a9
 *   USA; either version 2 of the License, or (at your option) any later
Packit Service a4b2a9
 *   version.
Packit Service a4b2a9
 *   
Packit Service a4b2a9
 *   This program is distributed in the hope that it will be useful,
Packit Service a4b2a9
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service a4b2a9
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service a4b2a9
 *   GNU General Public License for more details.
Packit Service a4b2a9
 *
Packit Service a4b2a9
 * ----------------------------------------------------------------------- */
Packit Service a4b2a9
Packit Service a4b2a9
#ifdef ECHO
Packit Service a4b2a9
# undef ECHO
Packit Service a4b2a9
#endif /* ECHO */
Packit Service a4b2a9
static void master_echo(void);	/* forward definition */
Packit Service a4b2a9
#define ECHO master_echo()
Packit Service a4b2a9
Packit Service a4b2a9
#include <stdio.h>
Packit Service a4b2a9
#include <stdlib.h>
Packit Service a4b2a9
#include <string.h>
Packit Service a4b2a9
#include <ctype.h>
Packit Service a4b2a9
#include "master_parse.tab.h"
Packit Service a4b2a9
Packit Service a4b2a9
/*
Packit Service a4b2a9
 * There are some things that need to be defined only if useing GNU flex.
Packit Service a4b2a9
 * These must not be defined if using standard lex
Packit Service a4b2a9
 */
Packit Service a4b2a9
#ifdef FLEX_SCANNER
Packit Service a4b2a9
int master_lineno;
Packit Service a4b2a9
#endif
Packit Service a4b2a9
Packit Service a4b2a9
int master_lex(void);
Packit Service a4b2a9
int master_wrap(void);
Packit Service a4b2a9
Packit Service a4b2a9
/* no need for yywrap() */
Packit Service a4b2a9
#define YY_SKIP_YYWRAP
Packit Service a4b2a9
Packit Service a4b2a9
#ifndef YY_STACK_USED
Packit Service a4b2a9
#define YY_STACK_USED 0
Packit Service a4b2a9
#endif
Packit Service a4b2a9
#ifndef YY_ALWAYS_INTERACTIVE
Packit Service a4b2a9
#define YY_ALWAYS_INTERACTIVE 0
Packit Service a4b2a9
#endif
Packit Service a4b2a9
#ifndef YY_NEVER_INTERACTIVE
Packit Service a4b2a9
#define YY_NEVER_INTERACTIVE 0
Packit Service a4b2a9
#endif
Packit Service a4b2a9
#ifndef YY_MAIN
Packit Service a4b2a9
#define YY_MAIN 0
Packit Service a4b2a9
#endif
Packit Service a4b2a9
Packit Service a4b2a9
void master_set_scan_buffer(const char *);
Packit Service a4b2a9
const char *line = NULL;
Packit Service a4b2a9
Packit Service a4b2a9
#ifdef FLEX_SCANNER
Packit Service a4b2a9
const char *line_pos = NULL;
Packit Service a4b2a9
const char *line_lim = NULL;
Packit Service a4b2a9
int my_yyinput(char *, int);
Packit Service a4b2a9
Packit Service a4b2a9
#undef YY_INPUT
Packit Service a4b2a9
#define YY_INPUT(b, r, ms) (r = my_yyinput(b, ms))
Packit Service a4b2a9
#else
Packit Service a4b2a9
#undef input
Packit Service a4b2a9
#undef unput
Packit Service a4b2a9
#define input()  (*(char *) line++)
Packit Service a4b2a9
#define unput(c) (*(char *) --line = c)
Packit Service a4b2a9
#endif
Packit Service a4b2a9
Packit Service a4b2a9
#define BUFF_LEN	1024
Packit Service a4b2a9
char buff[BUFF_LEN];
Packit Service a4b2a9
char *bptr;
Packit Service a4b2a9
char *optr = buff;
Packit Service a4b2a9
unsigned int tlen;
Packit Service a4b2a9
Packit Service a4b2a9
%}
Packit Service a4b2a9
Packit Service a4b2a9
%option nounput
Packit Service a4b2a9
Packit Service a4b2a9
%x PATHSTR MAPSTR DNSTR OPTSTR OCTAL
Packit Service a4b2a9
Packit Service a4b2a9
WS		[[:blank:]]+
Packit Service a4b2a9
OPTWS		[[:blank:]]*
Packit Service a4b2a9
NL		\r?\n
Packit Service a4b2a9
CONT		\\\n{OPTWS}
Packit Service a4b2a9
Packit Service a4b2a9
OPTIONSTR	([\-]?([[:alpha:]_]([[:alnum:]_\-])*(=(\"?([[:alnum:]_\-\:\.])+\"?))?)+)
Packit Service a4b2a9
MACROSTR	(-D{OPTWS}([[:alpha:]_]([[:alnum:]_\-\.])*)=([[:alnum:]_\-\.])+)
Packit Service a4b2a9
SLASHIFYSTR	(--(no-)?slashify-colons)
Packit Service a4b2a9
NUMBER		[0-9]+
Packit Service a4b2a9
OCTALNUMBER	[0-7]+
Packit Service a4b2a9
Packit Service a4b2a9
DNSERVSTR1	([[:alpha:]][[:alnum:]\-.]*(:[0-9]+)?:)
Packit Service a4b2a9
DNSERVSTR2	(\[([[:xdigit:]]:.)+\](:[0-9]+)?:)
Packit Service a4b2a9
DNSERVSTR3	(\/\/[[:alpha:]][[:alnum:]\-.]*(:[0-9]+)?\/)
Packit Service a4b2a9
DNSERVSTR4	(\/\/\[([[:xdigit:]]:.)+\](:[0-9]+)?\/)
Packit Service a4b2a9
DNSERVSTR5	(([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}(:[0-9]+)?:)
Packit Service a4b2a9
DNSERVSTR6	(\/\/([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}(:[0-9]+)?\/)
Packit Service a4b2a9
DNSERVERSTR	({DNSERVSTR1}|{DNSERVSTR2}|{DNSERVSTR3}|{DNSERVSTR4}|{DNSERVSTR5}|{DNSERVSTR6})
Packit Service a4b2a9
Packit Service a4b2a9
AT_CN		([cC][[nN])
Packit Service a4b2a9
AT_NMN		([nN][iI][sS][Mm][aA][pP][Nn][aA][mM][eE])
Packit Service a4b2a9
AT_AMN		([aA][uU][tT][oO][mM][oO][uU][nN][tT][Mm][aA][pP][Nn][aA][mM][eE])
Packit Service a4b2a9
AT_OU		([oO][[uU])
Packit Service a4b2a9
AT_DC		([dD][[cC])
Packit Service a4b2a9
AT_O		([oO])
Packit Service a4b2a9
AT_C		([cC])
Packit Service a4b2a9
AT_L		([lL])
Packit Service a4b2a9
DNATTRSTR	({AT_CN}|{AT_NMN}|{AT_AMN}|{AT_OU}|{AT_DC}|{AT_O}|{AT_C}|{AT_L})
Packit Service a4b2a9
DNNAMESTR1	([[:alnum:]_.\- ]+)
Packit Service a4b2a9
DNNAMESTR2	([[:alnum:]_.\-]+)
Packit Service a4b2a9
Packit Service a4b2a9
INTMAP		(-hosts|-null)
Packit Service a4b2a9
MULTI		((multi)(,(sun|hesiod))?(:{OPTWS}|{WS}))
Packit Service a4b2a9
MULTISEP	([\-]{2}[[:blank:]]+)
Packit Service a4b2a9
MTYPE		((file|program|exec|sss|yp|nis|nisplus|ldap|ldaps|hesiod|userdir)(,(sun|hesiod|amd))?(:{OPTWS}|{WS}))
Packit Service a4b2a9
Packit Service a4b2a9
Packit Service a4b2a9
OPTTOUT		(-t{OPTWS}|-t{OPTWS}={OPTWS}|--timeout{OPTWS}|--timeout{OPTWS}={OPTWS})
Packit Service a4b2a9
OPTNTOUT	(-n{OPTWS}|-n{OPTWS}={OPTWS}|--negative-timeout{OPTWS}|--negative-timeout{OPTWS}={OPTWS})
Packit Service a4b2a9
Packit Service a4b2a9
MODE		(--mode{OPTWS}|--mode{OPTWS}={OPTWS})
Packit Service a4b2a9
Packit Service a4b2a9
%%
Packit Service a4b2a9
Packit Service a4b2a9
<INITIAL>{
Packit Service a4b2a9
	{NL} | 
Packit Service a4b2a9
	\x00 {
Packit Service a4b2a9
		if (optr != buff) {
Packit Service a4b2a9
			*optr = '\0';
Packit Service a4b2a9
			strcpy(master_lval.strtype, buff);
Packit Service a4b2a9
			return NILL;
Packit Service a4b2a9
		}
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	#.*  { return COMMENT; }
Packit Service a4b2a9
Packit Service a4b2a9
	"/" {
Packit Service a4b2a9
		if (optr != buff) {
Packit Service a4b2a9
			*optr = '\0';
Packit Service a4b2a9
			strcpy(master_lval.strtype, buff);
Packit Service a4b2a9
			return NILL;
Packit Service a4b2a9
		}
Packit Service a4b2a9
		BEGIN(PATHSTR);
Packit Service a4b2a9
		bptr = buff;
Packit Service a4b2a9
		yyless(0);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	.    { *optr++ = *master_text; }
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
<PATHSTR>{
Packit Service a4b2a9
	\x00 {
Packit Service a4b2a9
		BEGIN(INITIAL);
Packit Service a4b2a9
		*bptr++ = *master_text;
Packit Service a4b2a9
		strcpy(master_lval.strtype, buff);
Packit Service a4b2a9
		return NILL;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	\\.  { *bptr++ = *(master_text + 1); }
Packit Service a4b2a9
	\"   {
Packit Service a4b2a9
		BEGIN(INITIAL);
Packit Service a4b2a9
		*bptr++ = *master_text;
Packit Service a4b2a9
		*bptr = '\0';
Packit Service a4b2a9
		strcpy(master_lval.strtype, buff);
Packit Service a4b2a9
		return QUOTE;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{WS} {
Packit Service a4b2a9
		BEGIN(MAPSTR);
Packit Service a4b2a9
		*bptr = '\0';
Packit Service a4b2a9
		strcpy(master_lval.strtype, buff);
Packit Service a4b2a9
		bptr = buff;
Packit Service a4b2a9
		memset(buff, 0, BUFF_LEN);
Packit Service a4b2a9
		return(PATH);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	<<EOF>> {
Packit Service a4b2a9
		BEGIN(INITIAL);
Packit Service a4b2a9
		*bptr = '\0';
Packit Service a4b2a9
		strcpy(master_lval.strtype, buff);
Packit Service a4b2a9
		return(PATH);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{NL} {
Packit Service a4b2a9
		BEGIN(INITIAL);
Packit Service a4b2a9
		*bptr = '\0';
Packit Service a4b2a9
		strcpy(master_lval.strtype, buff);
Packit Service a4b2a9
		return PATH;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	.    { *bptr++ = *master_text; }
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
<MAPSTR>{
Packit Service a4b2a9
	{OPTWS}\\\n{OPTWS} {}
Packit Service a4b2a9
Packit Service a4b2a9
	{MULTI} {
Packit Service a4b2a9
		tlen = master_leng - 1;
Packit Service a4b2a9
		if (bptr != buff && isblank(master_text[tlen])) {
Packit Service a4b2a9
			/*
Packit Service a4b2a9
			 * We can't handle unescaped white space in map names
Packit Service a4b2a9
			 * so just eat the white space. We always have the
Packit Service a4b2a9
			 * "multi" at the beginning of the string so the while
Packit Service a4b2a9
			 * will not fall off the end.
Packit Service a4b2a9
			 */
Packit Service a4b2a9
			while (isblank(master_text[tlen - 1]))
Packit Service a4b2a9
				tlen--;
Packit Service a4b2a9
			strncat(buff, master_text, tlen);
Packit Service a4b2a9
			bptr += tlen;
Packit Service a4b2a9
			yyless(tlen);
Packit Service a4b2a9
		} else {
Packit Service a4b2a9
			strcpy(master_lval.strtype, master_text);
Packit Service a4b2a9
			return(MULTITYPE);
Packit Service a4b2a9
		}
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{MTYPE} |
Packit Service a4b2a9
	{MTYPE}/{DNSERVERSTR}{DNATTRSTR}= |
Packit Service a4b2a9
	{MTYPE}/{DNATTRSTR}= {
Packit Service a4b2a9
		tlen = master_leng - 1;
Packit Service a4b2a9
		if (bptr != buff && isblank(master_text[tlen])) {
Packit Service a4b2a9
			/*
Packit Service a4b2a9
			 * We can't handle unescaped white space in map names
Packit Service a4b2a9
			 * so just eat the white space. We always have the
Packit Service a4b2a9
			 * maptype keyword at the beginning of the string so
Packit Service a4b2a9
			 * the while will not fall off the end.
Packit Service a4b2a9
			 */
Packit Service a4b2a9
			while (isblank(master_text[tlen - 1]))
Packit Service a4b2a9
				tlen--;
Packit Service a4b2a9
			strncat(buff, master_text, tlen);
Packit Service a4b2a9
			bptr += tlen;
Packit Service a4b2a9
			yyless(tlen);
Packit Service a4b2a9
		} else {
Packit Service a4b2a9
			strcpy(master_lval.strtype, master_text);
Packit Service a4b2a9
			return(MAPTYPE);
Packit Service a4b2a9
		}
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{MULTISEP} { return(DDASH); }
Packit Service a4b2a9
Packit Service a4b2a9
	":"	{ return(COLON); }
Packit Service a4b2a9
Packit Service a4b2a9
	"-hosts" {
Packit Service a4b2a9
		BEGIN(OPTSTR);
Packit Service a4b2a9
		strcpy(master_lval.strtype, master_text);
Packit Service a4b2a9
		return MAPHOSTS;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	"-null" {
Packit Service a4b2a9
		BEGIN(OPTSTR);
Packit Service a4b2a9
		strcpy(master_lval.strtype, master_text);
Packit Service a4b2a9
		return MAPNULL;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	"-xfn" {
Packit Service a4b2a9
		/*
Packit Service a4b2a9
		 * The X/Open Federated Naming service isn't supported
Packit Service a4b2a9
		 * and the parser will call YYABORT() when it sees the
Packit Service a4b2a9
		 * MAPXFN token so we must set the start state to the
Packit Service a4b2a9
		 * INITIAL state here for the next yylex() call.
Packit Service a4b2a9
		 */
Packit Service a4b2a9
		BEGIN(INITIAL);
Packit Service a4b2a9
		strcpy(master_lval.strtype, master_text);
Packit Service a4b2a9
		return MAPXFN;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	"//" {
Packit Service a4b2a9
		BEGIN(DNSTR);
Packit Service a4b2a9
		yyless(0);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{DNSERVERSTR}{DNATTRSTR}= {
Packit Service a4b2a9
		BEGIN(DNSTR);
Packit Service a4b2a9
		yyless(0);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{DNATTRSTR}= {
Packit Service a4b2a9
		BEGIN(DNSTR);
Packit Service a4b2a9
		yyless(0);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{OPTWS}/{NL} {
Packit Service a4b2a9
		BEGIN(INITIAL);
Packit Service a4b2a9
		*bptr = '\0';
Packit Service a4b2a9
		strcpy(master_lval.strtype, buff);
Packit Service a4b2a9
		bptr = buff;
Packit Service a4b2a9
		return(MAPNAME);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	\\. { *bptr++ = *(master_text + 1); }
Packit Service a4b2a9
Packit Service a4b2a9
	{WS} {
Packit Service a4b2a9
		BEGIN(OPTSTR);
Packit Service a4b2a9
		*bptr = '\0';
Packit Service a4b2a9
		strcpy(master_lval.strtype, buff);
Packit Service a4b2a9
		bptr = buff;
Packit Service a4b2a9
		return(MAPNAME);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{NL} |
Packit Service a4b2a9
	\x00 {
Packit Service a4b2a9
		BEGIN(INITIAL);
Packit Service a4b2a9
		*bptr = '\0';
Packit Service a4b2a9
		strcpy(master_lval.strtype, buff);
Packit Service a4b2a9
		return(MAPNAME);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	<<EOF>> {
Packit Service a4b2a9
		BEGIN(INITIAL);
Packit Service a4b2a9
		*bptr = '\0';
Packit Service a4b2a9
		strcpy(master_lval.strtype, buff);
Packit Service a4b2a9
		return(MAPNAME);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	.	{ *bptr++ = *master_text; }
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
<DNSTR>{
Packit Service a4b2a9
	{OPTWS}\\\n{OPTWS} {}
Packit Service a4b2a9
Packit Service a4b2a9
	{DNSERVERSTR} {
Packit Service a4b2a9
		strcpy(master_lval.strtype, master_text);
Packit Service a4b2a9
		return DNSERVER;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{DNATTRSTR}/"=" {
Packit Service a4b2a9
		strcpy(master_lval.strtype, master_text);
Packit Service a4b2a9
		return DNATTR;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	"=" {
Packit Service a4b2a9
		return EQUAL;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{DNNAMESTR1}/","{DNATTRSTR}"=" {
Packit Service a4b2a9
		strcpy(master_lval.strtype, master_text);
Packit Service a4b2a9
		return DNNAME;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{DNNAMESTR2} {
Packit Service a4b2a9
		strcpy(master_lval.strtype, master_text);
Packit Service a4b2a9
		return DNNAME;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{OPTWS}","{OPTWS} {
Packit Service a4b2a9
		return COMMA;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{WS}"=" |
Packit Service a4b2a9
	"="{WS} {
Packit Service a4b2a9
		BEGIN(INITIAL);
Packit Service a4b2a9
		strcpy(master_lval.strtype, master_text);
Packit Service a4b2a9
		return SPACE;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{WS}    { BEGIN(OPTSTR); }
Packit Service a4b2a9
Packit Service a4b2a9
	{NL} |
Packit Service a4b2a9
	\x00	{ BEGIN(INITIAL); }
Packit Service a4b2a9
Packit Service a4b2a9
	<<EOF>> { BEGIN(INITIAL); }
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
<OPTSTR>{
Packit Service a4b2a9
	{OPTWS}\\\n{OPTWS} {}
Packit Service a4b2a9
Packit Service a4b2a9
	{MULTISEP} {
Packit Service a4b2a9
		BEGIN(MAPSTR);
Packit Service a4b2a9
		return(DDASH);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{OPTTOUT}/{NUMBER} { return(OPT_TIMEOUT); }
Packit Service a4b2a9
Packit Service a4b2a9
	{OPTNTOUT}/{NUMBER} { return(OPT_NTIMEOUT); }
Packit Service a4b2a9
Packit Service a4b2a9
	{NUMBER} {
Packit Service a4b2a9
		master_lval.longtype = atol(master_text);
Packit Service a4b2a9
		return(NUMBER);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	-?symlink		{ return(OPT_SYMLINK); }
Packit Service a4b2a9
	-?nobind		{ return(OPT_NOBIND); }
Packit Service a4b2a9
	-?nobrowse		{ return(OPT_NOGHOST); }
Packit Service 10deab
	-?slave			{ return(OPT_SLAVE); }
Packit Service 10deab
	-?private		{ return(OPT_PRIVATE); }
Packit Service 3ba11c
	-?strictexpire		{ return(OPT_STRICTEXPIRE); }
Packit Service a4b2a9
	-g|--ghost|-?browse	{ return(OPT_GHOST); }
Packit Service a4b2a9
	-v|--verbose		{ return(OPT_VERBOSE); }
Packit Service a4b2a9
	-d|--debug		{ return(OPT_DEBUG); }
Packit Service a4b2a9
	-w|--use-weight-only	{ return(OPT_USE_WEIGHT); }
Packit Service a4b2a9
	-r|--random-multimount-selection { return(OPT_RANDOM); }
Packit Service a4b2a9
Packit Service a4b2a9
	{MODE}/{OCTALNUMBER} {
Packit Service a4b2a9
		BEGIN(OCTAL);
Packit Service a4b2a9
		return(OPT_MODE);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{OPTWS}","{OPTWS}	{ return(COMMA); }
Packit Service a4b2a9
Packit Service a4b2a9
	{OPTWS} {}
Packit Service a4b2a9
Packit Service a4b2a9
	{SLASHIFYSTR} {
Packit Service a4b2a9
		strcpy(master_lval.strtype, master_text);
Packit Service a4b2a9
		return(OPTION);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{MACROSTR} {
Packit Service a4b2a9
		strcpy(master_lval.strtype, master_text);
Packit Service a4b2a9
		return(OPTION);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{OPTIONSTR} {
Packit Service a4b2a9
		strcpy(master_lval.strtype, master_text);
Packit Service a4b2a9
		return(OPTION);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	"="	{
Packit Service a4b2a9
		strcpy(master_lval.strtype, master_text);
Packit Service a4b2a9
		return(EQUAL);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{WS}	{}
Packit Service a4b2a9
	{NL} |
Packit Service a4b2a9
	\x00 { BEGIN(INITIAL); }
Packit Service a4b2a9
Packit Service a4b2a9
	<<EOF>> { BEGIN(INITIAL); }
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
<OCTAL>{
Packit Service a4b2a9
	{OCTALNUMBER} {
Packit Service a4b2a9
		master_lval.longtype = strtoul(master_text, NULL, 8);
Packit Service a4b2a9
		return(OCTALNUMBER);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	. { BEGIN(OPTSTR); yyless(0); }
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
%%
Packit Service a4b2a9
Packit Service a4b2a9
#include "automount.h"
Packit Service a4b2a9
Packit Service a4b2a9
int master_wrap(void)
Packit Service a4b2a9
{
Packit Service a4b2a9
	return 1;
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
static void master_echo(void)
Packit Service a4b2a9
{
Packit Service a4b2a9
	logmsg("%s", master_text);
Packit Service a4b2a9
	return;
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
#ifdef FLEX_SCANNER
Packit Service a4b2a9
Packit Service a4b2a9
void master_set_scan_buffer(const char *buffer)
Packit Service a4b2a9
{
Packit Service a4b2a9
	memset(buff, 0, sizeof(buff));
Packit Service a4b2a9
	optr = buff;
Packit Service a4b2a9
Packit Service a4b2a9
	YY_FLUSH_BUFFER;
Packit Service a4b2a9
Packit Service a4b2a9
	line = buffer;
Packit Service a4b2a9
	line_pos = &line[0];
Packit Service a4b2a9
	/*
Packit Service a4b2a9
	 * Ensure buffer is 1 greater than string and is zeroed before
Packit Service a4b2a9
	 * the parse so we can fit the extra NULL which allows us to
Packit Service a4b2a9
	 * explicitly match an end of line within the buffer (ie. the
Packit Service a4b2a9
	 * need for 2 NULLS when parsing in memeory buffers).
Packit Service a4b2a9
	 */
Packit Service a4b2a9
	line_lim = line + strlen(buffer) + 1;
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
#ifndef min
Packit Service a4b2a9
#define min(a,b) (((a) < (b)) ? (a) : (b))
Packit Service a4b2a9
#endif
Packit Service a4b2a9
Packit Service a4b2a9
int my_yyinput(char *buffer, int max_size)
Packit Service a4b2a9
{
Packit Service a4b2a9
	int n = min(max_size, line_lim - line_pos);
Packit Service a4b2a9
Packit Service a4b2a9
	if (n > 0) {
Packit Service a4b2a9
		memcpy(buffer, line_pos, n);
Packit Service a4b2a9
		line_pos += n;
Packit Service a4b2a9
	}
Packit Service a4b2a9
	return n;
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
#else
Packit Service a4b2a9
Packit Service a4b2a9
void master_set_scan_buffer(const char *buffer)
Packit Service a4b2a9
{
Packit Service a4b2a9
	line = buffer;
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
#endif