|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 1/2] xl: disk parsing preparation for empty cdrom devices
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>
---
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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |