[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/2] xl: disk parsing preparation for empty cdrom devices
On Wed, 2012-07-25 at 16:22 +0100, Ian Jackson wrote: > Prepare the ground for parsing the xend empty cdrom syntax, by > separating out some non-functional changes as this pre-patch: > > * Clarify the disk syntax documentation wording to refer to deprecated > syntaxes too. > > * Make DPC in libxlu_disk_l.l useable in the helper functions as well > as in lexer rules, by providing two definitions, each in force in > the appropriate parts of the file. > > * Break the <vdev>[:<devtype>] parsing out into a helper function, > `vdev_and_devtype'. > > No functional change. > > Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > --- > docs/misc/xl-disk-configuration.txt | 11 ++-- > tools/libxl/libxlu_disk_l.c | 112 > ++++++++++++++++++----------------- > tools/libxl/libxlu_disk_l.h | 10 +--- > tools/libxl/libxlu_disk_l.l | 44 +++++++++----- > 4 files changed, 93 insertions(+), 84 deletions(-) > > diff --git a/docs/misc/xl-disk-configuration.txt > b/docs/misc/xl-disk-configuration.txt > index 3bf20bf..740b8f6 100644 > --- a/docs/misc/xl-disk-configuration.txt > +++ b/docs/misc/xl-disk-configuration.txt > @@ -164,16 +164,17 @@ information to be interpreted by > /etc/xen/scripts/block-<script>. > > > > -================================== > -DEPRECATED PARAMETERS AND PREFIXES > -================================== > +============================================ > +DEPRECATED PARAMETERS, PREFIXES AND SYNTAXES > +============================================ > > -Deprecated values are acceptable and are intended work compatibly with > +Deprecated forms are acceptable and are intended work compatibly with > xend and xl from xen 4.1. In future they may print a warning. > Support for deprecated parameters and syntaxes are likely to be > dropped in future versions of xl. > > -There is also support for a deprecated old syntax for <diskspec>: > + > +There is support for a deprecated old syntax for <diskspec>: > > [<format>:][<target>],<vdev>[:<devtype>],<access> (deprecated) > > diff --git a/tools/libxl/libxlu_disk_l.c b/tools/libxl/libxlu_disk_l.c > index 2f0f283..aac816a 100644 > --- a/tools/libxl/libxlu_disk_l.c > +++ b/tools/libxl/libxlu_disk_l.c > @@ -794,8 +794,6 @@ void xlu__disk_yyset_column(int column_no, yyscan_t > yyscanner); > * and particularly to avoid repeating boilerplate values such as > * DPC->disk, yytext, etc. */ > > -#define DPC ((DiskParseContext*)yyextra) > - > /* Sets an enum, checking it hasn't already been set to a different value */ > #define DSET(dpc,member,enumname,str,valname) do{ \ > if (dpc->disk->member != LIBXL_DISK_##enumname##_UNKNOWN && \ > @@ -828,6 +826,8 @@ static void savestring(DiskParseContext *dpc, const char > *what_respecified, > *update = strdup(value); > } > > +#define DPC dpc /* our convention in lexer helper functions */ > + > /* Sets ->readwrite from the string. This ought to be an enum, perhaps. */ > static void setaccess(DiskParseContext *dpc, const char *str) { > if (!strcmp(str, "r") || !strcmp(str, "ro")) { > @@ -859,8 +859,32 @@ static void setbackendtype(DiskParseContext *dpc, const > char *str) { > > #define DEPRECATE(usewhatinstead) /* not currently reported */ > > +/* Handles a vdev positional parameter which includes a devtype. */ > +static int vdev_and_devtype(DiskParseContext *dpc, char *str) { > + /* returns 1 if it was <vdev>:<devtype>, 0 (doing nothing) otherwise */ > + char *colon = strrchr(str, ':'); > + if (!colon) > + return 0; > + > + DEPRECATE("use `devtype=...'"); > + *colon++ = 0; > + SAVESTRING("vdev", vdev, str); > + > + if (!strcmp(colon,"cdrom")) { > + DPC->disk->is_cdrom = 1; > + } else if (!strcmp(colon,"disk")) { > + DPC->disk->is_cdrom = 0; > + } else { > + xlu__disk_err(DPC,colon,"unknown deprecated type"); > + } > + return 1; > +} > + > +#undef DPC /* needs to be defined differently the actual lexer */ > +#define DPC ((DiskParseContext*)yyextra) > > -#line 864 "libxlu_disk_l.c" > + > +#line 888 "libxlu_disk_l.c" > > #define INITIAL 0 > #define LEXERR 1 > @@ -1096,12 +1120,12 @@ YY_DECL > register int yy_act; > struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; > > -#line 126 "libxlu_disk_l.l" > +#line 150 "libxlu_disk_l.l" > > > /*----- the scanner rules which do the parsing -----*/ > > -#line 1105 "libxlu_disk_l.c" > +#line 1129 "libxlu_disk_l.c" > > if ( !yyg->yy_init ) > { > @@ -1222,72 +1246,72 @@ do_action: /* This label is used only to access > EOF actions. */ > case 1: > /* rule 1 can match eol */ > YY_RULE_SETUP > -#line 130 "libxlu_disk_l.l" > +#line 154 "libxlu_disk_l.l" > { /* ignore whitespace before parameters */ } > YY_BREAK > /* ordinary parameters setting enums or strings */ > case 2: > /* rule 2 can match eol */ > YY_RULE_SETUP > -#line 134 "libxlu_disk_l.l" > +#line 158 "libxlu_disk_l.l" > { STRIP(','); setformat(DPC, FROMEQUALS); } > YY_BREAK > case 3: > YY_RULE_SETUP > -#line 136 "libxlu_disk_l.l" > +#line 160 "libxlu_disk_l.l" > { DPC->disk->is_cdrom = 1; } > YY_BREAK > case 4: > YY_RULE_SETUP > -#line 137 "libxlu_disk_l.l" > +#line 161 "libxlu_disk_l.l" > { DPC->disk->is_cdrom = 1; } > YY_BREAK > case 5: > YY_RULE_SETUP > -#line 138 "libxlu_disk_l.l" > +#line 162 "libxlu_disk_l.l" > { DPC->disk->is_cdrom = 0; } > YY_BREAK > case 6: > /* rule 6 can match eol */ > YY_RULE_SETUP > -#line 139 "libxlu_disk_l.l" > +#line 163 "libxlu_disk_l.l" > { xlu__disk_err(DPC,yytext,"unknown value for type"); } > YY_BREAK > case 7: > /* rule 7 can match eol */ > YY_RULE_SETUP > -#line 141 "libxlu_disk_l.l" > +#line 165 "libxlu_disk_l.l" > { STRIP(','); setaccess(DPC, FROMEQUALS); } > YY_BREAK > case 8: > /* rule 8 can match eol */ > YY_RULE_SETUP > -#line 142 "libxlu_disk_l.l" > +#line 166 "libxlu_disk_l.l" > { STRIP(','); setbackendtype(DPC,FROMEQUALS); } > YY_BREAK > case 9: > /* rule 9 can match eol */ > YY_RULE_SETUP > -#line 144 "libxlu_disk_l.l" > +#line 168 "libxlu_disk_l.l" > { STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); } > YY_BREAK > case 10: > /* rule 10 can match eol */ > YY_RULE_SETUP > -#line 145 "libxlu_disk_l.l" > +#line 169 "libxlu_disk_l.l" > { STRIP(','); SAVESTRING("script", script, FROMEQUALS); } > YY_BREAK > /* the target magic parameter, eats the rest of the string */ > case 11: > YY_RULE_SETUP > -#line 149 "libxlu_disk_l.l" > +#line 173 "libxlu_disk_l.l" > { STRIP(','); SAVESTRING("target", pdev_path, FROMEQUALS); } > YY_BREAK > /* unknown parameters */ > case 12: > /* rule 12 can match eol */ > YY_RULE_SETUP > -#line 153 "libxlu_disk_l.l" > +#line 177 "libxlu_disk_l.l" > { xlu__disk_err(DPC,yytext,"unknown parameter"); } > YY_BREAK > /* deprecated prefixes */ > @@ -1295,7 +1319,7 @@ YY_RULE_SETUP > * matched the whole string, so these patterns take precedence */ > case 13: > YY_RULE_SETUP > -#line 160 "libxlu_disk_l.l" > +#line 184 "libxlu_disk_l.l" > { > STRIP(':'); > DPC->had_depr_prefix=1; DEPRECATE("use `[format=]...,'"); > @@ -1304,7 +1328,7 @@ YY_RULE_SETUP > YY_BREAK > case 14: > YY_RULE_SETUP > -#line 166 "libxlu_disk_l.l" > +#line 190 "libxlu_disk_l.l" > { > STRIP(':'); > DPC->had_depr_prefix=1; DEPRECATE("use `script=...'"); > @@ -1316,12 +1340,12 @@ case 15: > yyg->yy_c_buf_p = yy_cp = yy_bp + 8; > YY_DO_BEFORE_ACTION; /* set up yytext again */ > YY_RULE_SETUP > -#line 172 "libxlu_disk_l.l" > +#line 196 "libxlu_disk_l.l" > { DPC->had_depr_prefix=1; DEPRECATE(0); } > YY_BREAK > case 16: > YY_RULE_SETUP > -#line 173 "libxlu_disk_l.l" > +#line 197 "libxlu_disk_l.l" > { DPC->had_depr_prefix=1; DEPRECATE(0); } > YY_BREAK > case 17: > @@ -1329,7 +1353,7 @@ case 17: > yyg->yy_c_buf_p = yy_cp = yy_bp + 4; > YY_DO_BEFORE_ACTION; /* set up yytext again */ > YY_RULE_SETUP > -#line 174 "libxlu_disk_l.l" > +#line 198 "libxlu_disk_l.l" > { DPC->had_depr_prefix=1; DEPRECATE(0); } > YY_BREAK > case 18: > @@ -1337,7 +1361,7 @@ case 18: > yyg->yy_c_buf_p = yy_cp = yy_bp + 6; > YY_DO_BEFORE_ACTION; /* set up yytext again */ > YY_RULE_SETUP > -#line 175 "libxlu_disk_l.l" > +#line 199 "libxlu_disk_l.l" > { DPC->had_depr_prefix=1; DEPRECATE(0); } > YY_BREAK > case 19: > @@ -1345,7 +1369,7 @@ case 19: > yyg->yy_c_buf_p = yy_cp = yy_bp + 5; > YY_DO_BEFORE_ACTION; /* set up yytext again */ > YY_RULE_SETUP > -#line 176 "libxlu_disk_l.l" > +#line 200 "libxlu_disk_l.l" > { DPC->had_depr_prefix=1; DEPRECATE(0); } > YY_BREAK > case 20: > @@ -1353,13 +1377,13 @@ case 20: > yyg->yy_c_buf_p = yy_cp = yy_bp + 4; > YY_DO_BEFORE_ACTION; /* set up yytext again */ > YY_RULE_SETUP > -#line 177 "libxlu_disk_l.l" > +#line 201 "libxlu_disk_l.l" > { DPC->had_depr_prefix=1; DEPRECATE(0); } > YY_BREAK > case 21: > /* rule 21 can match eol */ > YY_RULE_SETUP > -#line 179 "libxlu_disk_l.l" > +#line 203 "libxlu_disk_l.l" > { > xlu__disk_err(DPC,yytext,"unknown deprecated disk prefix"); > return 0; > @@ -1369,9 +1393,8 @@ YY_RULE_SETUP > case 22: > /* rule 22 can match eol */ > YY_RULE_SETUP > -#line 186 "libxlu_disk_l.l" > +#line 210 "libxlu_disk_l.l" > { > - char *colon; > STRIP(','); > > if (DPC->err) { > @@ -1382,19 +1405,8 @@ YY_RULE_SETUP > DPC->disk->format == LIBXL_DISK_FORMAT_UNKNOWN) { > setformat(DPC,yytext); > } else if (!DPC->disk->vdev) { > - colon = strrchr(yytext, ':'); > - if (colon) { > - DEPRECATE("use `devtype=...'"); > - *colon++ = 0; > - if (!strcmp(colon,"cdrom")) { > - DPC->disk->is_cdrom = 1; > - } else if (!strcmp(colon,"disk")) { > - DPC->disk->is_cdrom = 0; > - } else { > - xlu__disk_err(DPC,colon,"unknown deprecated type"); > - } > - } > - SAVESTRING("vdev", vdev, yytext); > + if (!vdev_and_devtype(DPC,yytext)) > + SAVESTRING("vdev", vdev, yytext); > } else if (!DPC->access_set) { > DPC->access_set = 1; > setaccess(DPC,yytext); > @@ -1406,7 +1418,7 @@ YY_RULE_SETUP > YY_BREAK > case 23: > YY_RULE_SETUP > -#line 220 "libxlu_disk_l.l" > +#line 232 "libxlu_disk_l.l" > { > BEGIN(LEXERR); > yymore(); > @@ -1414,17 +1426,17 @@ YY_RULE_SETUP > YY_BREAK > case 24: > YY_RULE_SETUP > -#line 224 "libxlu_disk_l.l" > +#line 236 "libxlu_disk_l.l" > { > xlu__disk_err(DPC,yytext,"bad disk syntax"); return 0; > } > YY_BREAK > case 25: > YY_RULE_SETUP > -#line 227 "libxlu_disk_l.l" > +#line 239 "libxlu_disk_l.l" > YY_FATAL_ERROR( "flex scanner jammed" ); > YY_BREAK > -#line 1428 "libxlu_disk_l.c" > +#line 1440 "libxlu_disk_l.c" > case YY_STATE_EOF(INITIAL): > case YY_STATE_EOF(LEXERR): > yyterminate(); > @@ -2516,12 +2528,4 @@ void xlu__disk_yyfree (void * ptr , yyscan_t yyscanner) > > #define YYTABLES_NAME "yytables" > > -#line 227 "libxlu_disk_l.l" > - > -/* > - * Local variables: > - * mode: C > - * c-basic-offset: 4 > - * indent-tabs-mode: nil > - * End: > - */ > +#line 239 "libxlu_disk_l.l" > diff --git a/tools/libxl/libxlu_disk_l.h b/tools/libxl/libxlu_disk_l.h > index a3fbd72..72b82cb 100644 > --- a/tools/libxl/libxlu_disk_l.h > +++ b/tools/libxl/libxlu_disk_l.h > @@ -340,16 +340,8 @@ extern int xlu__disk_yylex (yyscan_t yyscanner); > #undef YY_DECL > #endif > > -#line 227 "libxlu_disk_l.l" > +#line 239 "libxlu_disk_l.l" > > #line 346 "libxlu_disk_l.h" > #undef xlu__disk_yyIN_HEADER > #endif /* xlu__disk_yyHEADER_H */ > - > -/* > - * Local variables: > - * mode: C > - * c-basic-offset: 4 > - * indent-tabs-mode: nil > - * End: > - */ > diff --git a/tools/libxl/libxlu_disk_l.l b/tools/libxl/libxlu_disk_l.l > index a3e7180..9fbc1ad 100644 > --- a/tools/libxl/libxlu_disk_l.l > +++ b/tools/libxl/libxlu_disk_l.l > @@ -45,8 +45,6 @@ void xlu__disk_yyset_column(int column_no, yyscan_t > yyscanner); > * and particularly to avoid repeating boilerplate values such as > * DPC->disk, yytext, etc. */ > > -#define DPC ((DiskParseContext*)yyextra) > - > /* Sets an enum, checking it hasn't already been set to a different value */ > #define DSET(dpc,member,enumname,str,valname) do{ \ > if (dpc->disk->member != LIBXL_DISK_##enumname##_UNKNOWN && \ > @@ -79,6 +77,8 @@ static void savestring(DiskParseContext *dpc, const char > *what_respecified, > *update = strdup(value); > } > > +#define DPC dpc /* our convention in lexer helper functions */ > + > /* Sets ->readwrite from the string. This ought to be an enum, perhaps. */ > static void setaccess(DiskParseContext *dpc, const char *str) { > if (!strcmp(str, "r") || !strcmp(str, "ro")) { > @@ -110,6 +110,30 @@ static void setbackendtype(DiskParseContext *dpc, const > char *str) { > > #define DEPRECATE(usewhatinstead) /* not currently reported */ > > +/* Handles a vdev positional parameter which includes a devtype. */ > +static int vdev_and_devtype(DiskParseContext *dpc, char *str) { > + /* returns 1 if it was <vdev>:<devtype>, 0 (doing nothing) otherwise */ > + char *colon = strrchr(str, ':'); > + if (!colon) > + return 0; > + > + DEPRECATE("use `devtype=...'"); > + *colon++ = 0; > + SAVESTRING("vdev", vdev, str); > + > + if (!strcmp(colon,"cdrom")) { > + DPC->disk->is_cdrom = 1; > + } else if (!strcmp(colon,"disk")) { > + DPC->disk->is_cdrom = 0; > + } else { > + xlu__disk_err(DPC,colon,"unknown deprecated type"); > + } > + return 1; > +} > + > +#undef DPC /* needs to be defined differently the actual lexer */ > +#define DPC ((DiskParseContext*)yyextra) > + > %} > > %option warn > @@ -184,7 +208,6 @@ phy:/.* { DPC->had_depr_prefix=1; > DEPRECATE(0); } > /* positional parameters */ > > [^=,]*,|[^=,]+,? { > - char *colon; > STRIP(','); > > if (DPC->err) { > @@ -195,19 +218,8 @@ phy:/.* { DPC->had_depr_prefix=1; > DEPRECATE(0); } > DPC->disk->format == LIBXL_DISK_FORMAT_UNKNOWN) { > setformat(DPC,yytext); > } else if (!DPC->disk->vdev) { > - colon = strrchr(yytext, ':'); > - if (colon) { > - DEPRECATE("use `devtype=...'"); > - *colon++ = 0; > - if (!strcmp(colon,"cdrom")) { > - DPC->disk->is_cdrom = 1; > - } else if (!strcmp(colon,"disk")) { > - DPC->disk->is_cdrom = 0; > - } else { > - xlu__disk_err(DPC,colon,"unknown deprecated type"); > - } > - } > - SAVESTRING("vdev", vdev, yytext); > + if (!vdev_and_devtype(DPC,yytext)) > + SAVESTRING("vdev", vdev, yytext); > } else if (!DPC->access_set) { > DPC->access_set = 1; > setaccess(DPC,yytext); > -- > 1.7.2.5 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |