[Forensics-changes] [yara] 03/04: Instead of regenerating grammar files, remove them before build
Hilko Bengen
bengen at moszumanska.debian.org
Sat Jul 1 10:23:12 UTC 2017
This is an automated email from the git hooks/post-receive script.
bengen pushed a commit to branch master
in repository yara.
commit bdde1425648b3e51e7b490aa17c87d73a614a179
Author: Hilko Bengen <bengen at debian.org>
Date: Sat Jul 1 00:40:11 2017 +0200
Instead of regenerating grammar files, remove them before build
---
debian/control | 1 +
...01-Regenerate-re_lexer.c-using-flex-2.6.1.patch | 2700 --------------------
debian/patches/series | 1 -
debian/rules | 7 +
4 files changed, 8 insertions(+), 2701 deletions(-)
diff --git a/debian/control b/debian/control
index 295a708..77ce95d 100644
--- a/debian/control
+++ b/debian/control
@@ -5,6 +5,7 @@ Maintainer: Debian Forensics <forensics-devel at lists.alioth.debian.org>
Uploaders: Hilko Bengen <bengen at debian.org>
Build-Depends: debhelper (>= 9), dh-autoreconf,
python-sphinx | python3-sphinx,
+ flex, bison,
libjansson-dev,
libmagic-dev,
libssl-dev,
diff --git a/debian/patches/0001-Regenerate-re_lexer.c-using-flex-2.6.1.patch b/debian/patches/0001-Regenerate-re_lexer.c-using-flex-2.6.1.patch
deleted file mode 100644
index 9dad221..0000000
--- a/debian/patches/0001-Regenerate-re_lexer.c-using-flex-2.6.1.patch
+++ /dev/null
@@ -1,2700 +0,0 @@
-From: Hilko Bengen <bengen at debian.org>
-Date: Fri, 30 Jun 2017 23:58:15 +0200
-Subject: Regenerate re_lexer.c using flex 2.6.1
-
----
- libyara/re_lexer.c | 2685 ----------------------------------------------------
- 1 file changed, 2685 deletions(-)
- delete mode 100644 libyara/re_lexer.c
-
-diff --git a/libyara/re_lexer.c b/libyara/re_lexer.c
-deleted file mode 100644
-index b223c44..0000000
---- a/libyara/re_lexer.c
-+++ /dev/null
-@@ -1,2685 +0,0 @@
--#line 2 "re_lexer.c"
--
--#line 4 "re_lexer.c"
--
--#define YY_INT_ALIGNED short int
--
--/* A lexical scanner generated by flex */
--
--#define FLEX_SCANNER
--#define YY_FLEX_MAJOR_VERSION 2
--#define YY_FLEX_MINOR_VERSION 6
--#define YY_FLEX_SUBMINOR_VERSION 0
--#if YY_FLEX_SUBMINOR_VERSION > 0
--#define FLEX_BETA
--#endif
--
--/* First, we deal with platform-specific or compiler-specific issues. */
--
--/* begin standard C headers. */
--#include <stdio.h>
--#include <string.h>
--#include <errno.h>
--#include <stdlib.h>
--
--/* end standard C headers. */
--
--/* flex integer type definitions */
--
--#ifndef FLEXINT_H
--#define FLEXINT_H
--
--/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
--
--#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
--
--/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
-- * if you want the limit (max/min) macros for int types.
-- */
--#ifndef __STDC_LIMIT_MACROS
--#define __STDC_LIMIT_MACROS 1
--#endif
--
--#include <inttypes.h>
--typedef int8_t flex_int8_t;
--typedef uint8_t flex_uint8_t;
--typedef int16_t flex_int16_t;
--typedef uint16_t flex_uint16_t;
--typedef int32_t flex_int32_t;
--typedef uint32_t flex_uint32_t;
--#else
--typedef signed char flex_int8_t;
--typedef short int flex_int16_t;
--typedef int flex_int32_t;
--typedef unsigned char flex_uint8_t;
--typedef unsigned short int flex_uint16_t;
--typedef unsigned int flex_uint32_t;
--
--/* Limits of integral types. */
--#ifndef INT8_MIN
--#define INT8_MIN (-128)
--#endif
--#ifndef INT16_MIN
--#define INT16_MIN (-32767-1)
--#endif
--#ifndef INT32_MIN
--#define INT32_MIN (-2147483647-1)
--#endif
--#ifndef INT8_MAX
--#define INT8_MAX (127)
--#endif
--#ifndef INT16_MAX
--#define INT16_MAX (32767)
--#endif
--#ifndef INT32_MAX
--#define INT32_MAX (2147483647)
--#endif
--#ifndef UINT8_MAX
--#define UINT8_MAX (255U)
--#endif
--#ifndef UINT16_MAX
--#define UINT16_MAX (65535U)
--#endif
--#ifndef UINT32_MAX
--#define UINT32_MAX (4294967295U)
--#endif
--
--#endif /* ! C99 */
--
--#endif /* ! FLEXINT_H */
--
--#ifdef __cplusplus
--
--/* The "const" storage-class-modifier is valid. */
--#define YY_USE_CONST
--
--#else /* ! __cplusplus */
--
--/* C99 requires __STDC__ to be defined as 1. */
--#if defined (__STDC__)
--
--#define YY_USE_CONST
--
--#endif /* defined (__STDC__) */
--#endif /* ! __cplusplus */
--
--#ifdef YY_USE_CONST
--#define yyconst const
--#else
--#define yyconst
--#endif
--
--/* Returned upon end-of-file. */
--#define YY_NULL 0
--
--/* Promotes a possibly negative, possibly signed char to an unsigned
-- * integer for use as an array index. If the signed char is negative,
-- * we want to instead treat it as an 8-bit unsigned char, hence the
-- * double cast.
-- */
--#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
--
--/* An opaque pointer. */
--#ifndef YY_TYPEDEF_YY_SCANNER_T
--#define YY_TYPEDEF_YY_SCANNER_T
--typedef void* yyscan_t;
--#endif
--
--/* For convenience, these vars (plus the bison vars far below)
-- are macros in the reentrant scanner. */
--#define yyin yyg->yyin_r
--#define yyout yyg->yyout_r
--#define yyextra yyg->yyextra_r
--#define yyleng yyg->yyleng_r
--#define yytext yyg->yytext_r
--#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
--#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
--#define yy_flex_debug yyg->yy_flex_debug_r
--
--/* Enter a start condition. This macro really ought to take a parameter,
-- * but we do it the disgusting crufty way forced on us by the ()-less
-- * definition of BEGIN.
-- */
--#define BEGIN yyg->yy_start = 1 + 2 *
--
--/* Translate the current start state into a value that can be later handed
-- * to BEGIN to return to the state. The YYSTATE alias is for lex
-- * compatibility.
-- */
--#define YY_START ((yyg->yy_start - 1) / 2)
--#define YYSTATE YY_START
--
--/* Action number for EOF rule of a given start state. */
--#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
--
--/* Special action meaning "start processing a new file". */
--#define YY_NEW_FILE re_yyrestart(yyin ,yyscanner )
--
--#define YY_END_OF_BUFFER_CHAR 0
--
--/* Size of default input buffer. */
--#ifndef YY_BUF_SIZE
--#ifdef __ia64__
--/* On IA-64, the buffer size is 16k, not 8k.
-- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
-- * Ditto for the __ia64__ case accordingly.
-- */
--#define YY_BUF_SIZE 32768
--#else
--#define YY_BUF_SIZE 16384
--#endif /* __ia64__ */
--#endif
--
--/* The state buf must be large enough to hold one state per character in the main buffer.
-- */
--#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
--
--#ifndef YY_TYPEDEF_YY_BUFFER_STATE
--#define YY_TYPEDEF_YY_BUFFER_STATE
--typedef struct yy_buffer_state *YY_BUFFER_STATE;
--#endif
--
--#ifndef YY_TYPEDEF_YY_SIZE_T
--#define YY_TYPEDEF_YY_SIZE_T
--typedef size_t yy_size_t;
--#endif
--
--#define EOB_ACT_CONTINUE_SCAN 0
--#define EOB_ACT_END_OF_FILE 1
--#define EOB_ACT_LAST_MATCH 2
--
-- /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
-- * access to the local variable yy_act. Since yyless() is a macro, it would break
-- * existing scanners that call yyless() from OUTSIDE re_yylex.
-- * One obvious solution it to make yy_act a global. I tried that, and saw
-- * a 5% performance hit in a non-yylineno scanner, because yy_act is
-- * normally declared as a register variable-- so it is not worth it.
-- */
-- #define YY_LESS_LINENO(n) \
-- do { \
-- int yyl;\
-- for ( yyl = n; yyl < yyleng; ++yyl )\
-- if ( yytext[yyl] == '\n' )\
-- --yylineno;\
-- }while(0)
-- #define YY_LINENO_REWIND_TO(dst) \
-- do {\
-- const char *p;\
-- for ( p = yy_cp-1; p >= (dst); --p)\
-- if ( *p == '\n' )\
-- --yylineno;\
-- }while(0)
--
--/* Return all but the first "n" matched characters back to the input stream. */
--#define yyless(n) \
-- do \
-- { \
-- /* Undo effects of setting up yytext. */ \
-- int yyless_macro_arg = (n); \
-- YY_LESS_LINENO(yyless_macro_arg);\
-- *yy_cp = yyg->yy_hold_char; \
-- YY_RESTORE_YY_MORE_OFFSET \
-- yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-- YY_DO_BEFORE_ACTION; /* set up yytext again */ \
-- } \
-- while ( 0 )
--
--#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
--
--#ifndef YY_STRUCT_YY_BUFFER_STATE
--#define YY_STRUCT_YY_BUFFER_STATE
--struct yy_buffer_state
-- {
-- FILE *yy_input_file;
--
-- char *yy_ch_buf; /* input buffer */
-- char *yy_buf_pos; /* current position in input buffer */
--
-- /* Size of input buffer in bytes, not including room for EOB
-- * characters.
-- */
-- yy_size_t yy_buf_size;
--
-- /* Number of characters read into yy_ch_buf, not including EOB
-- * characters.
-- */
-- yy_size_t yy_n_chars;
--
-- /* Whether we "own" the buffer - i.e., we know we created it,
-- * and can realloc() it to grow it, and should free() it to
-- * delete it.
-- */
-- int yy_is_our_buffer;
--
-- /* Whether this is an "interactive" input source; if so, and
-- * if we're using stdio for input, then we want to use getc()
-- * instead of fread(), to make sure we stop fetching input after
-- * each newline.
-- */
-- int yy_is_interactive;
--
-- /* Whether we're considered to be at the beginning of a line.
-- * If so, '^' rules will be active on the next match, otherwise
-- * not.
-- */
-- int yy_at_bol;
--
-- int yy_bs_lineno; /**< The line count. */
-- int yy_bs_column; /**< The column count. */
--
-- /* Whether to try to fill the input buffer when we reach the
-- * end of it.
-- */
-- int yy_fill_buffer;
--
-- int yy_buffer_status;
--
--#define YY_BUFFER_NEW 0
--#define YY_BUFFER_NORMAL 1
-- /* When an EOF's been seen but there's still some text to process
-- * then we mark the buffer as YY_EOF_PENDING, to indicate that we
-- * shouldn't try reading from the input source any more. We might
-- * still have a bunch of tokens to match, though, because of
-- * possible backing-up.
-- *
-- * When we actually see the EOF, we change the status to "new"
-- * (via re_yyrestart()), so that the user can continue scanning by
-- * just pointing yyin at a new input file.
-- */
--#define YY_BUFFER_EOF_PENDING 2
--
-- };
--#endif /* !YY_STRUCT_YY_BUFFER_STATE */
--
--/* We provide macros for accessing buffer states in case in the
-- * future we want to put the buffer states in a more general
-- * "scanner state".
-- *
-- * Returns the top of the stack, or NULL.
-- */
--#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
-- ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
-- : NULL)
--
--/* Same as previous macro, but useful when we know that the buffer stack is not
-- * NULL or when we need an lvalue. For internal use only.
-- */
--#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
--
--void re_yyrestart (FILE *input_file ,yyscan_t yyscanner );
--void re_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
--YY_BUFFER_STATE re_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
--void re_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
--void re_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
--void re_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
--void re_yypop_buffer_state (yyscan_t yyscanner );
--
--static void re_yyensure_buffer_stack (yyscan_t yyscanner );
--static void re_yy_load_buffer_state (yyscan_t yyscanner );
--static void re_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
--
--#define YY_FLUSH_BUFFER re_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
--
--YY_BUFFER_STATE re_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
--YY_BUFFER_STATE re_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
--YY_BUFFER_STATE re_yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner );
--
--void *re_yyalloc (yy_size_t ,yyscan_t yyscanner );
--void *re_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
--void re_yyfree (void * ,yyscan_t yyscanner );
--
--#define yy_new_buffer re_yy_create_buffer
--
--#define yy_set_interactive(is_interactive) \
-- { \
-- if ( ! YY_CURRENT_BUFFER ){ \
-- re_yyensure_buffer_stack (yyscanner); \
-- YY_CURRENT_BUFFER_LVALUE = \
-- re_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
-- } \
-- YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-- }
--
--#define yy_set_bol(at_bol) \
-- { \
-- if ( ! YY_CURRENT_BUFFER ){\
-- re_yyensure_buffer_stack (yyscanner); \
-- YY_CURRENT_BUFFER_LVALUE = \
-- re_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
-- } \
-- YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-- }
--
--#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
--
--/* Begin user sect3 */
--
--#define re_yywrap(yyscanner) (/*CONSTCOND*/1)
--#define YY_SKIP_YYWRAP
--
--typedef unsigned char YY_CHAR;
--
--typedef int yy_state_type;
--
--#define yytext_ptr yytext_r
--
--static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
--static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner);
--static int yy_get_next_buffer (yyscan_t yyscanner );
--#if defined(__GNUC__) && __GNUC__ >= 3
--__attribute__((__noreturn__))
--#endif
--static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
--
--/* Done after the current pattern has been matched and before the
-- * corresponding action - sets up yytext.
-- */
--#define YY_DO_BEFORE_ACTION \
-- yyg->yytext_ptr = yy_bp; \
-- yyleng = (size_t) (yy_cp - yy_bp); \
-- yyg->yy_hold_char = *yy_cp; \
-- *yy_cp = '\0'; \
-- yyg->yy_c_buf_p = yy_cp;
--
--#define YY_NUM_RULES 29
--#define YY_END_OF_BUFFER 30
--/* This struct is not used in this scanner,
-- but its presence is necessary. */
--struct yy_trans_info
-- {
-- flex_int32_t yy_verify;
-- flex_int32_t yy_nxt;
-- };
--static yyconst flex_int16_t yy_accept[45] =
-- { 0,
-- 0, 0, 0, 0, 30, 7, 7, 28, 6, 17,
-- 7, 27, 29, 26, 18, 5, 3, 16, 15, 13,
-- 11, 9, 14, 12, 10, 8, 0, 0, 0, 0,
-- 25, 23, 21, 24, 22, 20, 0, 4, 0, 1,
-- 2, 19, 0, 0
-- } ;
--
--static yyconst YY_CHAR yy_ec[256] =
-- { 0,
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-- 1, 1, 1, 1, 1, 3, 1, 1, 1, 3,
-- 3, 3, 3, 4, 5, 3, 1, 6, 6, 6,
-- 6, 6, 6, 6, 6, 6, 6, 1, 1, 1,
-- 1, 1, 3, 1, 7, 8, 7, 9, 7, 7,
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-- 1, 1, 10, 1, 1, 1, 11, 1, 1, 1,
-- 12, 13, 14, 15, 1, 1, 7, 16, 7, 17,
--
-- 7, 7, 1, 1, 1, 1, 1, 1, 1, 1,
-- 1, 1, 1, 1, 18, 1, 1, 1, 19, 20,
-- 1, 1, 21, 3, 22, 1, 1, 1, 1, 1,
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
--
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-- 1, 1, 1, 1, 1
-- } ;
--
--static yyconst YY_CHAR yy_meta[23] =
-- { 0,
-- 1, 2, 1, 1, 3, 4, 4, 4, 4, 1,
-- 1, 1, 1, 5, 1, 4, 4, 1, 1, 1,
-- 1, 1
-- } ;
--
--static yyconst flex_uint16_t yy_base[51] =
-- { 0,
-- 0, 20, 3, 5, 50, 89, 89, 89, 10, 36,
-- 0, 44, 43, 47, 38, 89, 26, 33, 89, 89,
-- 89, 89, 89, 89, 89, 89, 4, 5, 0, 33,
-- 32, 31, 29, 26, 24, 23, 15, 89, 8, 89,
-- 89, 89, 0, 89, 67, 72, 77, 82, 84, 4
-- } ;
--
--static yyconst flex_int16_t yy_def[51] =
-- { 0,
-- 45, 45, 46, 46, 44, 44, 44, 44, 44, 44,
-- 44, 44, 44, 47, 44, 44, 44, 44, 44, 44,
-- 44, 44, 44, 44, 44, 44, 44, 44, 48, 44,
-- 44, 44, 44, 44, 44, 44, 49, 44, 44, 44,
-- 44, 44, 50, 0, 44, 44, 44, 44, 44, 44
-- } ;
--
--static yyconst flex_uint16_t yy_nxt[112] =
-- { 0,
-- 44, 7, 8, 27, 13, 28, 13, 30, 27, 39,
-- 28, 9, 10, 39, 8, 14, 15, 14, 15, 29,
-- 11, 7, 8, 16, 17, 40, 41, 29, 29, 40,
-- 29, 9, 10, 29, 8, 29, 29, 29, 18, 38,
-- 11, 18, 29, 19, 20, 21, 22, 29, 29, 44,
-- 44, 23, 24, 25, 26, 31, 32, 33, 44, 44,
-- 44, 44, 44, 34, 35, 36, 37, 6, 6, 6,
-- 6, 6, 12, 12, 12, 12, 12, 30, 44, 30,
-- 30, 30, 42, 42, 42, 42, 43, 43, 5, 44,
-- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
--
-- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
-- 44
-- } ;
--
--static yyconst flex_int16_t yy_chk[112] =
-- { 0,
-- 0, 1, 1, 11, 3, 11, 4, 50, 28, 27,
-- 28, 1, 1, 39, 1, 3, 3, 4, 4, 37,
-- 1, 2, 2, 9, 9, 27, 28, 36, 35, 39,
-- 34, 2, 2, 33, 2, 32, 31, 30, 18, 17,
-- 2, 10, 15, 10, 10, 10, 10, 13, 12, 5,
-- 0, 10, 10, 10, 10, 14, 14, 14, 0, 0,
-- 0, 0, 0, 14, 14, 14, 14, 45, 45, 45,
-- 45, 45, 46, 46, 46, 46, 46, 47, 0, 47,
-- 47, 47, 48, 48, 48, 48, 49, 49, 44, 44,
-- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
--
-- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
-- 44
-- } ;
--
--/* Table of booleans, true if rule could match eol. */
--static yyconst flex_int32_t yy_rule_can_match_eol[30] =
-- { 0,
--0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
-- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
--
--/* The intent behind this definition is that it'll catch
-- * any uses of REJECT which flex missed.
-- */
--#define REJECT reject_used_but_not_detected
--#define yymore() yymore_used_but_not_detected
--#define YY_MORE_ADJ 0
--#define YY_RESTORE_YY_MORE_OFFSET
--#line 1 "re_lexer.l"
--/*
--Copyright (c) 2013. The YARA Authors. All Rights Reserved.
--
--Redistribution and use in source and binary forms, with or without modification,
--are permitted provided that the following conditions are met:
--
--1. Redistributions of source code must retain the above copyright notice, this
--list of conditions and the following disclaimer.
--
--2. Redistributions in binary form must reproduce the above copyright notice,
--this list of conditions and the following disclaimer in the documentation and/or
--other materials provided with the distribution.
--
--3. Neither the name of the copyright holder nor the names of its contributors
--may be used to endorse or promote products derived from this software without
--specific prior written permission.
--
--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
--ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
--WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
--DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
--ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
--LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
--ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
--(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
--SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--*/
--/* Lexical analyzer for regular expressions */
--#line 33 "re_lexer.l"
--
--/* Disable warnings for unused functions in this file.
--
--As we redefine YY_FATAL_ERROR macro to use our own function re_yyfatal, the
--yy_fatal_error function generated by Flex is not actually used, causing a
--compiler warning. Flex doesn't offer any options to remove the yy_fatal_error
--function. When they include something like %option noyy_fatal_error as they do
--with noyywrap then we can remove this pragma.
--*/
--
--#ifdef __GNUC__
--#pragma GCC diagnostic ignored "-Wunused-function"
--#endif
--
--#include <assert.h>
--#include <setjmp.h>
--
--#include <yara/globals.h>
--#include <yara/utils.h>
--#include <yara/error.h>
--#include <yara/limits.h>
--#include <yara/mem.h>
--#include <yara/re.h>
--#include <yara/re_lexer.h>
--#include <yara/threading.h>
--#include <yara/strutils.h>
--
--
--#ifdef _WIN32
--#define snprintf _snprintf
--#endif
--
--static uint8_t word_chars[] = {
-- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03,
-- 0xFE, 0xFF, 0xFF, 0x87, 0xFE, 0xFF, 0xFF, 0x07,
-- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
--
--
--int escaped_char_value(
-- char* text,
-- uint8_t* value);
--
--int read_escaped_char(
-- yyscan_t yyscanner,
-- uint8_t* escaped_char);
--
--#define YY_NO_UNISTD_H 1
--
--#line 587 "re_lexer.c"
--
--#define INITIAL 0
--#define char_class 1
--
--#ifndef YY_NO_UNISTD_H
--/* Special case for "unistd.h", since it is non-ANSI. We include it way
-- * down here because we want the user's section 1 to have been scanned first.
-- * The user has a chance to override it with an option.
-- */
--#include <unistd.h>
--#endif
--
--#ifndef YY_EXTRA_TYPE
--#define YY_EXTRA_TYPE void *
--#endif
--
--/* Holds the entire state of the reentrant scanner. */
--struct yyguts_t
-- {
--
-- /* User-defined. Not touched by flex. */
-- YY_EXTRA_TYPE yyextra_r;
--
-- /* The rest are the same as the globals declared in the non-reentrant scanner. */
-- FILE *yyin_r, *yyout_r;
-- size_t yy_buffer_stack_top; /**< index of top of stack. */
-- size_t yy_buffer_stack_max; /**< capacity of stack. */
-- YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
-- char yy_hold_char;
-- yy_size_t yy_n_chars;
-- yy_size_t yyleng_r;
-- char *yy_c_buf_p;
-- int yy_init;
-- int yy_start;
-- int yy_did_buffer_switch_on_eof;
-- int yy_start_stack_ptr;
-- int yy_start_stack_depth;
-- int *yy_start_stack;
-- yy_state_type yy_last_accepting_state;
-- char* yy_last_accepting_cpos;
--
-- int yylineno_r;
-- int yy_flex_debug_r;
--
-- char *yytext_r;
-- int yy_more_flag;
-- int yy_more_len;
--
-- YYSTYPE * yylval_r;
--
-- }; /* end struct yyguts_t */
--
--static int yy_init_globals (yyscan_t yyscanner );
--
-- /* This must go here because YYSTYPE and YYLTYPE are included
-- * from bison output in section 1.*/
-- # define yylval yyg->yylval_r
--
--int re_yylex_init (yyscan_t* scanner);
--
--int re_yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
--
--/* Accessor methods to globals.
-- These are made visible to non-reentrant scanners for convenience. */
--
--int re_yylex_destroy (yyscan_t yyscanner );
--
--int re_yyget_debug (yyscan_t yyscanner );
--
--void re_yyset_debug (int debug_flag ,yyscan_t yyscanner );
--
--YY_EXTRA_TYPE re_yyget_extra (yyscan_t yyscanner );
--
--void re_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
--
--FILE *re_yyget_in (yyscan_t yyscanner );
--
--void re_yyset_in (FILE * _in_str ,yyscan_t yyscanner );
--
--FILE *re_yyget_out (yyscan_t yyscanner );
--
--void re_yyset_out (FILE * _out_str ,yyscan_t yyscanner );
--
--yy_size_t re_yyget_leng (yyscan_t yyscanner );
--
--char *re_yyget_text (yyscan_t yyscanner );
--
--int re_yyget_lineno (yyscan_t yyscanner );
--
--void re_yyset_lineno (int _line_number ,yyscan_t yyscanner );
--
--int re_yyget_column (yyscan_t yyscanner );
--
--void re_yyset_column (int _column_no ,yyscan_t yyscanner );
--
--YYSTYPE * re_yyget_lval (yyscan_t yyscanner );
--
--void re_yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
--
--/* Macros after this point can all be overridden by user definitions in
-- * section 1.
-- */
--
--#ifndef YY_SKIP_YYWRAP
--#ifdef __cplusplus
--extern "C" int re_yywrap (yyscan_t yyscanner );
--#else
--extern int re_yywrap (yyscan_t yyscanner );
--#endif
--#endif
--
--#ifndef YY_NO_UNPUT
--
--#endif
--
--#ifndef yytext_ptr
--static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
--#endif
--
--#ifdef YY_NEED_STRLEN
--static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
--#endif
--
--#ifndef YY_NO_INPUT
--
--#ifdef __cplusplus
--static int yyinput (yyscan_t yyscanner );
--#else
--static int input (yyscan_t yyscanner );
--#endif
--
--#endif
--
--/* Amount of stuff to slurp up with each read. */
--#ifndef YY_READ_BUF_SIZE
--#ifdef __ia64__
--/* On IA-64, the buffer size is 16k, not 8k */
--#define YY_READ_BUF_SIZE 16384
--#else
--#define YY_READ_BUF_SIZE 8192
--#endif /* __ia64__ */
--#endif
--
--/* Copy whatever the last rule matched to the standard output. */
--#ifndef ECHO
--/* This used to be an fputs(), but since the string might contain NUL's,
-- * we now use fwrite().
-- */
--#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
--#endif
--
--/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
-- * is returned in "result".
-- */
--#ifndef YY_INPUT
--#define YY_INPUT(buf,result,max_size) \
-- if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
-- { \
-- int c = '*'; \
-- size_t n; \
-- for ( n = 0; n < max_size && \
-- (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
-- buf[n] = (char) c; \
-- if ( c == '\n' ) \
-- buf[n++] = (char) c; \
-- if ( c == EOF && ferror( yyin ) ) \
-- YY_FATAL_ERROR( "input in flex scanner failed" ); \
-- result = n; \
-- } \
-- else \
-- { \
-- errno=0; \
-- while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
-- { \
-- if( errno != EINTR) \
-- { \
-- YY_FATAL_ERROR( "input in flex scanner failed" ); \
-- break; \
-- } \
-- errno=0; \
-- clearerr(yyin); \
-- } \
-- }\
--\
--
--#endif
--
--/* No semi-colon after return; correct usage is to write "yyterminate();" -
-- * we don't want an extra ';' after the "return" because that will cause
-- * some compilers to complain about unreachable statements.
-- */
--#ifndef yyterminate
--#define yyterminate() return YY_NULL
--#endif
--
--/* Number of entries by which start-condition stack grows. */
--#ifndef YY_START_STACK_INCR
--#define YY_START_STACK_INCR 25
--#endif
--
--/* Report a fatal error. */
--#ifndef YY_FATAL_ERROR
--#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
--#endif
--
--/* end tables serialization structures and prototypes */
--
--/* Default declaration of generated scanner - a define so the user can
-- * easily add parameters.
-- */
--#ifndef YY_DECL
--#define YY_DECL_IS_OURS 1
--
--extern int re_yylex \
-- (YYSTYPE * yylval_param ,yyscan_t yyscanner);
--
--#define YY_DECL int re_yylex \
-- (YYSTYPE * yylval_param , yyscan_t yyscanner)
--#endif /* !YY_DECL */
--
--/* Code executed at the beginning of each rule, after yytext and yyleng
-- * have been set up.
-- */
--#ifndef YY_USER_ACTION
--#define YY_USER_ACTION
--#endif
--
--/* Code executed at the end of each rule. */
--#ifndef YY_BREAK
--#define YY_BREAK /*LINTED*/break;
--#endif
--
--#define YY_RULE_SETUP \
-- YY_USER_ACTION
--
--/** The main scanner function which does all the work.
-- */
--YY_DECL
--{
-- yy_state_type yy_current_state;
-- char *yy_cp, *yy_bp;
-- int yy_act;
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
-- yylval = yylval_param;
--
-- if ( !yyg->yy_init )
-- {
-- yyg->yy_init = 1;
--
--#ifdef YY_USER_INIT
-- YY_USER_INIT;
--#endif
--
-- if ( ! yyg->yy_start )
-- yyg->yy_start = 1; /* first start state */
--
-- if ( ! yyin )
-- yyin = stdin;
--
-- if ( ! yyout )
-- yyout = stdout;
--
-- if ( ! YY_CURRENT_BUFFER ) {
-- re_yyensure_buffer_stack (yyscanner);
-- YY_CURRENT_BUFFER_LVALUE =
-- re_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
-- }
--
-- re_yy_load_buffer_state(yyscanner );
-- }
--
-- {
--#line 100 "re_lexer.l"
--
--
--#line 864 "re_lexer.c"
--
-- while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
-- {
-- yy_cp = yyg->yy_c_buf_p;
--
-- /* Support of yytext. */
-- *yy_cp = yyg->yy_hold_char;
--
-- /* yy_bp points to the position in yy_ch_buf of the start of
-- * the current run.
-- */
-- yy_bp = yy_cp;
--
-- yy_current_state = yyg->yy_start;
--yy_match:
-- do
-- {
-- YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
-- if ( yy_accept[yy_current_state] )
-- {
-- yyg->yy_last_accepting_state = yy_current_state;
-- yyg->yy_last_accepting_cpos = yy_cp;
-- }
-- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-- {
-- yy_current_state = (int) yy_def[yy_current_state];
-- if ( yy_current_state >= 45 )
-- yy_c = yy_meta[(unsigned int) yy_c];
-- }
-- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-- ++yy_cp;
-- }
-- while ( yy_current_state != 44 );
-- yy_cp = yyg->yy_last_accepting_cpos;
-- yy_current_state = yyg->yy_last_accepting_state;
--
--yy_find_action:
-- yy_act = yy_accept[yy_current_state];
--
-- YY_DO_BEFORE_ACTION;
--
-- if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
-- {
-- yy_size_t yyl;
-- for ( yyl = 0; yyl < yyleng; ++yyl )
-- if ( yytext[yyl] == '\n' )
--
-- do{ yylineno++;
-- yycolumn=0;
-- }while(0)
--;
-- }
--
--do_action: /* This label is used only to access EOF actions. */
--
-- switch ( yy_act )
-- { /* beginning of action switch */
-- case 0: /* must back up */
-- /* undo the effects of YY_DO_BEFORE_ACTION */
-- *yy_cp = yyg->yy_hold_char;
-- yy_cp = yyg->yy_last_accepting_cpos;
-- yy_current_state = yyg->yy_last_accepting_state;
-- goto yy_find_action;
--
--case 1:
--YY_RULE_SETUP
--#line 102 "re_lexer.l"
--{
--
-- // Examples: {3,8} {0,5} {,5} {7,}
--
-- int hi_bound;
-- int lo_bound = atoi(yytext + 1);
--
-- char* comma = strchr(yytext, ',');
--
-- if (comma - yytext == strlen(yytext) - 2)
-- // if comma is followed by the closing curly bracket
-- // (example: {2,}) set high bound value to maximum.
-- hi_bound = INT16_MAX;
-- else
-- hi_bound = atoi(comma + 1);
--
-- if (hi_bound > INT16_MAX)
-- {
-- yyerror(yyscanner, lex_env, "repeat interval too large");
-- yyterminate();
-- }
--
-- if (hi_bound < lo_bound || hi_bound < 0 || lo_bound < 0)
-- {
-- yyerror(yyscanner, lex_env, "bad repeat interval");
-- yyterminate();
-- }
--
-- if (hi_bound == 0 && lo_bound == 0)
-- {
-- yyerror(yyscanner, lex_env, "bad repeat interval");
-- yyterminate();
-- }
--
-- yylval->range = (hi_bound << 16) | lo_bound;
--
-- return _RANGE_;
--}
-- YY_BREAK
--case 2:
--YY_RULE_SETUP
--#line 142 "re_lexer.l"
--{
--
-- // Example: {10}
--
-- int value = atoi(yytext + 1);
--
-- if (value > INT16_MAX)
-- {
-- yyerror(yyscanner, lex_env, "repeat interval too large");
-- yyterminate();
-- }
--
-- if (value == 0)
-- {
-- yyerror(yyscanner, lex_env, "bad repeat interval");
-- yyterminate();
-- }
--
-- yylval->range = (value << 16) | value;
--
-- return _RANGE_;
--}
-- YY_BREAK
--case 3:
--YY_RULE_SETUP
--#line 166 "re_lexer.l"
--{
--
-- // Start of a negated character class. Example: [^abcd]
--
-- BEGIN(char_class);
-- memset(LEX_ENV->class_vector, 0, 32);
-- LEX_ENV->negated_class = TRUE;
--}
-- YY_BREAK
--case 4:
--YY_RULE_SETUP
--#line 175 "re_lexer.l"
--{
--
-- // Start of character negated class containing a ].
-- // Example: [^]abc] this must be interpreted as a class
-- // not matching ], a, b, nor c
--
-- BEGIN(char_class);
-- memset(LEX_ENV->class_vector, 0, 32);
-- LEX_ENV->negated_class = TRUE;
-- LEX_ENV->class_vector[']' / 8] |= 1 << ']' % 8;
--}
-- YY_BREAK
--case 5:
--YY_RULE_SETUP
--#line 188 "re_lexer.l"
--{
--
-- // Start of character class containing a ].
-- // Example: []abc] this must be interpreted as a class
-- // matching ], a, b, or c.
--
-- BEGIN(char_class);
-- memset(LEX_ENV->class_vector, 0, 32);
-- LEX_ENV->negated_class = FALSE;
-- LEX_ENV->class_vector[']' / 8] |= 1 << ']' % 8;
--}
-- YY_BREAK
--case 6:
--YY_RULE_SETUP
--#line 201 "re_lexer.l"
--{
--
-- // Start of character class. Example: [abcd]
--
-- BEGIN(char_class);
-- memset(LEX_ENV->class_vector, 0, 32);
-- LEX_ENV->negated_class = FALSE;
--}
-- YY_BREAK
--case 7:
--/* rule 7 can match eol */
--YY_RULE_SETUP
--#line 211 "re_lexer.l"
--{
--
-- // Any non-special character is passed as a CHAR token to the scanner.
--
-- yylval->integer = yytext[0];
-- return _CHAR_;
--}
-- YY_BREAK
--case 8:
--YY_RULE_SETUP
--#line 220 "re_lexer.l"
--{
-- return _WORD_CHAR_;
--}
-- YY_BREAK
--case 9:
--YY_RULE_SETUP
--#line 225 "re_lexer.l"
--{
-- return _NON_WORD_CHAR_;
--}
-- YY_BREAK
--case 10:
--YY_RULE_SETUP
--#line 230 "re_lexer.l"
--{
-- return _SPACE_;
--}
-- YY_BREAK
--case 11:
--YY_RULE_SETUP
--#line 235 "re_lexer.l"
--{
-- return _NON_SPACE_;
--}
-- YY_BREAK
--case 12:
--YY_RULE_SETUP
--#line 240 "re_lexer.l"
--{
-- return _DIGIT_;
--}
-- YY_BREAK
--case 13:
--YY_RULE_SETUP
--#line 245 "re_lexer.l"
--{
-- return _NON_DIGIT_;
--}
-- YY_BREAK
--case 14:
--YY_RULE_SETUP
--#line 250 "re_lexer.l"
--{
-- return _WORD_BOUNDARY_;
--}
-- YY_BREAK
--case 15:
--YY_RULE_SETUP
--#line 254 "re_lexer.l"
--{
-- return _NON_WORD_BOUNDARY_;
--}
-- YY_BREAK
--case 16:
--YY_RULE_SETUP
--#line 259 "re_lexer.l"
--{
--
-- yyerror(yyscanner, lex_env, "backreferences are not allowed");
-- yyterminate();
--}
-- YY_BREAK
--case 17:
--YY_RULE_SETUP
--#line 266 "re_lexer.l"
--{
--
-- uint8_t c;
--
-- if (read_escaped_char(yyscanner, &c))
-- {
-- yylval->integer = c;
-- return _CHAR_;
-- }
-- else
-- {
-- yyerror(yyscanner, lex_env, "illegal escape sequence");
-- yyterminate();
-- }
--}
-- YY_BREAK
--case 18:
--YY_RULE_SETUP
--#line 283 "re_lexer.l"
--{
--
-- // End of character class.
--
-- int i;
--
-- yylval->class_vector = (uint8_t*) yr_malloc(32);
-- memcpy(yylval->class_vector, LEX_ENV->class_vector, 32);
--
-- if (LEX_ENV->negated_class)
-- {
-- for(i = 0; i < 32; i++)
-- yylval->class_vector[i] = ~yylval->class_vector[i];
-- }
--
-- BEGIN(INITIAL);
-- return _CLASS_;
--}
-- YY_BREAK
--case 19:
--/* rule 19 can match eol */
--YY_RULE_SETUP
--#line 304 "re_lexer.l"
--{
--
-- // A range inside a character class.
-- // [abc0-9]
-- // ^- matching here
--
-- uint16_t c;
-- uint8_t start = yytext[0];
-- uint8_t end = yytext[2];
--
-- if (start == '\\')
-- {
-- if (!escaped_char_value(yytext, &start))
-- {
-- yyerror(yyscanner, lex_env, "illegal escape sequence");
-- yyterminate();
-- }
--
-- if (yytext[1] == 'x')
-- end = yytext[5];
-- else
-- end = yytext[3];
-- }
--
-- if (end == '\\')
-- {
-- if (!read_escaped_char(yyscanner, &end))
-- {
-- yyerror(yyscanner, lex_env, "illegal escape sequence");
-- yyterminate();
-- }
-- }
--
-- if (end < start)
-- {
-- yyerror(yyscanner, lex_env, "bad character range");
-- yyterminate();
-- }
--
-- for (c = start; c <= end; c++)
-- {
-- LEX_ENV->class_vector[c / 8] |= 1 << c % 8;
-- }
--}
-- YY_BREAK
--case 20:
--YY_RULE_SETUP
--#line 350 "re_lexer.l"
--{
--
-- int i;
--
-- for (i = 0; i < 32; i++)
-- LEX_ENV->class_vector[i] |= word_chars[i];
--}
-- YY_BREAK
--case 21:
--YY_RULE_SETUP
--#line 359 "re_lexer.l"
--{
--
-- int i;
--
-- for (i = 0; i < 32; i++)
-- LEX_ENV->class_vector[i] |= ~word_chars[i];
--}
-- YY_BREAK
--case 22:
--YY_RULE_SETUP
--#line 368 "re_lexer.l"
--{
--
-- LEX_ENV->class_vector[' ' / 8] |= 1 << ' ' % 8;
-- LEX_ENV->class_vector['\t' / 8] |= 1 << '\t' % 8;
--}
-- YY_BREAK
--case 23:
--YY_RULE_SETUP
--#line 375 "re_lexer.l"
--{
--
-- int i;
--
-- for (i = 0; i < 32; i++)
-- {
-- if (i == ' ' / 8)
-- LEX_ENV->class_vector[i] |= ~(1 << ' ' % 8);
-- else if (i == '\t' / 8)
-- LEX_ENV->class_vector[i] |= ~(1 << '\t' % 8);
-- else
-- LEX_ENV->class_vector[i] = 0xFF;
-- }
--}
-- YY_BREAK
--case 24:
--YY_RULE_SETUP
--#line 391 "re_lexer.l"
--{
--
-- char c;
--
-- for (c = '0'; c <= '9'; c++)
-- LEX_ENV->class_vector[c / 8] |= 1 << c % 8;
--}
-- YY_BREAK
--case 25:
--YY_RULE_SETUP
--#line 400 "re_lexer.l"
--{
--
-- int i;
--
-- for (i = 0; i < 32; i++)
-- {
-- // digits 0-7 are in the sixth byte of the vector, let that byte alone
-- if (i == 6)
-- continue;
--
-- // digits 8 and 9 are the lowest two bits in the seventh byte of the
-- // vector, let those bits alone.
-- if (i == 7)
-- LEX_ENV->class_vector[i] |= 0xFC;
-- else
-- LEX_ENV->class_vector[i] = 0xFF;
-- }
--}
-- YY_BREAK
--case 26:
--YY_RULE_SETUP
--#line 420 "re_lexer.l"
--{
--
-- uint8_t c;
--
-- if (read_escaped_char(yyscanner, &c))
-- {
-- LEX_ENV->class_vector[c / 8] |= 1 << c % 8;
-- }
-- else
-- {
-- yyerror(yyscanner, lex_env, "illegal escape sequence");
-- yyterminate();
-- }
--}
-- YY_BREAK
--case 27:
--YY_RULE_SETUP
--#line 436 "re_lexer.l"
--{
--
-- if (yytext[0] >= 32 && yytext[0] < 127)
-- {
-- // A character class (i.e: [0-9a-f]) is represented by a 256-bits vector,
-- // here we set to 1 the vector's bit corresponding to the input character.
--
-- LEX_ENV->class_vector[yytext[0] / 8] |= 1 << yytext[0] % 8;
-- }
-- else
-- {
-- yyerror(yyscanner, lex_env, "non-ascii character");
-- yyterminate();
-- }
--}
-- YY_BREAK
--case YY_STATE_EOF(char_class):
--#line 453 "re_lexer.l"
--{
--
-- // End of regexp reached while scanning a character class.
--
-- yyerror(yyscanner, lex_env, "missing terminating ] for character class");
-- yyterminate();
--}
-- YY_BREAK
--case 28:
--YY_RULE_SETUP
--#line 462 "re_lexer.l"
--{
--
-- if (yytext[0] >= 32 && yytext[0] < 127)
-- {
-- return yytext[0];
-- }
-- else
-- {
-- yyerror(yyscanner, lex_env, "non-ascii character");
-- yyterminate();
-- }
--}
-- YY_BREAK
--case YY_STATE_EOF(INITIAL):
--#line 476 "re_lexer.l"
--{
--
-- yyterminate();
--}
-- YY_BREAK
--case 29:
--YY_RULE_SETUP
--#line 481 "re_lexer.l"
--ECHO;
-- YY_BREAK
--#line 1375 "re_lexer.c"
--
-- case YY_END_OF_BUFFER:
-- {
-- /* Amount of text matched not including the EOB char. */
-- int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
--
-- /* Undo the effects of YY_DO_BEFORE_ACTION. */
-- *yy_cp = yyg->yy_hold_char;
-- YY_RESTORE_YY_MORE_OFFSET
--
-- if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
-- {
-- /* We're scanning a new file or input source. It's
-- * possible that this happened because the user
-- * just pointed yyin at a new source and called
-- * re_yylex(). If so, then we have to assure
-- * consistency between YY_CURRENT_BUFFER and our
-- * globals. Here is the right place to do so, because
-- * this is the first action (other than possibly a
-- * back-up) that will match for the new input source.
-- */
-- yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-- YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
-- YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
-- }
--
-- /* Note that here we test for yy_c_buf_p "<=" to the position
-- * of the first EOB in the buffer, since yy_c_buf_p will
-- * already have been incremented past the NUL character
-- * (since all states make transitions on EOB to the
-- * end-of-buffer state). Contrast this with the test
-- * in input().
-- */
-- if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
-- { /* This was really a NUL. */
-- yy_state_type yy_next_state;
--
-- yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
--
-- yy_current_state = yy_get_previous_state( yyscanner );
--
-- /* Okay, we're now positioned to make the NUL
-- * transition. We couldn't have
-- * yy_get_previous_state() go ahead and do it
-- * for us because it doesn't know how to deal
-- * with the possibility of jamming (and we don't
-- * want to build jamming into it because then it
-- * will run more slowly).
-- */
--
-- yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
--
-- yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
--
-- if ( yy_next_state )
-- {
-- /* Consume the NUL. */
-- yy_cp = ++yyg->yy_c_buf_p;
-- yy_current_state = yy_next_state;
-- goto yy_match;
-- }
--
-- else
-- {
-- yy_cp = yyg->yy_last_accepting_cpos;
-- yy_current_state = yyg->yy_last_accepting_state;
-- goto yy_find_action;
-- }
-- }
--
-- else switch ( yy_get_next_buffer( yyscanner ) )
-- {
-- case EOB_ACT_END_OF_FILE:
-- {
-- yyg->yy_did_buffer_switch_on_eof = 0;
--
-- if ( re_yywrap(yyscanner ) )
-- {
-- /* Note: because we've taken care in
-- * yy_get_next_buffer() to have set up
-- * yytext, we can now set up
-- * yy_c_buf_p so that if some total
-- * hoser (like flex itself) wants to
-- * call the scanner after we return the
-- * YY_NULL, it'll still work - another
-- * YY_NULL will get returned.
-- */
-- yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
--
-- yy_act = YY_STATE_EOF(YY_START);
-- goto do_action;
-- }
--
-- else
-- {
-- if ( ! yyg->yy_did_buffer_switch_on_eof )
-- YY_NEW_FILE;
-- }
-- break;
-- }
--
-- case EOB_ACT_CONTINUE_SCAN:
-- yyg->yy_c_buf_p =
-- yyg->yytext_ptr + yy_amount_of_matched_text;
--
-- yy_current_state = yy_get_previous_state( yyscanner );
--
-- yy_cp = yyg->yy_c_buf_p;
-- yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
-- goto yy_match;
--
-- case EOB_ACT_LAST_MATCH:
-- yyg->yy_c_buf_p =
-- &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
--
-- yy_current_state = yy_get_previous_state( yyscanner );
--
-- yy_cp = yyg->yy_c_buf_p;
-- yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
-- goto yy_find_action;
-- }
-- break;
-- }
--
-- default:
-- YY_FATAL_ERROR(
-- "fatal flex scanner internal error--no action found" );
-- } /* end of action switch */
-- } /* end of scanning one token */
-- } /* end of user's declarations */
--} /* end of re_yylex */
--
--/* yy_get_next_buffer - try to read in a new buffer
-- *
-- * Returns a code representing an action:
-- * EOB_ACT_LAST_MATCH -
-- * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
-- * EOB_ACT_END_OF_FILE - end of file
-- */
--static int yy_get_next_buffer (yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-- char *source = yyg->yytext_ptr;
-- yy_size_t number_to_move, i;
-- int ret_val;
--
-- if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
-- YY_FATAL_ERROR(
-- "fatal flex scanner internal error--end of buffer missed" );
--
-- if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
-- { /* Don't try to fill the buffer, so this is an EOF. */
-- if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
-- {
-- /* We matched a single character, the EOB, so
-- * treat this as a final EOF.
-- */
-- return EOB_ACT_END_OF_FILE;
-- }
--
-- else
-- {
-- /* We matched some text prior to the EOB, first
-- * process it.
-- */
-- return EOB_ACT_LAST_MATCH;
-- }
-- }
--
-- /* Try to read more data. */
--
-- /* First move last chars to start of buffer. */
-- number_to_move = (yy_size_t) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
--
-- for ( i = 0; i < number_to_move; ++i )
-- *(dest++) = *(source++);
--
-- if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
-- /* don't do the read, it's not guaranteed to return an EOF,
-- * just force an EOF
-- */
-- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
--
-- else
-- {
-- yy_size_t num_to_read =
-- YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
--
-- while ( num_to_read <= 0 )
-- { /* Not enough room in the buffer - grow it. */
--
-- /* just a shorter name for the current buffer */
-- YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
--
-- int yy_c_buf_p_offset =
-- (int) (yyg->yy_c_buf_p - b->yy_ch_buf);
--
-- if ( b->yy_is_our_buffer )
-- {
-- yy_size_t new_size = b->yy_buf_size * 2;
--
-- if ( new_size <= 0 )
-- b->yy_buf_size += b->yy_buf_size / 8;
-- else
-- b->yy_buf_size *= 2;
--
-- b->yy_ch_buf = (char *)
-- /* Include room in for 2 EOB chars. */
-- re_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner );
-- }
-- else
-- /* Can't grow it, we don't own it. */
-- b->yy_ch_buf = 0;
--
-- if ( ! b->yy_ch_buf )
-- YY_FATAL_ERROR(
-- "fatal error - scanner input buffer overflow" );
--
-- yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
--
-- num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-- number_to_move - 1;
--
-- }
--
-- if ( num_to_read > YY_READ_BUF_SIZE )
-- num_to_read = YY_READ_BUF_SIZE;
--
-- /* Read in more data. */
-- YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-- yyg->yy_n_chars, num_to_read );
--
-- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
-- }
--
-- if ( yyg->yy_n_chars == 0 )
-- {
-- if ( number_to_move == YY_MORE_ADJ )
-- {
-- ret_val = EOB_ACT_END_OF_FILE;
-- re_yyrestart(yyin ,yyscanner);
-- }
--
-- else
-- {
-- ret_val = EOB_ACT_LAST_MATCH;
-- YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
-- YY_BUFFER_EOF_PENDING;
-- }
-- }
--
-- else
-- ret_val = EOB_ACT_CONTINUE_SCAN;
--
-- if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-- /* Extend the array by 50%, plus the number we really need. */
-- yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
-- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) re_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
-- if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-- YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-- }
--
-- yyg->yy_n_chars += number_to_move;
-- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
-- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
--
-- yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
--
-- return ret_val;
--}
--
--/* yy_get_previous_state - get the state just before the EOB char was reached */
--
-- static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
--{
-- yy_state_type yy_current_state;
-- char *yy_cp;
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
-- yy_current_state = yyg->yy_start;
--
-- for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
-- {
-- YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
-- if ( yy_accept[yy_current_state] )
-- {
-- yyg->yy_last_accepting_state = yy_current_state;
-- yyg->yy_last_accepting_cpos = yy_cp;
-- }
-- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-- {
-- yy_current_state = (int) yy_def[yy_current_state];
-- if ( yy_current_state >= 45 )
-- yy_c = yy_meta[(unsigned int) yy_c];
-- }
-- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-- }
--
-- return yy_current_state;
--}
--
--/* yy_try_NUL_trans - try to make a transition on the NUL character
-- *
-- * synopsis
-- * next_state = yy_try_NUL_trans( current_state );
-- */
-- static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner)
--{
-- int yy_is_jam;
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
-- char *yy_cp = yyg->yy_c_buf_p;
--
-- YY_CHAR yy_c = 1;
-- if ( yy_accept[yy_current_state] )
-- {
-- yyg->yy_last_accepting_state = yy_current_state;
-- yyg->yy_last_accepting_cpos = yy_cp;
-- }
-- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-- {
-- yy_current_state = (int) yy_def[yy_current_state];
-- if ( yy_current_state >= 45 )
-- yy_c = yy_meta[(unsigned int) yy_c];
-- }
-- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-- yy_is_jam = (yy_current_state == 44);
--
-- (void)yyg;
-- return yy_is_jam ? 0 : yy_current_state;
--}
--
--#ifndef YY_NO_UNPUT
--
--#endif
--
--#ifndef YY_NO_INPUT
--#ifdef __cplusplus
-- static int yyinput (yyscan_t yyscanner)
--#else
-- static int input (yyscan_t yyscanner)
--#endif
--
--{
-- int c;
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
-- *yyg->yy_c_buf_p = yyg->yy_hold_char;
--
-- if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
-- {
-- /* yy_c_buf_p now points to the character we want to return.
-- * If this occurs *before* the EOB characters, then it's a
-- * valid NUL; if not, then we've hit the end of the buffer.
-- */
-- if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
-- /* This was really a NUL. */
-- *yyg->yy_c_buf_p = '\0';
--
-- else
-- { /* need more input */
-- yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
-- ++yyg->yy_c_buf_p;
--
-- switch ( yy_get_next_buffer( yyscanner ) )
-- {
-- case EOB_ACT_LAST_MATCH:
-- /* This happens because yy_g_n_b()
-- * sees that we've accumulated a
-- * token and flags that we need to
-- * try matching the token before
-- * proceeding. But for input(),
-- * there's no matching to consider.
-- * So convert the EOB_ACT_LAST_MATCH
-- * to EOB_ACT_END_OF_FILE.
-- */
--
-- /* Reset buffer status. */
-- re_yyrestart(yyin ,yyscanner);
--
-- /*FALLTHROUGH*/
--
-- case EOB_ACT_END_OF_FILE:
-- {
-- if ( re_yywrap(yyscanner ) )
-- return EOF;
--
-- if ( ! yyg->yy_did_buffer_switch_on_eof )
-- YY_NEW_FILE;
--#ifdef __cplusplus
-- return yyinput(yyscanner);
--#else
-- return input(yyscanner);
--#endif
-- }
--
-- case EOB_ACT_CONTINUE_SCAN:
-- yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
-- break;
-- }
-- }
-- }
--
-- c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */
-- *yyg->yy_c_buf_p = '\0'; /* preserve yytext */
-- yyg->yy_hold_char = *++yyg->yy_c_buf_p;
--
-- if ( c == '\n' )
--
-- do{ yylineno++;
-- yycolumn=0;
-- }while(0)
--;
--
-- return c;
--}
--#endif /* ifndef YY_NO_INPUT */
--
--/** Immediately switch to a different input stream.
-- * @param input_file A readable stream.
-- * @param yyscanner The scanner object.
-- * @note This function does not reset the start condition to @c INITIAL .
-- */
-- void re_yyrestart (FILE * input_file , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
-- if ( ! YY_CURRENT_BUFFER ){
-- re_yyensure_buffer_stack (yyscanner);
-- YY_CURRENT_BUFFER_LVALUE =
-- re_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
-- }
--
-- re_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
-- re_yy_load_buffer_state(yyscanner );
--}
--
--/** Switch to a different input buffer.
-- * @param new_buffer The new input buffer.
-- * @param yyscanner The scanner object.
-- */
-- void re_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
-- /* TODO. We should be able to replace this entire function body
-- * with
-- * re_yypop_buffer_state();
-- * re_yypush_buffer_state(new_buffer);
-- */
-- re_yyensure_buffer_stack (yyscanner);
-- if ( YY_CURRENT_BUFFER == new_buffer )
-- return;
--
-- if ( YY_CURRENT_BUFFER )
-- {
-- /* Flush out information for old buffer. */
-- *yyg->yy_c_buf_p = yyg->yy_hold_char;
-- YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
-- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
-- }
--
-- YY_CURRENT_BUFFER_LVALUE = new_buffer;
-- re_yy_load_buffer_state(yyscanner );
--
-- /* We don't actually know whether we did this switch during
-- * EOF (re_yywrap()) processing, but the only time this flag
-- * is looked at is after re_yywrap() is called, so it's safe
-- * to go ahead and always set it.
-- */
-- yyg->yy_did_buffer_switch_on_eof = 1;
--}
--
--static void re_yy_load_buffer_state (yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-- yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-- yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-- yyg->yy_hold_char = *yyg->yy_c_buf_p;
--}
--
--/** Allocate and initialize an input buffer state.
-- * @param file A readable stream.
-- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
-- * @param yyscanner The scanner object.
-- * @return the allocated buffer state.
-- */
-- YY_BUFFER_STATE re_yy_create_buffer (FILE * file, int size , yyscan_t yyscanner)
--{
-- YY_BUFFER_STATE b;
--
-- b = (YY_BUFFER_STATE) re_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
-- if ( ! b )
-- YY_FATAL_ERROR( "out of dynamic memory in re_yy_create_buffer()" );
--
-- b->yy_buf_size = (yy_size_t)size;
--
-- /* yy_ch_buf has to be 2 characters longer than the size given because
-- * we need to put in 2 end-of-buffer characters.
-- */
-- b->yy_ch_buf = (char *) re_yyalloc(b->yy_buf_size + 2 ,yyscanner );
-- if ( ! b->yy_ch_buf )
-- YY_FATAL_ERROR( "out of dynamic memory in re_yy_create_buffer()" );
--
-- b->yy_is_our_buffer = 1;
--
-- re_yy_init_buffer(b,file ,yyscanner);
--
-- return b;
--}
--
--/** Destroy the buffer.
-- * @param b a buffer created with re_yy_create_buffer()
-- * @param yyscanner The scanner object.
-- */
-- void re_yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
-- if ( ! b )
-- return;
--
-- if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
-- YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
--
-- if ( b->yy_is_our_buffer )
-- re_yyfree((void *) b->yy_ch_buf ,yyscanner );
--
-- re_yyfree((void *) b ,yyscanner );
--}
--
--/* Initializes or reinitializes a buffer.
-- * This function is sometimes called more than once on the same buffer,
-- * such as during a re_yyrestart() or at EOF.
-- */
-- static void re_yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner)
--
--{
-- int oerrno = errno;
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
-- re_yy_flush_buffer(b ,yyscanner);
--
-- b->yy_input_file = file;
-- b->yy_fill_buffer = 1;
--
-- /* If b is the current buffer, then re_yy_init_buffer was _probably_
-- * called from re_yyrestart() or through yy_get_next_buffer.
-- * In that case, we don't want to reset the lineno or column.
-- */
-- if (b != YY_CURRENT_BUFFER){
-- b->yy_bs_lineno = 1;
-- b->yy_bs_column = 0;
-- }
--
-- b->yy_is_interactive = 0;
--
-- errno = oerrno;
--}
--
--/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
-- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
-- * @param yyscanner The scanner object.
-- */
-- void re_yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- if ( ! b )
-- return;
--
-- b->yy_n_chars = 0;
--
-- /* We always need two end-of-buffer characters. The first causes
-- * a transition to the end-of-buffer state. The second causes
-- * a jam in that state.
-- */
-- b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
-- b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
--
-- b->yy_buf_pos = &b->yy_ch_buf[0];
--
-- b->yy_at_bol = 1;
-- b->yy_buffer_status = YY_BUFFER_NEW;
--
-- if ( b == YY_CURRENT_BUFFER )
-- re_yy_load_buffer_state(yyscanner );
--}
--
--/** Pushes the new state onto the stack. The new state becomes
-- * the current state. This function will allocate the stack
-- * if necessary.
-- * @param new_buffer The new state.
-- * @param yyscanner The scanner object.
-- */
--void re_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- if (new_buffer == NULL)
-- return;
--
-- re_yyensure_buffer_stack(yyscanner);
--
-- /* This block is copied from re_yy_switch_to_buffer. */
-- if ( YY_CURRENT_BUFFER )
-- {
-- /* Flush out information for old buffer. */
-- *yyg->yy_c_buf_p = yyg->yy_hold_char;
-- YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
-- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
-- }
--
-- /* Only push if top exists. Otherwise, replace top. */
-- if (YY_CURRENT_BUFFER)
-- yyg->yy_buffer_stack_top++;
-- YY_CURRENT_BUFFER_LVALUE = new_buffer;
--
-- /* copied from re_yy_switch_to_buffer. */
-- re_yy_load_buffer_state(yyscanner );
-- yyg->yy_did_buffer_switch_on_eof = 1;
--}
--
--/** Removes and deletes the top of the stack, if present.
-- * The next element becomes the new top.
-- * @param yyscanner The scanner object.
-- */
--void re_yypop_buffer_state (yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- if (!YY_CURRENT_BUFFER)
-- return;
--
-- re_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
-- YY_CURRENT_BUFFER_LVALUE = NULL;
-- if (yyg->yy_buffer_stack_top > 0)
-- --yyg->yy_buffer_stack_top;
--
-- if (YY_CURRENT_BUFFER) {
-- re_yy_load_buffer_state(yyscanner );
-- yyg->yy_did_buffer_switch_on_eof = 1;
-- }
--}
--
--/* Allocates the stack if it does not exist.
-- * Guarantees space for at least one push.
-- */
--static void re_yyensure_buffer_stack (yyscan_t yyscanner)
--{
-- yy_size_t num_to_alloc;
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
-- if (!yyg->yy_buffer_stack) {
--
-- /* First allocation is just for 2 elements, since we don't know if this
-- * scanner will even need a stack. We use 2 instead of 1 to avoid an
-- * immediate realloc on the next call.
-- */
-- num_to_alloc = 1; // After all that talk, this was set to 1 anyways...
-- yyg->yy_buffer_stack = (struct yy_buffer_state**)re_yyalloc
-- (num_to_alloc * sizeof(struct yy_buffer_state*)
-- , yyscanner);
-- if ( ! yyg->yy_buffer_stack )
-- YY_FATAL_ERROR( "out of dynamic memory in re_yyensure_buffer_stack()" );
--
-- memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
--
-- yyg->yy_buffer_stack_max = num_to_alloc;
-- yyg->yy_buffer_stack_top = 0;
-- return;
-- }
--
-- if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
--
-- /* Increase the buffer to prepare for a possible push. */
-- yy_size_t grow_size = 8 /* arbitrary grow size */;
--
-- num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
-- yyg->yy_buffer_stack = (struct yy_buffer_state**)re_yyrealloc
-- (yyg->yy_buffer_stack,
-- num_to_alloc * sizeof(struct yy_buffer_state*)
-- , yyscanner);
-- if ( ! yyg->yy_buffer_stack )
-- YY_FATAL_ERROR( "out of dynamic memory in re_yyensure_buffer_stack()" );
--
-- /* zero only the new slots.*/
-- memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
-- yyg->yy_buffer_stack_max = num_to_alloc;
-- }
--}
--
--/** Setup the input buffer state to scan directly from a user-specified character buffer.
-- * @param base the character buffer
-- * @param size the size in bytes of the character buffer
-- * @param yyscanner The scanner object.
-- * @return the newly allocated buffer state object.
-- */
--YY_BUFFER_STATE re_yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner)
--{
-- YY_BUFFER_STATE b;
--
-- if ( size < 2 ||
-- base[size-2] != YY_END_OF_BUFFER_CHAR ||
-- base[size-1] != YY_END_OF_BUFFER_CHAR )
-- /* They forgot to leave room for the EOB's. */
-- return 0;
--
-- b = (YY_BUFFER_STATE) re_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
-- if ( ! b )
-- YY_FATAL_ERROR( "out of dynamic memory in re_yy_scan_buffer()" );
--
-- b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
-- b->yy_buf_pos = b->yy_ch_buf = base;
-- b->yy_is_our_buffer = 0;
-- b->yy_input_file = 0;
-- b->yy_n_chars = b->yy_buf_size;
-- b->yy_is_interactive = 0;
-- b->yy_at_bol = 1;
-- b->yy_fill_buffer = 0;
-- b->yy_buffer_status = YY_BUFFER_NEW;
--
-- re_yy_switch_to_buffer(b ,yyscanner );
--
-- return b;
--}
--
--/** Setup the input buffer state to scan a string. The next call to re_yylex() will
-- * scan from a @e copy of @a str.
-- * @param yystr a NUL-terminated string to scan
-- * @param yyscanner The scanner object.
-- * @return the newly allocated buffer state object.
-- * @note If you want to scan bytes that may contain NUL values, then use
-- * re_yy_scan_bytes() instead.
-- */
--YY_BUFFER_STATE re_yy_scan_string (yyconst char * yystr , yyscan_t yyscanner)
--{
--
-- return re_yy_scan_bytes(yystr,strlen(yystr) ,yyscanner);
--}
--
--/** Setup the input buffer state to scan the given bytes. The next call to re_yylex() will
-- * scan from a @e copy of @a bytes.
-- * @param yybytes the byte buffer to scan
-- * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
-- * @param yyscanner The scanner object.
-- * @return the newly allocated buffer state object.
-- */
--YY_BUFFER_STATE re_yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len , yyscan_t yyscanner)
--{
-- YY_BUFFER_STATE b;
-- char *buf;
-- yy_size_t n;
-- yy_size_t i;
--
-- /* Get memory for full buffer, including space for trailing EOB's. */
-- n = _yybytes_len + 2;
-- buf = (char *) re_yyalloc(n ,yyscanner );
-- if ( ! buf )
-- YY_FATAL_ERROR( "out of dynamic memory in re_yy_scan_bytes()" );
--
-- for ( i = 0; i < _yybytes_len; ++i )
-- buf[i] = yybytes[i];
--
-- buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
--
-- b = re_yy_scan_buffer(buf,n ,yyscanner);
-- if ( ! b )
-- YY_FATAL_ERROR( "bad buffer in re_yy_scan_bytes()" );
--
-- /* It's okay to grow etc. this buffer, and we should throw it
-- * away when we're done.
-- */
-- b->yy_is_our_buffer = 1;
--
-- return b;
--}
--
--#ifndef YY_EXIT_FAILURE
--#define YY_EXIT_FAILURE 2
--#endif
--
--static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- (void)yyg;
-- (void) fprintf( stderr, "%s\n", msg );
-- exit( YY_EXIT_FAILURE );
--}
--
--/* Redefine yyless() so it works in section 3 code. */
--
--#undef yyless
--#define yyless(n) \
-- do \
-- { \
-- /* Undo effects of setting up yytext. */ \
-- int yyless_macro_arg = (n); \
-- YY_LESS_LINENO(yyless_macro_arg);\
-- yytext[yyleng] = yyg->yy_hold_char; \
-- yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
-- yyg->yy_hold_char = *yyg->yy_c_buf_p; \
-- *yyg->yy_c_buf_p = '\0'; \
-- yyleng = yyless_macro_arg; \
-- } \
-- while ( 0 )
--
--/* Accessor methods (get/set functions) to struct members. */
--
--/** Get the user-defined data for this scanner.
-- * @param yyscanner The scanner object.
-- */
--YY_EXTRA_TYPE re_yyget_extra (yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- return yyextra;
--}
--
--/** Get the current line number.
-- * @param yyscanner The scanner object.
-- */
--int re_yyget_lineno (yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
-- if (! YY_CURRENT_BUFFER)
-- return 0;
--
-- return yylineno;
--}
--
--/** Get the current column number.
-- * @param yyscanner The scanner object.
-- */
--int re_yyget_column (yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
-- if (! YY_CURRENT_BUFFER)
-- return 0;
--
-- return yycolumn;
--}
--
--/** Get the input stream.
-- * @param yyscanner The scanner object.
-- */
--FILE *re_yyget_in (yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- return yyin;
--}
--
--/** Get the output stream.
-- * @param yyscanner The scanner object.
-- */
--FILE *re_yyget_out (yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- return yyout;
--}
--
--/** Get the length of the current token.
-- * @param yyscanner The scanner object.
-- */
--yy_size_t re_yyget_leng (yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- return yyleng;
--}
--
--/** Get the current token.
-- * @param yyscanner The scanner object.
-- */
--
--char *re_yyget_text (yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- return yytext;
--}
--
--/** Set the user-defined data. This data is never touched by the scanner.
-- * @param user_defined The data to be associated with this scanner.
-- * @param yyscanner The scanner object.
-- */
--void re_yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- yyextra = user_defined ;
--}
--
--/** Set the current line number.
-- * @param _line_number line number
-- * @param yyscanner The scanner object.
-- */
--void re_yyset_lineno (int _line_number , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
-- /* lineno is only valid if an input buffer exists. */
-- if (! YY_CURRENT_BUFFER )
-- YY_FATAL_ERROR( "re_yyset_lineno called with no buffer" );
--
-- yylineno = _line_number;
--}
--
--/** Set the current column.
-- * @param _column_no column number
-- * @param yyscanner The scanner object.
-- */
--void re_yyset_column (int _column_no , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
-- /* column is only valid if an input buffer exists. */
-- if (! YY_CURRENT_BUFFER )
-- YY_FATAL_ERROR( "re_yyset_column called with no buffer" );
--
-- yycolumn = _column_no;
--}
--
--/** Set the input stream. This does not discard the current
-- * input buffer.
-- * @param _in_str A readable stream.
-- * @param yyscanner The scanner object.
-- * @see re_yy_switch_to_buffer
-- */
--void re_yyset_in (FILE * _in_str , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- yyin = _in_str ;
--}
--
--void re_yyset_out (FILE * _out_str , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- yyout = _out_str ;
--}
--
--int re_yyget_debug (yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- return yy_flex_debug;
--}
--
--void re_yyset_debug (int _bdebug , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- yy_flex_debug = _bdebug ;
--}
--
--/* Accessor methods for yylval and yylloc */
--
--YYSTYPE * re_yyget_lval (yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- return yylval;
--}
--
--void re_yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- yylval = yylval_param;
--}
--
--/* User-visible API */
--
--/* re_yylex_init is special because it creates the scanner itself, so it is
-- * the ONLY reentrant function that doesn't take the scanner as the last argument.
-- * That's why we explicitly handle the declaration, instead of using our macros.
-- */
--
--int re_yylex_init(yyscan_t* ptr_yy_globals)
--
--{
-- if (ptr_yy_globals == NULL){
-- errno = EINVAL;
-- return 1;
-- }
--
-- *ptr_yy_globals = (yyscan_t) re_yyalloc ( sizeof( struct yyguts_t ), NULL );
--
-- if (*ptr_yy_globals == NULL){
-- errno = ENOMEM;
-- return 1;
-- }
--
-- /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
-- memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
--
-- return yy_init_globals ( *ptr_yy_globals );
--}
--
--/* re_yylex_init_extra has the same functionality as re_yylex_init, but follows the
-- * convention of taking the scanner as the last argument. Note however, that
-- * this is a *pointer* to a scanner, as it will be allocated by this call (and
-- * is the reason, too, why this function also must handle its own declaration).
-- * The user defined value in the first argument will be available to re_yyalloc in
-- * the yyextra field.
-- */
--
--int re_yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
--
--{
-- struct yyguts_t dummy_yyguts;
--
-- re_yyset_extra (yy_user_defined, &dummy_yyguts);
--
-- if (ptr_yy_globals == NULL){
-- errno = EINVAL;
-- return 1;
-- }
--
-- *ptr_yy_globals = (yyscan_t) re_yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
--
-- if (*ptr_yy_globals == NULL){
-- errno = ENOMEM;
-- return 1;
-- }
--
-- /* By setting to 0xAA, we expose bugs in
-- yy_init_globals. Leave at 0x00 for releases. */
-- memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
--
-- re_yyset_extra (yy_user_defined, *ptr_yy_globals);
--
-- return yy_init_globals ( *ptr_yy_globals );
--}
--
--static int yy_init_globals (yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- /* Initialization is the same as for the non-reentrant scanner.
-- * This function is called from re_yylex_destroy(), so don't allocate here.
-- */
--
-- yyg->yy_buffer_stack = 0;
-- yyg->yy_buffer_stack_top = 0;
-- yyg->yy_buffer_stack_max = 0;
-- yyg->yy_c_buf_p = (char *) 0;
-- yyg->yy_init = 0;
-- yyg->yy_start = 0;
--
-- yyg->yy_start_stack_ptr = 0;
-- yyg->yy_start_stack_depth = 0;
-- yyg->yy_start_stack = NULL;
--
--/* Defined in main.c */
--#ifdef YY_STDINIT
-- yyin = stdin;
-- yyout = stdout;
--#else
-- yyin = (FILE *) 0;
-- yyout = (FILE *) 0;
--#endif
--
-- /* For future reference: Set errno on error, since we are called by
-- * re_yylex_init()
-- */
-- return 0;
--}
--
--/* re_yylex_destroy is for both reentrant and non-reentrant scanners. */
--int re_yylex_destroy (yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
-- /* Pop the buffer stack, destroying each element. */
-- while(YY_CURRENT_BUFFER){
-- re_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
-- YY_CURRENT_BUFFER_LVALUE = NULL;
-- re_yypop_buffer_state(yyscanner);
-- }
--
-- /* Destroy the stack itself. */
-- re_yyfree(yyg->yy_buffer_stack ,yyscanner);
-- yyg->yy_buffer_stack = NULL;
--
-- /* Destroy the start condition stack. */
-- re_yyfree(yyg->yy_start_stack ,yyscanner );
-- yyg->yy_start_stack = NULL;
--
-- /* Reset the globals. This is important in a non-reentrant scanner so the next time
-- * re_yylex() is called, initialization will occur. */
-- yy_init_globals( yyscanner);
--
-- /* Destroy the main struct (reentrant only). */
-- re_yyfree ( yyscanner , yyscanner );
-- yyscanner = NULL;
-- return 0;
--}
--
--/*
-- * Internal utility routines.
-- */
--
--#ifndef yytext_ptr
--static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- (void)yyg;
--
-- int i;
-- for ( i = 0; i < n; ++i )
-- s1[i] = s2[i];
--}
--#endif
--
--#ifdef YY_NEED_STRLEN
--static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
--{
-- int n;
-- for ( n = 0; s[n]; ++n )
-- ;
--
-- return n;
--}
--#endif
--
--void *re_yyalloc (yy_size_t size , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- (void)yyg;
-- return (void *) malloc( size );
--}
--
--void *re_yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- (void)yyg;
--
-- /* The cast to (char *) in the following accommodates both
-- * implementations that use char* generic pointers, and those
-- * that use void* generic pointers. It works with the latter
-- * because both ANSI C and C++ allow castless assignment from
-- * any pointer type to void*, and deal with argument conversions
-- * as though doing an assignment.
-- */
-- return (void *) realloc( (char *) ptr, size );
--}
--
--void re_yyfree (void * ptr , yyscan_t yyscanner)
--{
-- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-- (void)yyg;
-- free( (char *) ptr ); /* see re_yyrealloc() for (char *) cast */
--}
--
--#define YYTABLES_NAME "yytables"
--
--#line 481 "re_lexer.l"
--
--
--
--int escaped_char_value(
-- char* text,
-- uint8_t* value)
--{
-- unsigned int hex_value;
-- char hex[3];
--
-- assert(text[0] == '\\');
--
-- switch(text[1])
-- {
-- case 'x':
-- if (!isxdigit(text[2]) || !isxdigit(text[3]))
-- return 0;
-- hex[0] = text[2];
-- hex[1] = text[3];
-- hex[2] = '\0';
-- sscanf(hex, "%x", &hex_value);
-- *value = (uint8_t) hex_value;
-- break;
--
-- case 'n':
-- *value = '\n';
-- break;
--
-- case 't':
-- *value = '\t';
-- break;
--
-- case 'r':
-- *value = '\r';
-- break;
--
-- case 'f':
-- *value = '\f';
-- break;
--
-- case 'a':
-- *value = '\a';
-- break;
--
-- default:
-- *value = text[1];
-- }
--
-- return 1;
--}
--
--
--#ifdef __cplusplus
--#define RE_YY_INPUT yyinput
--#else
--#define RE_YY_INPUT input
--#endif
--
--
--int read_escaped_char(
-- yyscan_t yyscanner,
-- uint8_t* escaped_char)
--{
-- char text[4] = {0, 0, 0, 0};
--
-- text[0] = '\\';
-- text[1] = RE_YY_INPUT(yyscanner);
--
-- if (text[1] == EOF || text[1] == 0)
-- return 0;
--
-- if (text[1] == 'x')
-- {
-- text[2] = RE_YY_INPUT(yyscanner);
--
-- if (text[2] == EOF || text[2] == 0)
-- return 0;
--
-- text[3] = RE_YY_INPUT(yyscanner);
--
-- if (text[3] == EOF || text[3] == 0)
-- return 0;
-- }
--
-- return escaped_char_value(text, escaped_char);
--}
--
--
--void yyfatal(
-- yyscan_t yyscanner,
-- const char *error_message)
--{
-- jmp_buf* recovery_state = (jmp_buf*) yr_thread_storage_get_value(
-- &yr_recovery_state_key);
--
-- longjmp(*recovery_state, 1);
--}
--
--
--void yyerror(
-- yyscan_t yyscanner,
-- RE_LEX_ENVIRONMENT* lex_env,
-- const char *error_message)
--{
-- // if lex_env->last_error_code was set to some error code before
-- // don't overwrite it, we are interested in the first error, not in
-- // subsequent errors like "syntax error, unexpected $end" caused by
-- // early parser termination.
--
-- if (lex_env->last_error_code == ERROR_SUCCESS)
-- {
-- lex_env->last_error_code = ERROR_INVALID_REGULAR_EXPRESSION;
--
-- strlcpy(
-- lex_env->last_error_message,
-- error_message,
-- sizeof(lex_env->last_error_message));
-- }
--}
--
--
--int yr_parse_re_string(
-- const char* re_string,
-- RE_AST** re_ast,
-- RE_ERROR* error)
--{
-- yyscan_t yyscanner;
-- jmp_buf recovery_state;
-- RE_LEX_ENVIRONMENT lex_env;
--
-- lex_env.last_error_code = ERROR_SUCCESS;
-- lex_env.last_error_message[0] = '\0';
--
-- yr_thread_storage_set_value(&yr_recovery_state_key, &recovery_state);
--
-- if (setjmp(recovery_state) != 0)
-- return ERROR_INTERNAL_FATAL_ERROR;
--
-- FAIL_ON_ERROR(yr_re_ast_create(re_ast));
--
-- re_yylex_init(&yyscanner);
-- re_yyset_extra(*re_ast,yyscanner);
-- re_yy_scan_string(re_string,yyscanner);
-- yyparse(yyscanner, &lex_env);
-- re_yylex_destroy(yyscanner);
--
-- if (lex_env.last_error_code != ERROR_SUCCESS)
-- {
-- yr_re_ast_destroy(*re_ast);
-- *re_ast = NULL;
--
-- strlcpy(
-- error->message,
-- lex_env.last_error_message,
-- sizeof(error->message));
--
-- return lex_env.last_error_code;
-- }
--
-- return ERROR_SUCCESS;
--}
--
diff --git a/debian/patches/series b/debian/patches/series
deleted file mode 100644
index cbd88ca..0000000
--- a/debian/patches/series
+++ /dev/null
@@ -1 +0,0 @@
-0001-Regenerate-re_lexer.c-using-flex-2.6.1.patch
diff --git a/debian/rules b/debian/rules
index cceedcd..aa16aa8 100755
--- a/debian/rules
+++ b/debian/rules
@@ -8,6 +8,13 @@ override_dh_auto_configure:
dh_auto_configure -- --enable-cuckoo --enable-magic
override_dh_auto_build:
+ rm -f \
+ libyara/hex_grammar.c \
+ libyara/hex_grammar.h \
+ libyara/re_grammar.c \
+ libyara/re_grammar.h \
+ libyara/grammar.c \
+ libyara/grammar.h
dh_auto_build
$(MAKE) -C docs html
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/forensics/yara.git
More information about the forensics-changes
mailing list