Blame libglusterfs/src/graph.l

Packit b2c0d9
/*
Packit b2c0d9
   Copyright (c) 2006-2012 Red Hat, Inc. <http://www.redhat.com>
Packit b2c0d9
   This file is part of GlusterFS.
Packit b2c0d9
Packit b2c0d9
   This file is licensed to you under your choice of the GNU Lesser
Packit b2c0d9
   General Public License, version 3 or any later version (LGPLv3 or
Packit b2c0d9
   later), or the GNU General Public License, version 2 (GPLv2), in all
Packit b2c0d9
   cases as published by the Free Software Foundation.
Packit b2c0d9
*/
Packit b2c0d9
Packit b2c0d9
%x STRING
Packit b2c0d9
%option yylineno
Packit b2c0d9
%option noinput
Packit b2c0d9
%{
Packit b2c0d9
Packit b2c0d9
#define YYSTYPE char *
Packit b2c0d9
#include "glusterfs/xlator.h"
Packit b2c0d9
#include "y.tab.h"
Packit b2c0d9
#include <string.h>
Packit b2c0d9
#define START_STRSIZE	32
Packit b2c0d9
Packit b2c0d9
static char *text;
Packit b2c0d9
static int text_asize;
Packit b2c0d9
static int text_size;
Packit b2c0d9
Packit b2c0d9
void append_string(const char *str, int size)
Packit b2c0d9
{
Packit b2c0d9
	int new_size = text_size + size + 1;
Packit b2c0d9
	if (new_size > text_asize) {
Packit b2c0d9
		new_size += START_STRSIZE - 1;
Packit b2c0d9
		new_size &= -START_STRSIZE;
Packit b2c0d9
                if (!text) {
Packit b2c0d9
                        text = GF_CALLOC (1, new_size,
Packit b2c0d9
                                          gf_common_mt_char);
Packit b2c0d9
                } else {
Packit b2c0d9
                        text = GF_REALLOC (text, new_size);
Packit b2c0d9
                }
Packit b2c0d9
                if (!text) {
Packit b2c0d9
                        return;
Packit b2c0d9
                }
Packit b2c0d9
		text_asize = new_size;
Packit b2c0d9
	}
Packit b2c0d9
        memcpy(text + text_size, str, size);
Packit b2c0d9
	text_size += size;
Packit b2c0d9
	text[text_size] = 0;
Packit b2c0d9
}
Packit b2c0d9
Packit b2c0d9
%}
Packit b2c0d9
Packit b2c0d9
VOLUME [v][o][l][u][m][e]
Packit b2c0d9
END    [e][n][d]
Packit b2c0d9
SUB    [s][u][b]
Packit b2c0d9
OPTION [o][p][t][i][o][n]
Packit b2c0d9
TYPE   [t][y][p][e]
Packit b2c0d9
%%
Packit b2c0d9
\#.*                   ;
Packit b2c0d9
{VOLUME}               return VOLUME_BEGIN;
Packit b2c0d9
{TYPE}                 return TYPE;
Packit b2c0d9
{END}[-]{VOLUME}       return VOLUME_END;
Packit b2c0d9
{SUB}{VOLUME}[Ss]      return SUBVOLUME;
Packit b2c0d9
{OPTION}               return OPTION;
Packit b2c0d9
\"                     BEGIN(STRING);
Packit b2c0d9
<STRING>{
Packit b2c0d9
       [^\n\"\\]* {    append_string (yytext, yyleng); }
Packit b2c0d9
       \\.        {    append_string (yytext + 1, yyleng - 1); }
Packit b2c0d9
       \"         {
Packit b2c0d9
                       if (0) {
Packit b2c0d9
                              yyunput (0, NULL);
Packit b2c0d9
                       }
Packit b2c0d9
                       BEGIN (INITIAL);
Packit b2c0d9
                       graphyylval = text;
Packit b2c0d9
                       return STRING_TOK;
Packit b2c0d9
       }
Packit b2c0d9
}
Packit b2c0d9
[^ \t\r\n\"\\]+ {    graphyylval = gf_strdup (yytext) ; return ID; }
Packit b2c0d9
[ \t\r\n]+             ;
Packit b2c0d9
%%