blob: 947139761e6620985d64af2a31d55c1a96307794 [file] [log] [blame]
%{
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <assert.h>
#include <crm/crm.h>
#include <stonithd-config.h>
#include <standalone_config.h>
/* Some distributions can't use the output from flex without help */
#ifndef ECHO
# define ECHO if(fwrite( yytext, yyleng, 1, yyout ))
#endif
int _line_count = 1;
static void
_unescape(char *val)
{
size_t x,y;
int e = 0;
y = strlen(val);
for (x = 0; x < y; x++) {
if (e == 1) {
if (val[x] == '"') {
memmove(&val[x-1], &val[x], y-x);
--y;
--x;
}
e = 0;
}
if (val[x] == '\\') {
e = 1;
}
}
val[y] = 0;
}
%}
%%
"\\\n" {
++_line_count;
}
[\n] {
++_line_count;
return T_ENDL;
}
[ \t]* {}
\#[^\n]* {}
^"device" {
return T_DEVICE;
}
^"options" {
return T_OPTIONS;
}
^"priority" {
return T_PRIO;
}
^"ports" {
return T_PORTMAP;
}
^"unfence" {
return T_UNFENCE;
}
"=" {
return T_EQ;
}
[^ &\|!\t\(\){},;=\"\n\[\]]+ {
yylval.sval = crm_strdup(yytext);
return T_VAL;
}
\"(\\\"|[^\"])+\" {
yylval.sval = crm_strdup(yytext+1);
yylval.sval[strlen(yytext)-2] = 0;
/* unescape backslash-quote to be quotes */
_unescape(yylval.sval);
return T_VAL;
}
\"\" {
yylval.sval = NULL;
return T_VAL;
}
%%
int
yywrap(void)
{
/* This if block that is never executed is here to
* get rid of some compile warnings about
* unused autogenerated functions. Probably
* not the best solution... but a solution...
* unless the compiler optimizes it away and complains
* again. It may be possible to execute some sed
* magic to remove the code from the autogenerated .c
* file before compile time if this doesn't hold up.*/
if (0) {
yyunput(1, NULL);
input();
}
return 1;
}