Blame usr/sbin/pkcsslotd/lexer.l

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
%%