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