|
Packit |
8480eb |
/* ----------------------------------------------------------------------- *
|
|
Packit |
8480eb |
*
|
|
Packit |
8480eb |
* Copyright 2013 Ian Kent <raven@themaw.net>
|
|
Packit |
8480eb |
* Copyright 2013 Red Hat, Inc.
|
|
Packit |
8480eb |
* All rights reserved.
|
|
Packit |
8480eb |
*
|
|
Packit |
8480eb |
* This program is free software; you can redistribute it and/or modify
|
|
Packit |
8480eb |
* it under the terms of the GNU General Public License as published by
|
|
Packit |
8480eb |
* the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
|
|
Packit |
8480eb |
* USA; either version 2 of the License, or (at your option) any later
|
|
Packit |
8480eb |
* version.
|
|
Packit |
8480eb |
*
|
|
Packit |
8480eb |
* This program is distributed in the hope that it will be useful,
|
|
Packit |
8480eb |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
8480eb |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
8480eb |
* GNU General Public License for more details.
|
|
Packit |
8480eb |
*
|
|
Packit |
8480eb |
* ----------------------------------------------------------------------- */
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
%s START MAPOPTVAL FSOPTVAL MNTOPTVAL SELOPTVAL SELARGVAL
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
%{
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static int reset_start_state = 0;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#ifdef ECHO
|
|
Packit |
8480eb |
# undef ECHO
|
|
Packit |
8480eb |
#endif
|
|
Packit |
8480eb |
static void amd_echo(void); /* forward definition */
|
|
Packit |
8480eb |
static void amd_copy_buffer(void);
|
|
Packit |
8480eb |
#define ECHO amd_echo()
|
|
Packit |
8480eb |
int amd_wrap(void);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#include <stdio.h>
|
|
Packit |
8480eb |
#include <stdlib.h>
|
|
Packit |
8480eb |
#include <string.h>
|
|
Packit |
8480eb |
#include <ctype.h>
|
|
Packit |
8480eb |
#include "amd_parse.tab.h"
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
int amd_lex(void);
|
|
Packit |
8480eb |
int mad_wrap(void);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#define YY_SKIP_YYWRAP
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#ifndef YY_STACK_USED
|
|
Packit |
8480eb |
#define YY_STACK_USED 0
|
|
Packit |
8480eb |
#endif
|
|
Packit |
8480eb |
#ifndef YY_ALWAYS_INTERACTIVE
|
|
Packit |
8480eb |
#define YY_ALWAYS_INTERACTIVE 0
|
|
Packit |
8480eb |
#endif
|
|
Packit |
8480eb |
#ifndef YY_NEVER_INTERACTIVE
|
|
Packit |
8480eb |
#define YY_NEVER_INTERACTIVE 0
|
|
Packit |
8480eb |
#endif
|
|
Packit |
8480eb |
#ifndef YY_MAIN
|
|
Packit |
8480eb |
#define YY_MAIN 0
|
|
Packit |
8480eb |
#endif
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
void amd_set_scan_buffer(const char *);
|
|
Packit |
8480eb |
static const char *line = NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#ifdef FLEX_SCANNER
|
|
Packit |
8480eb |
static const char *line_pos = NULL;
|
|
Packit |
8480eb |
static const char *line_lim = NULL;
|
|
Packit |
8480eb |
int amd_yyinput(char *, int);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#undef YY_INPUT
|
|
Packit |
8480eb |
#define YY_INPUT(b, r, ms) (r = amd_yyinput(b, ms))
|
|
Packit |
8480eb |
#else
|
|
Packit |
8480eb |
#undef input
|
|
Packit |
8480eb |
#undef unput
|
|
Packit |
8480eb |
#define input() (*(char *) line++)
|
|
Packit |
8480eb |
#define unput(c) (*(char *) --line = c)
|
|
Packit |
8480eb |
#endif
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
%}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
%option nounput
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
NL \r?\n
|
|
Packit |
8480eb |
OPTWS [[:blank:]]*
|
|
Packit |
8480eb |
OTHR [^!;:=/|\- \t\r\n#]*
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
V4NUM ([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
MACRO (\$\{([[:alpha:]_/]([[:alnum:]_\-])([[:alnum:]_\-/])*)\})
|
|
Packit |
8480eb |
QSTR (\"([^"\\]|\\.)*\")
|
|
Packit |
8480eb |
OSTR ([[:alpha:]]([[:alnum:]_\-])+)
|
|
Packit |
8480eb |
FSTR ([[:alnum:]_/\.]([[:alnum:]_\-/\+\.]|(\\.))*)
|
|
Packit |
8480eb |
VSTR (([[:alnum:]_\-\:/\.])+)
|
|
Packit |
8480eb |
SSTR ([[:alpha:]]([[:alnum:]\-\.])+)
|
|
Packit |
8480eb |
IP4ADDR ({V4NUM}\.((({V4NUM}\.){0,2}){V4NUM}?))
|
|
Packit |
8480eb |
V4MASK ({IP4ADDR}|([1-2][0-9]|3[0-2]|[1-9]))
|
|
Packit |
8480eb |
IP6ADDR ((([A-Fa-f0-9]{1,4}\:\:?){1,7}[A-Fa-f0-9]{1,4})|(\:\:1))
|
|
Packit |
8480eb |
V6MASK (12[0-8]|1[0-1][0-9]|[1-9][0-9]|[1-9])
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
FOPT (({QSTR}|{FSTR}|{MACRO})+)
|
|
Packit |
8480eb |
OPTS ({OSTR}(=({VSTR}|{MACRO})+)?)
|
|
Packit Service |
918a60 |
SOPT ({SSTR}|{QSTR}|{MACRO}(\.|{SSTR}|{QSTR}|{MACRO})+)
|
|
Packit |
8480eb |
NOPT ({SSTR}|(({IP4ADDR}(\/{V4MASK})?)|({IP6ADDR}(\/{V6MASK})?)))
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
MAPOPT (fs|type|maptype|pref|sublink|cache)
|
|
Packit |
8480eb |
MNTOPT (opts|addopts|remopts)
|
|
Packit |
8480eb |
FSOPTS (rhost|rfs|dev|cachedir|mount|unmount|umount|delay)
|
|
Packit |
8480eb |
CHEOPT ((mapdefault|none|inc|re|regexp|all)(,sync)?)
|
|
Packit |
8480eb |
MAPTYPE (file|nis|nisplus|ldap|hesiod|exec|ndbm|passwd|union)
|
|
Packit |
8480eb |
FSTYPE_LOCAL (link|linkx|lofs|ufs|ext2|ext3|ext4|xfs|jfs|cdfs|cachefs)
|
|
Packit |
8480eb |
FSTYPE_NET (nfs|nfsx|nfsl|host)
|
|
Packit |
8480eb |
FSTYPE (auto|program|direct|lustre|{FSTYPE_LOCAL}|{FSTYPE_NET})
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
OSSEL (arch|karch|os|osver|full_os|vendor)
|
|
Packit |
8480eb |
HSTSEL (host|hostd|domain|byte|cluster)
|
|
Packit |
8480eb |
NETSEL (netnumber|network|wire|in_network)
|
|
Packit |
8480eb |
USRSEL (uid|gid)
|
|
Packit |
8480eb |
MAPSEL (key|map|path)
|
|
Packit |
8480eb |
OTRSEL (autodir|dollar)
|
|
Packit |
8480eb |
BOLSEL (true|false)
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
SELOPT ({OSSEL}|{HSTSEL}|{USRSEL}|{MAPSEL}|{OTRSEL})
|
|
Packit |
8480eb |
SEL1ARG (xhost|exists|{NETSEL}|{BOLSEL})
|
|
Packit |
8480eb |
SEL2ARG (netgrp|netgrpd)
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
CUTSEP (\|\||\/)
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
%%
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
%{
|
|
Packit |
8480eb |
if (reset_start_state) {
|
|
Packit |
8480eb |
BEGIN START;
|
|
Packit |
8480eb |
reset_start_state = 0;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
%}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
<START>{
|
|
Packit |
8480eb |
{NL} |
|
|
Packit |
8480eb |
\x00 { }
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{MAPOPT} {
|
|
Packit |
8480eb |
BEGIN(MAPOPTVAL);
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return MAP_OPTION;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{FSOPTS} {
|
|
Packit |
8480eb |
BEGIN(FSOPTVAL);
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return FS_OPTION;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{MNTOPT} {
|
|
Packit |
8480eb |
BEGIN(MNTOPTVAL);
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return MNT_OPTION;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{SELOPT} {
|
|
Packit |
8480eb |
BEGIN(SELOPTVAL);
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return SELECTOR;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
"!"/({SEL1ARG}|{SEL2ARG}) { return NOT; }
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{SEL1ARG} {
|
|
Packit |
8480eb |
BEGIN(SELARGVAL);
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return SELECTOR;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{SEL2ARG} {
|
|
Packit |
8480eb |
BEGIN(SELARGVAL);
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return SELECTOR;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{CUTSEP} { return CUT; }
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
"-" { return HYPHEN; }
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{OPTWS} { return SPACE; }
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#.* { return COMMENT; }
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{OTHR} {
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return OTHER;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
<MAPOPTVAL>{
|
|
Packit |
8480eb |
{NL} {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
yyless(1);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
\x00 {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
return SEPERATOR;
|
|
Packit |
8480eb |
yyless(1);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
";" {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
return SEPERATOR;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{OPTWS} {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
return SPACE;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
":=" { return OPTION_ASSIGN; }
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{FSTYPE} {
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return FS_TYPE;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{MAPTYPE} {
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return MAP_TYPE;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{CHEOPT} {
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return CACHE_OPTION;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{FOPT} {
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return FS_OPT_VALUE;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
<FSOPTVAL>{
|
|
Packit |
8480eb |
{NL} {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
yyless(1);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
\x00 {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
return SEPERATOR;
|
|
Packit |
8480eb |
yyless(1);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
";" {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
return SEPERATOR;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{OPTWS} {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
return SPACE;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
":=" { return OPTION_ASSIGN; }
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{FOPT} {
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return FS_OPT_VALUE;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
<MNTOPTVAL>{
|
|
Packit |
8480eb |
{NL} {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
yyless(1);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
\x00 {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
return SEPERATOR;
|
|
Packit |
8480eb |
yyless(1);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
";" {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
return SEPERATOR;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{OPTWS} {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
return SPACE;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
(:=)(,+)? { return OPTION_ASSIGN; }
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
,+ { return COMMA; }
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
"\"" { return QUOTE; }
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{OPTS} {
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return OPTION;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
<SELOPTVAL>{
|
|
Packit |
8480eb |
{NL} {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
yyless(1);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
\x00 {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
return SEPERATOR;
|
|
Packit |
8480eb |
yyless(1);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
";" {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
return SEPERATOR;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{OPTWS} {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
return SPACE;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
"==" { return IS_EQUAL; }
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
"!=" { return NOT_EQUAL; }
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{SOPT} {
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return SELECTOR_VALUE;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
<SELARGVAL>{
|
|
Packit |
8480eb |
{NL} {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
yyless(1);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
\x00 {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
return SEPERATOR;
|
|
Packit |
8480eb |
yyless(1);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
";" {
|
|
Packit |
8480eb |
BEGIN(START);
|
|
Packit |
8480eb |
return SEPERATOR;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
"(" { return LBRACKET; }
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{NOPT} {
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return SEL_ARG_VALUE;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{SOPT}/"," {
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return SEL_ARG_VALUE;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
"," { return COMMA; }
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{SOPT} {
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return SEL_ARG_VALUE;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
{FOPT} {
|
|
Packit |
8480eb |
amd_copy_buffer();
|
|
Packit |
8480eb |
return SEL_ARG_VALUE;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
")" { return RBRACKET; }
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
%%
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#include "automount.h"
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
int amd_wrap(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return 1;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static void amd_copy_buffer(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
if (amd_leng < 2048)
|
|
Packit |
8480eb |
strcpy(amd_lval.strtype, amd_text);
|
|
Packit |
8480eb |
else {
|
|
Packit |
8480eb |
strncpy(amd_lval.strtype, amd_text, 2047);
|
|
Packit |
8480eb |
amd_lval.strtype[2047] = '\0';
|
|
Packit |
8480eb |
logmsg("warning: truncated option near %s\n",
|
|
Packit |
8480eb |
&amd_lval.strtype[2030]);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static void amd_echo(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
logmsg("%s\n", amd_text);
|
|
Packit |
8480eb |
return;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#ifdef FLEX_SCANNER
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
void amd_set_scan_buffer(const char *buffer)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
YY_FLUSH_BUFFER;
|
|
Packit |
8480eb |
reset_start_state = 1;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
line = buffer;
|
|
Packit |
8480eb |
line_pos = &line[0];
|
|
Packit |
8480eb |
/*
|
|
Packit |
8480eb |
* Ensure buffer is 1 greater than string and is zeroed before
|
|
Packit |
8480eb |
* the parse so we can fit the extra NULL which allows us to
|
|
Packit |
8480eb |
* explicitly match an end of line within the buffer (ie. the
|
|
Packit |
8480eb |
* need for 2 NULLS when parsing in memeory buffers).
|
|
Packit |
8480eb |
*/
|
|
Packit |
8480eb |
line_lim = line + strlen(buffer) + 1;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#define amd_min(a,b) (((a) < (b)) ? (a) : (b))
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
int amd_yyinput(char *buffer, int max_size)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int n = amd_min(max_size, line_lim - line_pos);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (n > 0) {
|
|
Packit |
8480eb |
memcpy(buffer, line_pos, n);
|
|
Packit |
8480eb |
line_pos += n;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
return n;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#else
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
void amd_set_scan_buffer(const char *buffer)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
line = buffer;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#endif
|