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