Blame modules/amd_tok.l

Packit Service a4b2a9
/* ----------------------------------------------------------------------- *
Packit Service a4b2a9
 *
Packit Service a4b2a9
 *  Copyright 2013 Ian Kent <raven@themaw.net>
Packit Service a4b2a9
 *  Copyright 2013 Red Hat, Inc.
Packit Service a4b2a9
 *  All rights reserved.
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
%s START MAPOPTVAL FSOPTVAL MNTOPTVAL SELOPTVAL SELARGVAL
Packit Service a4b2a9
Packit Service a4b2a9
%{
Packit Service a4b2a9
Packit Service a4b2a9
static int reset_start_state = 0;
Packit Service a4b2a9
Packit Service a4b2a9
#ifdef ECHO
Packit Service a4b2a9
# undef ECHO
Packit Service a4b2a9
#endif
Packit Service a4b2a9
static void amd_echo(void);	/* forward definition */
Packit Service a4b2a9
static void amd_copy_buffer(void);
Packit Service a4b2a9
#define ECHO amd_echo()
Packit Service a4b2a9
int amd_wrap(void);
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 "amd_parse.tab.h"
Packit Service a4b2a9
Packit Service a4b2a9
int amd_lex(void);
Packit Service a4b2a9
int mad_wrap(void);
Packit Service a4b2a9
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 amd_set_scan_buffer(const char *);
Packit Service a4b2a9
static const char *line = NULL;
Packit Service a4b2a9
Packit Service a4b2a9
#ifdef FLEX_SCANNER
Packit Service a4b2a9
static const char *line_pos = NULL;
Packit Service a4b2a9
static const char *line_lim = NULL;
Packit Service a4b2a9
int amd_yyinput(char *, int);
Packit Service a4b2a9
Packit Service a4b2a9
#undef YY_INPUT
Packit Service a4b2a9
#define YY_INPUT(b, r, ms) (r = amd_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
%}
Packit Service a4b2a9
Packit Service a4b2a9
%option nounput
Packit Service a4b2a9
Packit Service a4b2a9
NL		\r?\n
Packit Service a4b2a9
OPTWS		[[:blank:]]*
Packit Service a4b2a9
OTHR		[^!;:=/|\- \t\r\n#]*
Packit Service a4b2a9
Packit Service a4b2a9
V4NUM		([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])
Packit Service a4b2a9
Packit Service a4b2a9
MACRO		(\$\{([[:alpha:]_/]([[:alnum:]_\-])([[:alnum:]_\-/])*)\})
Packit Service a4b2a9
QSTR		(\"([^"\\]|\\.)*\")
Packit Service a4b2a9
OSTR		([[:alpha:]]([[:alnum:]_\-])+)
Packit Service a4b2a9
FSTR		([[:alnum:]_/\.]([[:alnum:]_\-/\+\.]|(\\.))*)
Packit Service a4b2a9
VSTR		(([[:alnum:]_\-\:/\.])+)
Packit Service a4b2a9
SSTR		([[:alpha:]]([[:alnum:]\-\.])+)
Packit Service a4b2a9
IP4ADDR		({V4NUM}\.((({V4NUM}\.){0,2}){V4NUM}?))
Packit Service a4b2a9
V4MASK		({IP4ADDR}|([1-2][0-9]|3[0-2]|[1-9]))
Packit Service a4b2a9
IP6ADDR		((([A-Fa-f0-9]{1,4}\:\:?){1,7}[A-Fa-f0-9]{1,4})|(\:\:1))
Packit Service a4b2a9
V6MASK		(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[1-9])
Packit Service a4b2a9
Packit Service a4b2a9
FOPT		(({QSTR}|{FSTR}|{MACRO})+)
Packit Service a4b2a9
OPTS		({OSTR}(=({VSTR}|{MACRO})+)?)
Packit Service b1bf2e
SOPT		({SSTR}|{QSTR}|{MACRO}(\.|{SSTR}|{QSTR}|{MACRO})+)
Packit Service a4b2a9
NOPT		({SSTR}|(({IP4ADDR}(\/{V4MASK})?)|({IP6ADDR}(\/{V6MASK})?)))
Packit Service a4b2a9
Packit Service a4b2a9
MAPOPT		(fs|type|maptype|pref|sublink|cache)
Packit Service a4b2a9
MNTOPT		(opts|addopts|remopts)
Packit Service a4b2a9
FSOPTS		(rhost|rfs|dev|cachedir|mount|unmount|umount|delay)
Packit Service a4b2a9
CHEOPT		((mapdefault|none|inc|re|regexp|all)(,sync)?)
Packit Service a4b2a9
MAPTYPE		(file|nis|nisplus|ldap|hesiod|exec|ndbm|passwd|union)
Packit Service a4b2a9
FSTYPE_LOCAL	(link|linkx|lofs|ufs|ext2|ext3|ext4|xfs|jfs|cdfs|cachefs)
Packit Service a4b2a9
FSTYPE_NET	(nfs|nfsx|nfsl|host)
Packit Service a4b2a9
FSTYPE		(auto|program|direct|lustre|{FSTYPE_LOCAL}|{FSTYPE_NET})
Packit Service a4b2a9
Packit Service a4b2a9
OSSEL		(arch|karch|os|osver|full_os|vendor)
Packit Service a4b2a9
HSTSEL		(host|hostd|domain|byte|cluster)
Packit Service a4b2a9
NETSEL		(netnumber|network|wire|in_network)
Packit Service a4b2a9
USRSEL		(uid|gid)
Packit Service a4b2a9
MAPSEL		(key|map|path)
Packit Service a4b2a9
OTRSEL		(autodir|dollar)
Packit Service a4b2a9
BOLSEL		(true|false)
Packit Service a4b2a9
Packit Service a4b2a9
SELOPT		({OSSEL}|{HSTSEL}|{USRSEL}|{MAPSEL}|{OTRSEL})
Packit Service a4b2a9
SEL1ARG		(xhost|exists|{NETSEL}|{BOLSEL})
Packit Service a4b2a9
SEL2ARG		(netgrp|netgrpd)
Packit Service a4b2a9
Packit Service a4b2a9
CUTSEP		(\|\||\/)
Packit Service a4b2a9
Packit Service a4b2a9
%%
Packit Service a4b2a9
Packit Service a4b2a9
%{
Packit Service a4b2a9
	if (reset_start_state) {
Packit Service a4b2a9
		BEGIN START;
Packit Service a4b2a9
		reset_start_state = 0;
Packit Service a4b2a9
	}
Packit Service a4b2a9
%}
Packit Service a4b2a9
Packit Service a4b2a9
<START>{
Packit Service a4b2a9
	{NL} |
Packit Service a4b2a9
	\x00 { }
Packit Service a4b2a9
Packit Service a4b2a9
	{MAPOPT} {
Packit Service a4b2a9
		BEGIN(MAPOPTVAL);
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return MAP_OPTION;
Packit Service a4b2a9
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{FSOPTS} {
Packit Service a4b2a9
		BEGIN(FSOPTVAL);
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return FS_OPTION;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{MNTOPT} {
Packit Service a4b2a9
		BEGIN(MNTOPTVAL);
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return MNT_OPTION;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{SELOPT} {
Packit Service a4b2a9
		BEGIN(SELOPTVAL);
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return SELECTOR;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	"!"/({SEL1ARG}|{SEL2ARG}) { return NOT; }
Packit Service a4b2a9
Packit Service a4b2a9
	{SEL1ARG} {
Packit Service a4b2a9
		BEGIN(SELARGVAL);
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return SELECTOR;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{SEL2ARG} {
Packit Service a4b2a9
		BEGIN(SELARGVAL);
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return SELECTOR;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{CUTSEP} { return CUT; }
Packit Service a4b2a9
Packit Service a4b2a9
	"-" { return HYPHEN; }
Packit Service a4b2a9
Packit Service a4b2a9
	{OPTWS} { return SPACE; }
Packit Service a4b2a9
Packit Service a4b2a9
	#.*  { return COMMENT; }
Packit Service a4b2a9
Packit Service a4b2a9
	{OTHR} {
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return OTHER;
Packit Service a4b2a9
	}
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
<MAPOPTVAL>{
Packit Service a4b2a9
	{NL} {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		yyless(1);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	\x00 {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		return SEPERATOR;
Packit Service a4b2a9
		yyless(1);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	";" {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		return SEPERATOR;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{OPTWS} {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		return SPACE;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	":=" { return OPTION_ASSIGN; }
Packit Service a4b2a9
Packit Service a4b2a9
	{FSTYPE} {
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return FS_TYPE;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{MAPTYPE} {
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return MAP_TYPE;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{CHEOPT} {
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return CACHE_OPTION;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{FOPT} {
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return FS_OPT_VALUE;
Packit Service a4b2a9
	}
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
<FSOPTVAL>{
Packit Service a4b2a9
	{NL} {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		yyless(1);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	\x00 {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		return SEPERATOR;
Packit Service a4b2a9
		yyless(1);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	";" {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		return SEPERATOR;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{OPTWS} {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		return SPACE;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	":=" { return OPTION_ASSIGN; }
Packit Service a4b2a9
Packit Service a4b2a9
	{FOPT} {
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return FS_OPT_VALUE;
Packit Service a4b2a9
	}
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
<MNTOPTVAL>{
Packit Service a4b2a9
	{NL} {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		yyless(1);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	\x00 {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		return SEPERATOR;
Packit Service a4b2a9
		yyless(1);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	";" {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		return SEPERATOR;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{OPTWS} {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		return SPACE;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	(:=)(,+)? { return OPTION_ASSIGN; }
Packit Service a4b2a9
Packit Service a4b2a9
	,+ { return COMMA; }
Packit Service a4b2a9
Packit Service a4b2a9
	"\"" { return QUOTE; }
Packit Service a4b2a9
Packit Service a4b2a9
	{OPTS} {
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return OPTION;
Packit Service a4b2a9
	}
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
<SELOPTVAL>{
Packit Service a4b2a9
	{NL} {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		yyless(1);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	\x00 {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		return SEPERATOR;
Packit Service a4b2a9
		yyless(1);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	";" {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		return SEPERATOR;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{OPTWS} {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		return SPACE;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	"==" { return IS_EQUAL; }
Packit Service a4b2a9
Packit Service a4b2a9
	"!=" { return NOT_EQUAL; }
Packit Service a4b2a9
Packit Service a4b2a9
	{SOPT} {
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return SELECTOR_VALUE;
Packit Service a4b2a9
	}
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
<SELARGVAL>{
Packit Service a4b2a9
	{NL} {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		yyless(1);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	\x00 {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		return SEPERATOR;
Packit Service a4b2a9
		yyless(1);
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	";" {
Packit Service a4b2a9
		BEGIN(START);
Packit Service a4b2a9
		return SEPERATOR;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	"(" { return LBRACKET; }
Packit Service a4b2a9
Packit Service a4b2a9
	{NOPT} {
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return SEL_ARG_VALUE;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{SOPT}/"," {
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return SEL_ARG_VALUE;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	"," { return COMMA; }
Packit Service a4b2a9
Packit Service a4b2a9
	{SOPT} {
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return SEL_ARG_VALUE;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	{FOPT} {
Packit Service a4b2a9
		amd_copy_buffer();
Packit Service a4b2a9
		return SEL_ARG_VALUE;
Packit Service a4b2a9
	}
Packit Service a4b2a9
Packit Service a4b2a9
	")" { return RBRACKET; }
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 amd_wrap(void)
Packit Service a4b2a9
{
Packit Service a4b2a9
	return 1;
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
static void amd_copy_buffer(void)
Packit Service a4b2a9
{
Packit Service a4b2a9
	if (amd_leng < 2048)
Packit Service a4b2a9
		strcpy(amd_lval.strtype, amd_text);
Packit Service a4b2a9
	else {
Packit Service a4b2a9
		strncpy(amd_lval.strtype, amd_text, 2047);
Packit Service a4b2a9
		amd_lval.strtype[2047] = '\0';
Packit Service a4b2a9
		logmsg("warning: truncated option near %s\n",
Packit Service a4b2a9
			&amd_lval.strtype[2030]);
Packit Service a4b2a9
	}
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
static void amd_echo(void)
Packit Service a4b2a9
{
Packit Service a4b2a9
	logmsg("%s\n", amd_text);
Packit Service a4b2a9
	return;
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
#ifdef FLEX_SCANNER
Packit Service a4b2a9
Packit Service a4b2a9
void amd_set_scan_buffer(const char *buffer)
Packit Service a4b2a9
{
Packit Service a4b2a9
	YY_FLUSH_BUFFER;
Packit Service a4b2a9
	reset_start_state = 1;
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
#define amd_min(a,b) (((a) < (b)) ? (a) : (b))
Packit Service a4b2a9
Packit Service a4b2a9
int amd_yyinput(char *buffer, int max_size)
Packit Service a4b2a9
{
Packit Service a4b2a9
	int n = amd_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 amd_set_scan_buffer(const char *buffer)
Packit Service a4b2a9
{
Packit Service a4b2a9
	line = buffer;
Packit Service a4b2a9
}
Packit Service a4b2a9
Packit Service a4b2a9
#endif