diff options
| author | Anand Avati <avati@gluster.com> | 2010-06-07 12:37:34 +0000 | 
|---|---|---|
| committer | Anand V. Avati <avati@dev.gluster.com> | 2010-06-07 11:58:50 -0700 | 
| commit | 79241696fbdebe2583298f12cbaee068ce60c655 (patch) | |
| tree | 42e60d351e328fa34f17242c6c3359a8c01e8fa3 /libglusterfs/src/graph.l | |
| parent | c4ebd25a176d6d51d702b1009e261c3c27237a48 (diff) | |
dynamic volume changes for graph replacement
Signed-off-by: Anand V. Avati <avati@blackhole.gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 971 (dynamic volume management)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=971
Diffstat (limited to 'libglusterfs/src/graph.l')
| -rw-r--r-- | libglusterfs/src/graph.l | 87 | 
1 files changed, 87 insertions, 0 deletions
diff --git a/libglusterfs/src/graph.l b/libglusterfs/src/graph.l new file mode 100644 index 000000000..8d9d2dc36 --- /dev/null +++ b/libglusterfs/src/graph.l @@ -0,0 +1,87 @@ +/* +   Copyright (c) 2006-2009 Gluster, Inc. <http://www.gluster.com> +   This file is part of GlusterFS. + +   GlusterFS is free software; you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published +   by the Free Software Foundation; either version 3 of the License, +   or (at your option) any later version. + +   GlusterFS is distributed in the hope that it will be useful, but +   WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see +   <http://www.gnu.org/licenses/>. +*/ + + +%x STRING +%option yylineno +%option noinput +%{ + +#define YYSTYPE char * +#include "xlator.h" +#include "y.tab.h" +#include <string.h> +#define START_STRSIZE	32 + +static char *text; +static int text_asize; +static int text_size; + +void append_string(const char *str, int size) +{ +	int new_size = text_size + size + 1; +	if (new_size > text_asize) { +		new_size += START_STRSIZE - 1; +		new_size &= -START_STRSIZE; +                if (!text) { +                        text = GF_CALLOC (1, new_size, +                                          gf_common_mt_char); +                } else { +                        text = GF_REALLOC (text, new_size); +                } +                if (!text) +                        gf_log ("parser", GF_LOG_ERROR, +                                "out of memory"); +		text_asize = new_size; +	} +	memcpy(text + text_size, str, size); +	text_size += size; +	text[text_size] = 0; +} + +%} + +VOLUME [v][o][l][u][m][e] +END    [e][n][d] +SUB    [s][u][b] +OPTION [o][p][t][i][o][n] +TYPE   [t][y][p][e] +%% +\#.*                   ; +{VOLUME}               return VOLUME_BEGIN; +{TYPE}                 return TYPE; +{END}[-]{VOLUME}       return VOLUME_END; +{SUB}{VOLUME}[Ss]      return SUBVOLUME; +{OPTION}               return OPTION; +\"                     BEGIN(STRING); +<STRING>{ +       [^\n\"\\]* {    append_string (yytext, yyleng); } +       \\.        {    append_string (yytext + 1, yyleng - 1); } +       \"         { +                       if (0) { +                              yyunput (0, NULL); +                       } +                       BEGIN (INITIAL); +                       yylval = text; +                       return STRING_TOK; +       } +} +[^ \t\r\n\"\\]+ {    yylval = gf_strdup (yytext) ; return ID; } +[ \t\r\n]+             ; +%%  | 
