|
Packit |
8681c6 |
/*
|
|
Packit |
8681c6 |
* COPYRIGHT (c) International Business Machines Corp. 2002-2017
|
|
Packit |
8681c6 |
*
|
|
Packit |
8681c6 |
* This program is provided under the terms of the Common Public License,
|
|
Packit |
8681c6 |
* version 1.0 (CPL-1.0). Any use, reproduction or distribution for this
|
|
Packit |
8681c6 |
* software constitutes recipient's acceptance of CPL-1.0 terms which can be
|
|
Packit |
8681c6 |
* found in the file LICENSE file or at
|
|
Packit |
8681c6 |
* https://opensource.org/licenses/cpl1.0.php
|
|
Packit |
8681c6 |
*/
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
%{
|
|
Packit |
8681c6 |
/* Parser for /etc/opencryptoki.conf */
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#include <stdio.h>
|
|
Packit |
8681c6 |
#include <stdlib.h>
|
|
Packit |
8681c6 |
#include <stdint.h>
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#include "parser.h"
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
/* Ignore -Wsign-compare for autogenerated code. */
|
|
Packit |
8681c6 |
#pragma GCC diagnostic ignored "-Wsign-compare"
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
int line_num = 1;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
extern void yyerror(const char *s);
|
|
Packit |
8681c6 |
%}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
%option noyywrap
|
|
Packit |
8681c6 |
%option nounput
|
|
Packit |
8681c6 |
%option noinput
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
%%
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
[\t ]+ /* ignore spaces */ ;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
= return EQUAL;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
\{ return BEGIN_DEF;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
\n\{ {
|
|
Packit |
8681c6 |
line_num++;
|
|
Packit |
8681c6 |
return BEGIN_DEF;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
\} return END_DEF;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
\n|#.*\n {
|
|
Packit |
8681c6 |
line_num++;
|
|
Packit |
8681c6 |
return EOL;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
[0-9]+"."[0-9]+ { /* version */
|
|
Packit |
8681c6 |
unsigned long major, minor;
|
|
Packit |
8681c6 |
char *dot = strchr(yytext, '.');
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
*dot = '\0';
|
|
Packit |
8681c6 |
major = strtoul(yytext, NULL, 10);
|
|
Packit |
8681c6 |
minor = strtoul(dot + 1, NULL, 10);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
yylval.num = (uint32_t)major << 16 | (uint32_t)minor;
|
|
Packit |
8681c6 |
return TOKVERSION;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
[0-9]+ { /* number */
|
|
Packit |
8681c6 |
yylval.num = strtoul(yytext, NULL, 10);
|
|
Packit |
8681c6 |
return INTEGER;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
version return OCKVERSION;
|
|
Packit |
8681c6 |
slot return SLOT;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
[^\"= \t\n]+ {
|
|
Packit |
8681c6 |
yylval.str = strdup(yytext);
|
|
Packit |
8681c6 |
return STRING;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
\"[^\"\n]*\" {
|
|
Packit |
8681c6 |
yylval.str = strdup(yytext+1);
|
|
Packit |
8681c6 |
if (yylval.str) yylval.str[strlen(yylval.str)-1]='\0';
|
|
Packit |
8681c6 |
return STRING;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
. yyerror(yytext);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
%%
|