diff mbox

[v3] libxl: QED disks support

Message ID 20161212141922.26374-1-cbosdonnat@suse.com (mailing list archive)
State New, archived
Headers show

Commit Message

Cedric Bosdonnat Dec. 12, 2016, 2:19 p.m. UTC
Qdisk supports qcow and qcow2, extend it to also support qed disk
format.

Signed-off-by: Cédric Bosdonnat <cbosdonnat@suse.com>
---
 v2:
   * Add qed to the list for possible format values in xl-disk-configuration.txt
   * Add LIBXL_HAVE_QED

 v3:
   * Remove the qed: obsolete prefix support
---
 docs/misc/xl-disk-configuration.txt |    2 +-
 tools/libxl/libxl.h                 |    7 +
 tools/libxl/libxl_device.c          |    1 +
 tools/libxl/libxl_dm.c              |    1 +
 tools/libxl/libxl_types.idl         |    1 +
 tools/libxl/libxl_utils.c           |    2 +
 tools/libxl/libxlu_disk_l.c         | 1018 ++++++++++++++++++-----------------
 tools/libxl/libxlu_disk_l.h         |   53 +-
 tools/libxl/libxlu_disk_l.l         |    1 +
 9 files changed, 546 insertions(+), 540 deletions(-)

Comments

Ian Jackson Dec. 12, 2016, 5:36 p.m. UTC | #1
Cédric Bosdonnat writes ("[PATCH v3] libxl: QED disks support"):
> Qdisk supports qcow and qcow2, extend it to also support qed disk
> format.

The patch is good.

I have a qualm, though.  I think this would increase our security
support footprint to include the qemu qed disk format driver.

Specifically:

 * Does the qed format contain a builtin way to refer to other files,
   like qcow does ?  Paradoxically, if it does not, then it is a
   bigger risk for us: because then it might be reasonable for a user
   to feed an untrusted qed image file to xl, for use with a
   likewise-untrusted guest.  That means that image-handling bugs in
   qed would be security bugs which we might have to do security
   response for.

 * We should at least consider the possibility that qed might be
   vulnerable to anomalous guest behaviour.  I don't know enough about
   qed to say much about that.

So I would be happy with this patch if it came with a hunk editing
docs/misc/qemu-xen-security to say something like:

 +  - backing storage image format: raw, qcow, qcow2, vhd

(And we might want to drop vhd...)

Ian.
Cedric Bosdonnat Dec. 13, 2016, 8:15 a.m. UTC | #2
Hi Ian,

On Mon, 2016-12-12 at 17:36 +0000, Ian Jackson wrote:
> Cédric Bosdonnat writes ("[PATCH v3] libxl: QED disks support"):
> > Qdisk supports qcow and qcow2, extend it to also support qed disk
> > format.
> 
> The patch is good.
> 
> I have a qualm, though.  I think this would increase our security
> support footprint to include the qemu qed disk format driver.
> 
> Specifically:
> 
>  * Does the qed format contain a builtin way to refer to other files,
>    like qcow does ?  Paradoxically, if it does not, then it is a
>    bigger risk for us: because then it might be reasonable for a user
>    to feed an untrusted qed image file to xl, for use with a
>    likewise-untrusted guest.  That means that image-handling bugs in
>    qed would be security bugs which we might have to do security
>    response for.

QED does support backing files, not sure if this is a good or bad news
on the security topic.

>  * We should at least consider the possibility that qed might be
>    vulnerable to anomalous guest behaviour.  I don't know enough about
>    qed to say much about that.
> 
> So I would be happy with this patch if it came with a hunk editing
> docs/misc/qemu-xen-security to say something like:
> 
>  +  - backing storage image format: raw, qcow, qcow2, vhd
> 
> (And we might want to drop vhd...)

I'm not the one deciding what is supported and what is not. Just tell
me what I should add in the patch regarding that and I'll add it.

--
Cedric
Ian Jackson Dec. 13, 2016, 4:12 p.m. UTC | #3
Cedric Bosdonnat writes ("Re: [PATCH v3] libxl: QED disks support"):
> On Mon, 2016-12-12 at 17:36 +0000, Ian Jackson wrote:
> > Specifically:
> > 
> >  * Does the qed format contain a builtin way to refer to other files,
> >    like qcow does ?  Paradoxically, if it does not, then it is a
> >    bigger risk for us: because then it might be reasonable for a user
> >    to feed an untrusted qed image file to xl, for use with a
> >    likewise-untrusted guest.  That means that image-handling bugs in
> >    qed would be security bugs which we might have to do security
> >    response for.
> 
> QED does support backing files, not sure if this is a good or bad news
> on the security topic.

It's bad news from on the general security front, because (if I
understand you correctly) it means that a malicious QED image can
cause qemu to access any file on the disk.

But it is good news from the point of view of the Xen Project Security
Team because it means that any situation where a malicious QED image
can cause qemu to malfunction cannot itself be a security bug :-).

> > So I would be happy with this patch if it came with a hunk editing
> > docs/misc/qemu-xen-security to say something like:
> > 
> >  +  - backing storage image format: raw, qcow, qcow2, vhd
> > 
> > (And we might want to drop vhd...)
> 
> I'm not the one deciding what is supported and what is not. Just tell
> me what I should add in the patch regarding that and I'll add it.

Sure.

Please add, for now, this line:

  - backing storage image format: raw, qcow, qcow2, vhd

to docs/misc/qemu-xen-security, after "- storage".

I am certainly open to being convinced that we should add qed to this
list, but I would like someone who understands it to make the case
(ie, explain why the risk is low).

Thanks,
Ian.
diff mbox

Patch

diff --git a/docs/misc/xl-disk-configuration.txt b/docs/misc/xl-disk-configuration.txt
index b3402bc33a..926889b23d 100644
--- a/docs/misc/xl-disk-configuration.txt
+++ b/docs/misc/xl-disk-configuration.txt
@@ -87,7 +87,7 @@  format
 ------
 
 Description:           Specifies the format of image file.
-Supported values:      raw, qcow, qcow2, vhd
+Supported values:      raw, qcow, qcow2, vhd, qed
 Deprecated values:     None
 Default value:         raw
 
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index acbf47690e..3924464588 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -1012,6 +1012,13 @@  void libxl_mac_copy(libxl_ctx *ctx, libxl_mac *dst, const libxl_mac *src);
  */
 #define LIBXL_HAVE_MEMKB_64BITS 1
 
+/*
+ * LIBXL_HAVE_QED
+ *
+ * If this is defined QED disk formats can be used for both HVM and PV guests.
+ */
+#define LIBXL_HAVE_QED 1
+
 typedef char **libxl_string_list;
 void libxl_string_list_dispose(libxl_string_list *sl);
 int libxl_string_list_length(const libxl_string_list *sl);
diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c
index 3e7a1026c4..6c34141072 100644
--- a/tools/libxl/libxl_device.c
+++ b/tools/libxl/libxl_device.c
@@ -411,6 +411,7 @@  char *libxl__device_disk_string_of_format(libxl_disk_format format)
         case LIBXL_DISK_FORMAT_VHD: return "vhd";
         case LIBXL_DISK_FORMAT_RAW:
         case LIBXL_DISK_FORMAT_EMPTY: return "aio";
+        case LIBXL_DISK_FORMAT_QED: return "qed";
         default: return NULL;
     }
 }
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index ad366a8cd3..8b373422f1 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -677,6 +677,7 @@  static const char *qemu_disk_format_string(libxl_disk_format format)
     case LIBXL_DISK_FORMAT_VHD: return "vpc";
     case LIBXL_DISK_FORMAT_RAW: return "raw";
     case LIBXL_DISK_FORMAT_EMPTY: return NULL;
+    case LIBXL_DISK_FORMAT_QED: return "qed";
     default: return NULL;
     }
 }
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index a32c751b0e..a612d1f4ff 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -114,6 +114,7 @@  libxl_disk_format = Enumeration("disk_format", [
     (3, "VHD"),
     (4, "RAW"),
     (5, "EMPTY"),
+    (6, "QED"),
     ])
 
 libxl_disk_backend = Enumeration("disk_backend", [
diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
index 49cbaa5b70..507ee56c7c 100644
--- a/tools/libxl/libxl_utils.c
+++ b/tools/libxl/libxl_utils.c
@@ -317,6 +317,8 @@  int libxl_string_to_backend(libxl_ctx *ctx, char *s, libxl_disk_backend *backend
             *backend = LIBXL_DISK_BACKEND_QDISK;
         } else if (!strcmp(p, "qcow2")) {
             *backend = LIBXL_DISK_BACKEND_QDISK;
+        } else if (!strcmp(p, "qed")) {
+            *backend = LIBXL_DISK_BACKEND_QDISK;
         }
     }
 out:
diff --git a/tools/libxl/libxlu_disk_l.c b/tools/libxl/libxlu_disk_l.c
index 54160caa66..fa09a69303 100644
--- a/tools/libxl/libxlu_disk_l.c
+++ b/tools/libxl/libxlu_disk_l.c
@@ -1,10 +1,7 @@ 
 #line 2 "libxlu_disk_l.c"
-#line 31 "libxlu_disk_l.l"
 #include "libxl_osdeps.h" /* must come before any other headers */
 
-
-
-#line 8 "libxlu_disk_l.c"
+#line 5 "libxlu_disk_l.c"
 
 #define  YY_INT_ALIGNED short int
 
@@ -12,8 +9,8 @@ 
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 39
+#define YY_FLEX_MINOR_VERSION 6
+#define YY_FLEX_SUBMINOR_VERSION 1
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -92,25 +89,13 @@  typedef unsigned int flex_uint32_t;
 
 #endif /* ! FLEXINT_H */
 
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif	/* defined (__STDC__) */
-#endif	/* ! __cplusplus */
-
-#ifdef YY_USE_CONST
+/* TODO: this is always defined, so inline it */
 #define yyconst const
+
+#if defined(__GNUC__) && __GNUC__ >= 3
+#define yynoreturn __attribute__((__noreturn__))
 #else
-#define yyconst
+#define yynoreturn
 #endif
 
 /* Returned upon end-of-file. */
@@ -223,12 +208,12 @@  struct yy_buffer_state
 	/* Size of input buffer in bytes, not including room for EOB
 	 * characters.
 	 */
-	yy_size_t yy_buf_size;
+	int yy_buf_size;
 
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
 	 */
-	yy_size_t yy_n_chars;
+	int yy_n_chars;
 
 	/* Whether we "own" the buffer - i.e., we know we created it,
 	 * and can realloc() it to grow it, and should free() it to
@@ -307,7 +292,7 @@  static void xlu__disk_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yys
 
 YY_BUFFER_STATE xlu__disk_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
 YY_BUFFER_STATE xlu__disk_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
-YY_BUFFER_STATE xlu__disk_yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner );
+YY_BUFFER_STATE xlu__disk_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
 
 void *xlu__disk_yyalloc (yy_size_t ,yyscan_t yyscanner );
 void *xlu__disk_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
@@ -337,7 +322,7 @@  void xlu__disk_yyfree (void * ,yyscan_t yyscanner );
 
 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
 
-#define xlu__disk_yywrap(yyscanner) 1
+#define xlu__disk_yywrap(yyscanner) (/*CONSTCOND*/1)
 #define YY_SKIP_YYWRAP
 
 typedef unsigned char YY_CHAR;
@@ -349,7 +334,7 @@  typedef int yy_state_type;
 static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  ,yyscan_t yyscanner);
 static int yy_get_next_buffer (yyscan_t yyscanner );
-static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
+static void yynoreturn yy_fatal_error (yyconst char* msg ,yyscan_t yyscanner );
 
 /* Done after the current pattern has been matched and before the
  * corresponding action - sets up yytext.
@@ -357,7 +342,7 @@  static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
 #define YY_DO_BEFORE_ACTION \
 	yyg->yytext_ptr = yy_bp; \
 	yyg->yytext_ptr -= yyg->yy_more_len; \
-	yyleng = (size_t) (yy_cp - yyg->yytext_ptr); \
+	yyleng = (int) (yy_cp - yyg->yytext_ptr); \
 	yyg->yy_hold_char = *yy_cp; \
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
@@ -371,7 +356,7 @@  struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_acclist[575] =
+static yyconst flex_int16_t yy_acclist[576] =
     {   0,
        35,   35,   37,   33,   34,   36, 8193,   33,   34,   36,
     16385, 8193,   33,   36,16385,   33,   34,   36,   34,   36,
@@ -384,61 +369,61 @@  static yyconst flex_int16_t yy_acclist[575] =
      8193,   33,   33, 8224,   33,16416,   33,   33,   33,   33,
        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
 
-       33,   33,   33,   33,   33,   33,   33,   33,   33,   35,
-     8193,   33, 8193,   33, 8193, 8224,   33, 8224,   33, 8224,
-       23,   33,   33,   33,   33,   33,   33,   33,   33,   33,
        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-       33,   33,   33,   33,   33, 8224,   33, 8224,   33, 8224,
-       23,   33,   33,   28, 8224,   33,16416,   33,   33,   15,
-       33,   33,   33,   33,   33,   33,   33,   33,   33, 8217,
-     8224,   33,16409,16416,   33,   33,   31, 8224,   33,16416,
-       33, 8216, 8224,   33,16408,16416,   33,   33, 8219, 8224,
-       33,16411,16416,   33,   33,   33,   33,   33,   28, 8224,
-
-       33,   28, 8224,   33,   28,   33,   28, 8224,   33,    3,
-       33,   15,   33,   33,   33,   33,   33,   30, 8224,   33,
-    16416,   33,   33,   33, 8217, 8224,   33, 8217, 8224,   33,
-     8217,   33, 8217, 8224,   33,   33,   31, 8224,   33,   31,
-     8224,   33,   31,   33,   31, 8224, 8216, 8224,   33, 8216,
-     8224,   33, 8216,   33, 8216, 8224,   33, 8219, 8224,   33,
-     8219, 8224,   33, 8219,   33, 8219, 8224,   33,   33,   10,
-       33,   33,   28, 8224,   33,   28, 8224,   33,   28, 8224,
-       28,   33,   28,   33,    3,   33,   33,   33,   33,   33,
-       33,   33,   30, 8224,   33,   30, 8224,   33,   30,   33,
-
-       30, 8224,   33,   33,   29, 8224,   33,16416, 8217, 8224,
-       33, 8217, 8224,   33, 8217, 8224, 8217,   33, 8217,   33,
-       33,   31, 8224,   33,   31, 8224,   33,   31, 8224,   31,
-       33,   31, 8216, 8224,   33, 8216, 8224,   33, 8216, 8224,
-     8216,   33, 8216,   33, 8219, 8224,   33, 8219, 8224,   33,
-     8219, 8224, 8219,   33, 8219,   33,   33,   10,   23,   10,
-        7,   33,   33,   33,   33,   33,   33,   33,   13,   33,
-       30, 8224,   33,   30, 8224,   33,   30, 8224,   30,   33,
-       30,    2,   33,   29, 8224,   33,   29, 8224,   33,   29,
-       33,   29, 8224,   16,   33,   33,   11,   33,   22,   10,
-
-       10,   23,    7,   23,    7,   33,    8,   33,   33,   33,
-       33,    6,   33,   13,   33,    2,   23,    2,   33,   29,
-     8224,   33,   29, 8224,   33,   29, 8224,   29,   33,   29,
-       16,   33,   33,   11,   23,   11,   26, 8224,   33,16416,
-       22,   23,   22,    7,    7,   23,   33,    8,   23,    8,
-       33,   33,   33,   33,    6,   23,    6,    6,   23,    6,
-       23,   33,    2,    2,   23,   33,   33,   11,   11,   23,
-       26, 8224,   33,   26, 8224,   33,   26,   33,   26, 8224,
-       22,   23,   33,    8,    8,   23,   33,   33,   17,   18,
-        6,    6,   23,    6,    6,   33,   33,   14,   33,   26,
-
-     8224,   33,   26, 8224,   33,   26, 8224,   26,   33,   26,
-       33,   33,   33,   17,   23,   17,   18,   23,   18,    6,
-        6,   33,   33,   14,   33,   20,    9,   19,   17,   17,
-       23,   18,   18,   23,    6,    5,    6,   33,   21,   20,
-       23,   20,    9,   23,    9,   19,   23,   19,    4,    6,
-        5,    6,   33,   21,   23,   21,   20,   20,   23,    9,
-        9,   23,   19,   19,   23,    4,    6,   12,   33,   21,
-       21,   23,   12,   33
+       35, 8193,   33, 8193,   33, 8193, 8224,   33, 8224,   33,
+     8224,   23,   33,   33,   33,   33,   33,   33,   33,   33,
+       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
+       33,   33,   33,   33,   33,   33, 8224,   33, 8224,   33,
+     8224,   23,   33,   33,   28, 8224,   33,16416,   33,   33,
+       15,   33,   33,   33,   33,   33,   33,   33,   33,   33,
+     8217, 8224,   33,16409,16416,   33,   33,   31, 8224,   33,
+    16416,   33, 8216, 8224,   33,16408,16416,   33,   33, 8219,
+     8224,   33,16411,16416,   33,   33,   33,   33,   33,   28,
+
+     8224,   33,   28, 8224,   33,   28,   33,   28, 8224,   33,
+        3,   33,   15,   33,   33,   33,   33,   33,   30, 8224,
+       33,16416,   33,   33,   33, 8217, 8224,   33, 8217, 8224,
+       33, 8217,   33, 8217, 8224,   33,   33,   31, 8224,   33,
+       31, 8224,   33,   31,   33,   31, 8224, 8216, 8224,   33,
+     8216, 8224,   33, 8216,   33, 8216, 8224,   33, 8219, 8224,
+       33, 8219, 8224,   33, 8219,   33, 8219, 8224,   33,   33,
+       10,   33,   33,   28, 8224,   33,   28, 8224,   33,   28,
+     8224,   28,   33,   28,   33,    3,   33,   33,   33,   33,
+       33,   33,   33,   30, 8224,   33,   30, 8224,   33,   30,
+
+       33,   30, 8224,   33,   33,   29, 8224,   33,16416, 8217,
+     8224,   33, 8217, 8224,   33, 8217, 8224, 8217,   33, 8217,
+       33,   33,   31, 8224,   33,   31, 8224,   33,   31, 8224,
+       31,   33,   31, 8216, 8224,   33, 8216, 8224,   33, 8216,
+     8224, 8216,   33, 8216,   33, 8219, 8224,   33, 8219, 8224,
+       33, 8219, 8224, 8219,   33, 8219,   33,   33,   10,   23,
+       10,    7,   33,   33,   33,   33,   33,   33,   33,   13,
+       33,   30, 8224,   33,   30, 8224,   33,   30, 8224,   30,
+       33,   30,    2,   33,   29, 8224,   33,   29, 8224,   33,
+       29,   33,   29, 8224,   16,   33,   33,   11,   33,   22,
+
+       10,   10,   23,    7,   23,    7,   33,    8,   33,   33,
+       33,   33,    6,   33,   13,   33,    2,   23,    2,   33,
+       29, 8224,   33,   29, 8224,   33,   29, 8224,   29,   33,
+       29,   16,   33,   33,   11,   23,   11,   26, 8224,   33,
+    16416,   22,   23,   22,    7,    7,   23,   33,    8,   23,
+        8,   33,   33,   33,   33,    6,   23,    6,    6,   23,
+        6,   23,   33,    2,    2,   23,   33,   33,   11,   11,
+       23,   26, 8224,   33,   26, 8224,   33,   26,   33,   26,
+     8224,   22,   23,   33,    8,    8,   23,   33,   33,   17,
+       18,    6,    6,   23,    6,    6,   33,   33,   14,   33,
+
+       26, 8224,   33,   26, 8224,   33,   26, 8224,   26,   33,
+       26,   33,   33,   33,   17,   23,   17,   18,   23,   18,
+        6,    6,   33,   33,   14,   33,   20,    9,   19,   17,
+       17,   23,   18,   18,   23,    6,    5,    6,   33,   21,
+       20,   23,   20,    9,   23,    9,   19,   23,   19,    4,
+        6,    5,    6,   33,   21,   23,   21,   20,   20,   23,
+        9,    9,   23,   19,   19,   23,    4,    6,   12,   33,
+       21,   21,   23,   12,   33
     } ;
 
-static yyconst flex_int16_t yy_accept[356] =
+static yyconst flex_int16_t yy_accept[357] =
     {   0,
         1,    1,    1,    2,    3,    4,    7,   12,   16,   19,
        21,   24,   27,   30,   33,   36,   39,   42,   45,   48,
@@ -446,42 +431,42 @@  static yyconst flex_int16_t yy_accept[356] =
        74,   76,   79,   81,   82,   83,   84,   87,   87,   88,
        89,   90,   91,   92,   93,   94,   95,   96,   97,   98,
        99,  100,  101,  102,  103,  104,  105,  106,  107,  108,
-      109,  110,  111,  113,  115,  116,  118,  120,  121,  122,
+      109,  110,  111,  112,  114,  116,  117,  119,  121,  122,
       123,  124,  125,  126,  127,  128,  129,  130,  131,  132,
       133,  134,  135,  136,  137,  138,  139,  140,  141,  142,
-      143,  144,  145,  146,  148,  150,  151,  152,  153,  154,
-
-      158,  159,  160,  162,  163,  164,  165,  166,  167,  168,
-      169,  170,  175,  176,  177,  181,  182,  187,  188,  189,
-      194,  195,  196,  197,  198,  199,  202,  205,  207,  209,
-      210,  212,  214,  215,  216,  217,  218,  222,  223,  224,
-      225,  228,  231,  233,  235,  236,  237,  240,  243,  245,
-      247,  250,  253,  255,  257,  258,  261,  264,  266,  268,
-      269,  270,  271,  272,  273,  276,  279,  281,  283,  284,
-      285,  287,  288,  289,  290,  291,  292,  293,  296,  299,
-      301,  303,  304,  305,  309,  312,  315,  317,  319,  320,
-      321,  322,  325,  328,  330,  332,  333,  336,  339,  341,
-
-      343,  344,  345,  348,  351,  353,  355,  356,  357,  358,
-      360,  361,  362,  363,  364,  365,  366,  367,  368,  369,
-      371,  374,  377,  379,  381,  382,  383,  384,  387,  390,
-      392,  394,  396,  397,  398,  399,  400,  401,  403,  405,
-      406,  407,  408,  409,  410,  411,  412,  413,  414,  416,
-      418,  419,  420,  423,  426,  428,  430,  431,  433,  434,
-      436,  437,  441,  443,  444,  445,  447,  448,  450,  451,
-      452,  453,  454,  455,  457,  458,  460,  462,  463,  464,
-      466,  467,  468,  469,  471,  474,  477,  479,  481,  483,
-      484,  485,  487,  488,  489,  490,  491,  492,  494,  495,
-
-      496,  497,  498,  500,  503,  506,  508,  510,  511,  512,
-      513,  514,  516,  517,  519,  520,  521,  522,  523,  524,
-      526,  527,  528,  529,  530,  532,  533,  535,  536,  538,
-      539,  540,  542,  543,  545,  546,  548,  549,  551,  553,
-      554,  556,  557,  558,  560,  561,  563,  564,  566,  568,
-      570,  571,  573,  575,  575
+      143,  144,  145,  146,  147,  149,  151,  152,  153,  154,
+
+      155,  159,  160,  161,  163,  164,  165,  166,  167,  168,
+      169,  170,  171,  176,  177,  178,  182,  183,  188,  189,
+      190,  195,  196,  197,  198,  199,  200,  203,  206,  208,
+      210,  211,  213,  215,  216,  217,  218,  219,  223,  224,
+      225,  226,  229,  232,  234,  236,  237,  238,  241,  244,
+      246,  248,  251,  254,  256,  258,  259,  262,  265,  267,
+      269,  270,  271,  272,  273,  274,  277,  280,  282,  284,
+      285,  286,  288,  289,  290,  291,  292,  293,  294,  297,
+      300,  302,  304,  305,  306,  310,  313,  316,  318,  320,
+      321,  322,  323,  326,  329,  331,  333,  334,  337,  340,
+
+      342,  344,  345,  346,  349,  352,  354,  356,  357,  358,
+      359,  361,  362,  363,  364,  365,  366,  367,  368,  369,
+      370,  372,  375,  378,  380,  382,  383,  384,  385,  388,
+      391,  393,  395,  397,  398,  399,  400,  401,  402,  404,
+      406,  407,  408,  409,  410,  411,  412,  413,  414,  415,
+      417,  419,  420,  421,  424,  427,  429,  431,  432,  434,
+      435,  437,  438,  442,  444,  445,  446,  448,  449,  451,
+      452,  453,  454,  455,  456,  458,  459,  461,  463,  464,
+      465,  467,  468,  469,  470,  472,  475,  478,  480,  482,
+      484,  485,  486,  488,  489,  490,  491,  492,  493,  495,
+
+      496,  497,  498,  499,  501,  504,  507,  509,  511,  512,
+      513,  514,  515,  517,  518,  520,  521,  522,  523,  524,
+      525,  527,  528,  529,  530,  531,  533,  534,  536,  537,
+      539,  540,  541,  543,  544,  546,  547,  549,  550,  552,
+      554,  555,  557,  558,  559,  561,  562,  564,  565,  567,
+      569,  571,  572,  574,  576,  576
     } ;
 
-static yyconst flex_int32_t yy_ec[256] =
+static yyconst YY_CHAR yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -513,7 +498,7 @@  static yyconst flex_int32_t yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[35] =
+static yyconst YY_CHAR yy_meta[35] =
     {   0,
         1,    1,    2,    3,    1,    1,    1,    1,    4,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -521,216 +506,217 @@  static yyconst flex_int32_t yy_meta[35] =
         1,    1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[424] =
+static yyconst flex_uint16_t yy_base[425] =
     {   0,
-        0,    0,  901,  900,  902,  897,   33,   36,  905,  905,
-       45,   63,   31,   42,   51,   52,  890,   33,   65,   67,
-       69,   70,  889,   71,  888,   75,    0,  905,  893,  905,
-       91,   94,    0,    0,  103,  886,  112,    0,   89,   98,
-      113,   92,  114,   99,  100,   48,  121,  116,  119,   74,
-      124,  129,  123,  135,  132,  133,  137,  134,  138,  139,
-      141,    0,  155,    0,    0,  164,    0,    0,  849,  142,
-      152,  164,  140,  161,  165,  166,  167,  168,  169,  173,
-      174,  178,  176,  180,  184,  208,  189,  183,  192,  195,
-      215,  191,  193,  223,    0,    0,  905,  208,  204,  236,
-
-      219,  209,  238,  196,  237,  831,  242,  815,  241,  224,
-      243,  261,  244,  259,  277,  266,  286,  250,  288,  298,
-      249,  283,  274,  282,  294,  308,    0,  310,    0,  295,
-      305,  905,  308,  306,  313,  314,  342,  319,  316,  320,
-      331,    0,  349,    0,  342,  344,  356,    0,  358,    0,
-      365,    0,  367,    0,  354,  375,    0,  377,    0,  363,
-      356,  809,  327,  322,  384,    0,    0,    0,    0,  379,
-      905,  382,  384,  386,  390,  372,  392,  403,    0,  410,
-        0,  407,  413,  423,  426,    0,    0,    0,    0,  409,
-      424,  435,    0,    0,    0,    0,  437,    0,    0,    0,
-
-        0,  433,  444,    0,    0,    0,    0,  391,  440,  781,
-      905,  769,  439,  445,  444,  447,  449,  454,  453,  399,
-      464,    0,    0,    0,    0,  757,  465,  476,    0,  478,
-        0,  479,  476,  753,  462,  490,  749,  905,  745,  905,
-      483,  737,  424,  485,  487,  490,  500,  493,  905,  729,
-      905,  502,  518,    0,    0,    0,    0,  905,  498,  721,
-      905,  527,  713,    0,  705,  905,  495,  697,  905,  365,
-      521,  528,  530,  685,  905,  534,  540,  540,  657,  905,
-      537,  542,  650,  905,  553,    0,  557,    0,    0,  551,
-      641,  905,  558,  557,  633,  614,  613,  905,  547,  555,
-
-      563,  565,  569,  584,    0,    0,    0,    0,  583,  570,
-      585,  612,  905,  601,  905,  522,  580,  589,  594,  905,
-      600,  585,  563,  520,  905,  514,  905,  586,  486,  597,
-      480,  441,  905,  416,  905,  345,  905,  334,  905,  601,
-      254,  905,  242,  905,  200,  905,  151,  905,  905,  607,
-       86,  905,  905,  905,  620,  624,  627,  631,  635,  639,
-      643,  647,  651,  655,  659,  663,  667,  671,  675,  679,
-      683,  687,  691,  695,  699,  703,  707,  711,  715,  719,
-      723,  727,  731,  735,  739,  743,  747,  751,  755,  759,
-      763,  767,  771,  775,  779,  783,  787,  791,  795,  799,
-
-      803,  807,  811,  815,  819,  823,  827,  831,  835,  839,
-      843,  847,  851,  855,  859,  863,  867,  871,  875,  879,
-      883,  887,  891
+        0,    0,  904,  903,  905,  900,   33,   36,  908,  908,
+       45,   63,   31,   42,   51,   52,  893,   33,   65,   67,
+       69,   70,  892,   71,  891,   75,    0,  908,  896,  908,
+       91,   94,    0,    0,  103,  889,  112,    0,   89,   98,
+      113,   92,  114,   99,  100,   48,  121,  116,  119,   77,
+      124,  129,  123,  135,  132,  133,  134,  138,  140,  144,
+      139,  142,    0,  155,    0,    0,  159,    0,    0,  894,
+      146,  155,  164,  141,  165,  166,  167,  168,  169,  170,
+      174,  175,  181,  176,  177,  185,  205,  191,  190,  194,
+      193,  213,  200,  202,  221,    0,    0,  908,  209,  205,
+
+      237,  217,  222,  224,  225,  237,  887,  240,  886,  241,
+      233,  242,  263,  245,  261,  279,  246,  288,  251,  267,
+      297,  252,  293,  276,  284,  294,  306,    0,  310,    0,
+      301,  312,  908,  313,  307,  308,  268,  338,  319,  310,
+      313,  341,    0,  348,    0,  341,  343,  355,    0,  357,
+        0,  364,    0,  366,    0,  353,  374,    0,  376,    0,
+      321,  355,  849,  325,  371,  383,    0,    0,    0,    0,
+      378,  908,  377,  381,  383,  387,  393,  389,  405,    0,
+      408,    0,  406,  408,  418,  421,    0,    0,    0,    0,
+      416,  419,  430,    0,    0,    0,    0,  432,    0,    0,
+
+        0,    0,  428,  439,    0,    0,    0,    0,  434,  436,
+      837,  908,  821,  437,  442,  443,  445,  447,  452,  451,
+      396,  463,    0,    0,    0,    0,  809,  463,  474,    0,
+      476,    0,  477,  474,  781,  364,  488,  769,  908,  757,
+      908,  481,  753,  472,  483,  485,  488,  498,  491,  908,
+      749,  908,  500,  516,    0,    0,    0,    0,  908,  496,
+      745,  908,  525,  737,    0,  729,  908,  509,  721,  908,
+      506,  523,  529,  531,  713,  908,  535,  528,  540,  705,
+      908,  542,  544,  697,  908,  555,    0,  557,    0,    0,
+      555,  685,  908,  537,  550,  657,  650,  641,  908,  443,
+
+      545,  559,  564,  570,  577,    0,    0,    0,    0,  576,
+      581,  583,  633,  908,  614,  908,  574,  589,  587,  592,
+      908,  613,  612,  602,  599,  908,  598,  908,  590,  565,
+      595,  561,  520,  908,  501,  908,  484,  908,  461,  908,
+      601,  449,  908,  400,  908,  332,  908,  324,  908,  908,
+      607,  188,  908,  908,  908,  620,  624,  627,  631,  635,
+      639,  643,  647,  651,  655,  659,  663,  667,  671,  675,
+      679,  683,  687,  691,  695,  699,  703,  707,  711,  715,
+      719,  723,  727,  731,  735,  739,  743,  747,  751,  755,
+      759,  763,  767,  771,  775,  779,  783,  787,  791,  795,
+
+      799,  803,  807,  811,  815,  819,  823,  827,  831,  835,
+      839,  843,  847,  851,  855,  859,  863,  867,  871,  875,
+      879,  883,  887,  891
     } ;
 
-static yyconst flex_int16_t yy_def[424] =
+static yyconst flex_int16_t yy_def[425] =
     {   0,
-      354,    1,  355,  355,  354,  356,  357,  357,  354,  354,
-      358,  358,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,  359,  354,  356,  354,
-      360,  357,  361,  361,  362,   12,  356,  363,   12,   12,
+      355,    1,  356,  356,  355,  357,  358,  358,  355,  355,
+      359,  359,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,  360,  355,  357,  355,
+      361,  358,  362,  362,  363,   12,  357,  364,   12,   12,
        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,  359,  360,  361,  361,  364,  365,  365,  354,   12,
-       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   12,   12,  362,   12,   12,   12,   12,
-       12,   12,   12,  364,  365,  365,  354,   12,   12,  366,
-
+       12,   12,  360,  361,  362,  362,  365,  366,  366,  355,
        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,  367,   86,   86,  368,   12,  369,   12,   12,  370,
-       12,   12,   12,   12,   12,  371,  372,  366,  372,   12,
-       12,  354,   86,   12,   12,   12,  373,   12,   12,   12,
-      374,  375,  367,  375,   86,   86,  376,  377,  368,  377,
-      378,  379,  369,  379,   12,  380,  381,  370,  381,   12,
-       12,  382,   12,   12,  371,  372,  372,  383,  383,   12,
-      354,   86,   86,   86,   12,   12,   12,  384,  385,  373,
-      385,   12,   12,  386,  374,  375,  375,  387,  387,   86,
-       86,  376,  377,  377,  388,  388,  378,  379,  379,  389,
-
-      389,   12,  380,  381,  381,  390,  390,   12,   12,  391,
-      354,  392,   86,   12,   86,   86,   86,   12,   86,   12,
-      384,  385,  385,  393,  393,  394,   86,  395,  396,  386,
-      396,   86,   86,  397,   12,  398,  391,  354,  399,  354,
-       86,  400,   12,   86,   86,   86,  401,   86,  354,  402,
-      354,   86,  395,  396,  396,  403,  403,  354,   86,  404,
-      354,  405,  406,  406,  399,  354,   86,  407,  354,   12,
-       86,   86,   86,  408,  354,  408,  408,   86,  402,  354,
-       86,   86,  404,  354,  409,  410,  405,  410,  406,   86,
-      407,  354,   12,   86,  411,  412,  408,  354,  408,  408,
-
-       86,   86,   86,  409,  410,  410,  413,  413,   86,   12,
-       86,  414,  354,  415,  354,  408,  408,   86,   86,  354,
-      416,  417,  418,  414,  354,  415,  354,  408,  408,   86,
-      419,  420,  354,  421,  354,  422,  354,  408,  354,   86,
-      423,  354,  420,  354,  421,  354,  422,  354,  354,   86,
-      423,  354,  354,    0,  354,  354,  354,  354,  354,  354,
-      354,  354,  354,  354,  354,  354,  354,  354,  354,  354,
-      354,  354,  354,  354,  354,  354,  354,  354,  354,  354,
-      354,  354,  354,  354,  354,  354,  354,  354,  354,  354,
-      354,  354,  354,  354,  354,  354,  354,  354,  354,  354,
-
-      354,  354,  354,  354,  354,  354,  354,  354,  354,  354,
-      354,  354,  354,  354,  354,  354,  354,  354,  354,  354,
-      354,  354,  354
+       12,   12,   12,   12,   12,   12,  363,   12,   12,   12,
+       12,   12,   12,   12,  365,  366,  366,  355,   12,   12,
+
+      367,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,  368,   87,   87,  369,   12,  370,   12,   12,
+      371,   12,   12,   12,   12,   12,  372,  373,  367,  373,
+       12,   12,  355,   87,   12,   12,   12,  374,   12,   12,
+       12,  375,  376,  368,  376,   87,   87,  377,  378,  369,
+      378,  379,  380,  370,  380,   12,  381,  382,  371,  382,
+       12,   12,  383,   12,   12,  372,  373,  373,  384,  384,
+       12,  355,   87,   87,   87,   12,   12,   12,  385,  386,
+      374,  386,   12,   12,  387,  375,  376,  376,  388,  388,
+       87,   87,  377,  378,  378,  389,  389,  379,  380,  380,
+
+      390,  390,   12,  381,  382,  382,  391,  391,   12,   12,
+      392,  355,  393,   87,   12,   87,   87,   87,   12,   87,
+       12,  385,  386,  386,  394,  394,  395,   87,  396,  397,
+      387,  397,   87,   87,  398,   12,  399,  392,  355,  400,
+      355,   87,  401,   12,   87,   87,   87,  402,   87,  355,
+      403,  355,   87,  396,  397,  397,  404,  404,  355,   87,
+      405,  355,  406,  407,  407,  400,  355,   87,  408,  355,
+       12,   87,   87,   87,  409,  355,  409,  409,   87,  403,
+      355,   87,   87,  405,  355,  410,  411,  406,  411,  407,
+       87,  408,  355,   12,   87,  412,  413,  409,  355,  409,
+
+      409,   87,   87,   87,  410,  411,  411,  414,  414,   87,
+       12,   87,  415,  355,  416,  355,  409,  409,   87,   87,
+      355,  417,  418,  419,  415,  355,  416,  355,  409,  409,
+       87,  420,  421,  355,  422,  355,  423,  355,  409,  355,
+       87,  424,  355,  421,  355,  422,  355,  423,  355,  355,
+       87,  424,  355,  355,    0,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355
     } ;
 
-static yyconst flex_int16_t yy_nxt[940] =
+static yyconst flex_uint16_t yy_nxt[943] =
     {   0,
         6,    7,    8,    9,    6,    6,    6,    6,   10,   11,
        12,   13,   14,   15,   16,   17,   18,   19,   17,   17,
        17,   17,   20,   17,   21,   22,   23,   24,   25,   17,
        26,   17,   17,   17,   32,   32,   33,   32,   32,   33,
        36,   34,   36,   42,   34,   29,   29,   29,   30,   35,
-       50,   36,   37,   38,   43,   44,   39,   36,   79,   45,
+       50,   36,   37,   38,   43,   44,   39,   36,   80,   45,
        36,   36,   40,   29,   29,   29,   30,   35,   46,   48,
        37,   38,   41,   47,   36,   49,   36,   53,   36,   36,
-       36,   56,   58,   36,   36,   55,   82,   60,   51,  342,
-       54,   61,   52,   29,   64,   32,   32,   33,   36,   65,
-
-       70,   36,   34,   29,   29,   29,   30,   36,   36,   36,
-       29,   38,   66,   66,   66,   67,   66,   71,   74,   66,
-       68,   72,   36,   36,   73,   36,   77,   78,   36,   76,
-       36,   53,   36,   36,   75,   85,   80,   83,   36,   86,
-       84,   36,   36,   36,   36,   81,   36,   36,   36,   36,
-       36,   36,   93,   89,  337,   98,   88,   29,   64,  101,
-       90,   36,   91,   65,   92,   87,   29,   95,   89,   99,
-       36,  100,   96,   36,   36,   36,   36,   36,   36,  106,
-      105,   85,   36,   36,  102,   36,  107,   36,  103,   36,
-      109,  112,   36,   36,  104,  108,  115,  110,   36,  117,
-
-       36,   36,   36,  335,   36,   36,  122,  111,   29,   29,
-       29,   30,  118,   36,  116,   29,   38,   36,   36,  113,
-      114,  119,  120,  123,   36,   29,   95,  121,   36,  134,
-      131,   96,  130,   36,  125,  124,  126,  126,   66,  127,
-      126,  132,  133,  126,  129,  333,   36,   36,  135,  137,
-       36,   36,   36,  140,  139,   35,   35,  352,   36,   36,
-       85,  141,  141,   66,  142,  141,  160,  145,  141,  144,
-       35,   35,   89,  117,  155,   36,  146,  147,  147,   66,
-      148,  147,  162,   36,  147,  150,  151,  151,   66,  152,
-      151,   36,   36,  151,  154,  120,  161,   36,  156,  156,
-
-       66,  157,  156,   36,   36,  156,  159,  164,  171,  163,
-       29,  166,   29,  168,   36,   36,  167,  170,  169,   35,
-       35,  172,   36,   36,  173,   36,  213,  184,   36,   36,
-      175,   36,  174,   29,  186,  212,   36,  349,  183,  187,
-      177,  176,  178,  178,   66,  179,  178,  182,  348,  178,
-      181,   29,  188,   35,   35,   35,   35,  189,   29,  193,
-       29,  195,  190,   36,  194,   36,  196,   29,  198,   29,
-      200,  191,   36,  199,   36,  201,  219,   29,  204,   29,
-      206,   36,  202,  205,  209,  207,   29,  166,   36,  293,
-      208,  214,  167,   35,   35,   35,   35,   35,   35,   36,
-
-       36,   36,  249,  218,  220,   29,  222,  216,   36,  217,
-      235,  223,   29,  224,  215,  226,   36,  227,  225,  346,
-       35,   35,   36,  228,  228,   66,  229,  228,   29,  186,
-      228,  231,  232,   36,  187,  233,   35,   29,  193,   29,
-      198,  234,   36,  194,  344,  199,   29,  204,  236,   36,
-       35,  241,  205,  242,   36,   35,   35,  270,   35,   35,
-       35,   35,  247,   36,   35,   35,   29,  222,  244,  262,
-      248,   36,  223,  243,  245,  246,   35,  252,   29,  254,
-       29,  256,  258,  342,  255,  259,  257,   35,   35,  339,
-       35,   35,   69,  264,   35,   35,   35,   35,   35,   35,
-
-      267,   35,   35,  275,   35,   35,   35,   35,  271,   35,
-       35,  276,  277,   35,   35,  272,  278,  315,  273,  281,
-       29,  254,  290,  313,  282,  275,  255,  285,  285,   66,
-      286,  285,   35,   35,  285,  288,  295,  298,  296,   35,
-       35,   35,   35,  298,  301,  328,  299,  294,   35,   35,
-      275,   35,   35,   35,  303,   29,  305,  300,  275,   29,
-      307,  306,   35,   35,  302,  308,  337,   36,   35,   35,
-      309,  310,  320,  316,   35,   35,   35,   35,  322,   36,
-       35,   35,  317,  275,  319,  311,   29,  305,  335,  275,
-      318,  321,  306,  323,   35,   35,   35,   35,  330,  329,
-
-       35,   35,  331,  333,  327,   35,   35,  338,   35,   35,
-      353,  340,   35,   35,  350,  325,  275,  315,   35,   35,
+       36,   56,   59,   57,   36,   55,   36,   61,   51,   83,
+       54,   62,   52,   29,   65,   32,   32,   33,   36,   66,
+
+       71,   36,   34,   29,   29,   29,   30,   36,   36,   36,
+       29,   38,   67,   67,   67,   68,   67,   72,   75,   67,
+       69,   73,   36,   36,   74,   36,   78,   79,   36,   77,
+       36,   53,   36,   36,   76,   86,   81,   84,   36,   87,
+       85,   36,   36,   36,   36,   82,   90,   36,   36,   36,
+       36,   36,   94,   36,   90,   36,   89,   29,   65,   99,
+      102,   29,   96,   66,   36,   88,   91,   97,   92,   90,
+       93,  101,  100,   36,   36,   36,   36,   36,   36,   36,
+      107,  106,   86,   36,   36,   36,   36,  108,  103,  104,
+       36,  343,  113,  110,   36,  105,  109,  111,  116,   36,
+
+       36,  118,   36,   36,  112,   29,   29,   29,   30,   36,
+      119,   36,   29,   38,   36,  123,  114,  115,   36,  120,
+      121,  117,   36,   29,   96,  122,   36,  133,  134,   97,
+      131,   36,  124,   36,   36,  126,  125,  127,  127,   67,
+      128,  127,   36,  132,  127,  130,   36,  138,  136,   36,
+       36,   36,   90,  118,  140,   36,   35,   35,  135,   86,
+       36,   36,  141,  142,  142,   67,  143,  142,  146,  161,
+      142,  145,   35,   35,  121,  156,   36,   36,  147,  148,
+      148,   67,  149,  148,  163,   36,  148,  151,  152,  152,
+       67,  153,  152,   36,  178,  152,  155,  157,  157,   67,
+
+      158,  157,   36,   36,  157,  160,  162,  165,   29,  167,
+       36,  164,   29,  169,  168,  172,   36,   36,  170,   36,
+      185,   36,   36,  171,   35,   35,  173,  338,   36,  174,
+       36,  176,  184,  213,   36,  336,  177,  175,  179,  179,
+       67,  180,  179,   29,  187,  179,  182,  183,  209,  188,
+       29,  189,   35,   35,   35,   35,  190,   29,  194,   29,
+      196,  191,   36,  195,   36,  197,   29,  199,   29,  201,
+      192,  263,  200,   36,  202,  214,   29,  205,   29,  207,
+       36,  203,  206,  210,  208,   29,  167,   36,   35,   35,
+      215,  168,   35,   35,   35,   35,   36,  220,   36,  250,
+
+      219,  221,   36,  334,  217,   36,  218,   29,  223,  216,
+       29,  225,  228,  224,  227,   36,  226,   36,  229,  229,
+       67,  230,  229,   29,  187,  229,  232,   35,   35,  188,
+      234,   35,   29,  194,   29,  199,  235,   36,  195,  233,
+      200,   29,  205,   36,  237,   36,  276,  206,   35,  242,
+      243,   36,  353,  236,   35,   35,   35,   35,   35,   35,
+      248,   36,   35,   35,  350,   29,  223,  245,  249,  317,
+      244,  224,  246,  247,   35,  253,   29,  255,   29,  257,
+      259,   36,  256,  260,  258,   35,   35,  349,   35,   35,
+       70,  265,   35,   35,   35,   35,   35,   35,  268,   35,
+
+       35,  276,   35,   35,  347,  271,  272,   35,   35,  277,
+      278,   35,   35,  273,  279,   36,  274,  282,   29,  255,
+       35,   35,  283,  345,  256,  286,  286,   67,  287,  286,
+      294,  299,  286,  289,   35,   35,  291,  296,  299,  297,
+       35,   35,   35,   35,  302,  301,   36,  300,  276,  295,
+      311,   35,   35,   35,   35,   35,  304,   29,  306,   29,
+      308,   35,   35,  307,  343,  309,   35,   35,  340,  303,
+       35,   35,  318,  321,  310,   35,   35,  276,  312,   29,
+      306,   35,   35,  320,  322,  307,  319,   35,   35,  323,
+       36,  324,  276,  276,   35,   35,  331,  329,   35,   35,
+
+      332,  316,  314,   35,   35,  338,   35,   35,  330,  341,
+      354,  339,   35,   35,  351,  336,  334,  328,   35,   35,
        27,   27,   27,   27,   29,   29,   29,   31,   31,   31,
-       31,   36,   36,   36,   36,   62,  313,   62,   62,   63,
-       63,   63,   63,   65,  269,   65,   65,   35,   35,   35,
-       35,   69,   69,  261,   69,   94,   94,   94,   94,   96,
-      251,   96,   96,  128,  128,  128,  128,  143,  143,  143,
-      143,  149,  149,  149,  149,  153,  153,  153,  153,  158,
-      158,  158,  158,  165,  165,  165,  165,  167,  298,  167,
-      167,  180,  180,  180,  180,  185,  185,  185,  185,  187,
-
-      292,  187,  187,  192,  192,  192,  192,  194,  240,  194,
-      194,  197,  197,  197,  197,  199,  289,  199,  199,  203,
-      203,  203,  203,  205,  284,  205,  205,  210,  210,  210,
-      210,  169,  280,  169,  169,  221,  221,  221,  221,  223,
-      269,  223,  223,  230,  230,  230,  230,  189,  266,  189,
-      189,  196,  211,  196,  196,  201,  261,  201,  201,  207,
-      251,  207,  207,  237,  237,  237,  237,  239,  239,  239,
-      239,  225,  240,  225,  225,  250,  250,  250,  250,  253,
-      253,  253,  253,  255,  238,  255,  255,  260,  260,  260,
-      260,  263,  263,  263,  263,  265,  265,  265,  265,  268,
-
-      268,  268,  268,  274,  274,  274,  274,  279,  279,  279,
-      279,  257,  211,  257,  257,  283,  283,  283,  283,  287,
-      287,  287,  287,  264,  138,  264,  264,  291,  291,  291,
-      291,  297,  297,  297,  297,  304,  304,  304,  304,  306,
-      136,  306,  306,  312,  312,  312,  312,  314,  314,  314,
-      314,  308,   97,  308,  308,  324,  324,  324,  324,  326,
-      326,  326,  326,  332,  332,  332,  332,  334,  334,  334,
-      334,  336,  336,  336,  336,  341,  341,  341,  341,  343,
-      343,  343,  343,  345,  345,  345,  345,  347,  347,  347,
-      347,  351,  351,  351,  351,   36,   30,   59,   57,   36,
-
-       30,  354,   28,   28,    5,  354,  354,  354,  354,  354,
-      354,  354,  354,  354,  354,  354,  354,  354,  354,  354,
-      354,  354,  354,  354,  354,  354,  354,  354,  354,  354,
-      354,  354,  354,  354,  354,  354,  354,  354,  354
+       31,   36,   36,   36,   36,   63,  326,   63,   63,   64,
+       64,   64,   64,   66,  276,   66,   66,   35,   35,   35,
+       35,   70,   70,  316,   70,   95,   95,   95,   95,   97,
+      314,   97,   97,  129,  129,  129,  129,  144,  144,  144,
+      144,  150,  150,  150,  150,  154,  154,  154,  154,  159,
+      159,  159,  159,  166,  166,  166,  166,  168,  270,  168,
+      168,  181,  181,  181,  181,  186,  186,  186,  186,  188,
+
+      262,  188,  188,  193,  193,  193,  193,  195,  252,  195,
+      195,  198,  198,  198,  198,  200,  299,  200,  200,  204,
+      204,  204,  204,  206,  293,  206,  206,  211,  211,  211,
+      211,  170,  241,  170,  170,  222,  222,  222,  222,  224,
+      290,  224,  224,  231,  231,  231,  231,  190,  285,  190,
+      190,  197,  281,  197,  197,  202,  270,  202,  202,  208,
+      267,  208,  208,  238,  238,  238,  238,  240,  240,  240,
+      240,  226,  212,  226,  226,  251,  251,  251,  251,  254,
+      254,  254,  254,  256,  262,  256,  256,  261,  261,  261,
+      261,  264,  264,  264,  264,  266,  266,  266,  266,  269,
+
+      269,  269,  269,  275,  275,  275,  275,  280,  280,  280,
+      280,  258,  252,  258,  258,  284,  284,  284,  284,  288,
+      288,  288,  288,  265,  241,  265,  265,  292,  292,  292,
+      292,  298,  298,  298,  298,  305,  305,  305,  305,  307,
+      239,  307,  307,  313,  313,  313,  313,  315,  315,  315,
+      315,  309,  212,  309,  309,  325,  325,  325,  325,  327,
+      327,  327,  327,  333,  333,  333,  333,  335,  335,  335,
+      335,  337,  337,  337,  337,  342,  342,  342,  342,  344,
+      344,  344,  344,  346,  346,  346,  346,  348,  348,  348,
+      348,  352,  352,  352,  352,  139,  137,   98,   36,   30,
+
+       60,   58,   36,   30,  355,   28,   28,    5,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+      355,  355
     } ;
 
-static yyconst flex_int16_t yy_chk[940] =
+static yyconst flex_int16_t yy_chk[943] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -740,101 +726,102 @@  static yyconst flex_int16_t yy_chk[940] =
        18,   14,   11,   11,   13,   14,   11,   46,   46,   14,
        15,   16,   11,   12,   12,   12,   12,   12,   14,   16,
        12,   12,   12,   15,   19,   16,   20,   20,   21,   22,
-       24,   22,   24,   50,   26,   21,   50,   26,   19,  351,
+       24,   22,   24,   22,   26,   21,   50,   26,   19,   50,
        20,   26,   19,   31,   31,   32,   32,   32,   39,   31,
 
        39,   42,   32,   35,   35,   35,   35,   40,   44,   45,
        35,   35,   37,   37,   37,   37,   37,   39,   42,   37,
        37,   40,   41,   43,   41,   48,   45,   45,   49,   44,
        47,   47,   53,   51,   43,   53,   48,   51,   52,   54,
-       52,   55,   56,   58,   54,   49,   57,   59,   60,   73,
-       61,   70,   60,   61,  347,   70,   56,   63,   63,   73,
-       58,   71,   59,   63,   59,   55,   66,   66,   57,   71,
-       74,   72,   66,   72,   75,   76,   77,   78,   79,   78,
-       77,   79,   80,   81,   74,   83,   80,   82,   75,   84,
-       82,   85,   88,   85,   76,   81,   87,   83,   87,   89,
-
-       92,   89,   93,  345,   90,  104,   92,   84,   86,   86,
-       86,   86,   90,   99,   88,   86,   86,   98,  102,   86,
-       86,   91,   91,   93,   91,   94,   94,   91,  101,  104,
-      102,   94,  101,  110,   99,   98,  100,  100,  100,  100,
-      100,  103,  103,  100,  100,  343,  105,  103,  105,  107,
-      109,  107,  111,  110,  109,  113,  113,  341,  121,  118,
-      111,  112,  112,  112,  112,  112,  121,  113,  112,  112,
-      114,  114,  116,  116,  118,  116,  114,  115,  115,  115,
-      115,  115,  123,  123,  115,  115,  117,  117,  117,  117,
-      117,  124,  122,  117,  117,  119,  122,  119,  120,  120,
-
-      120,  120,  120,  125,  130,  120,  120,  125,  131,  124,
-      126,  126,  128,  128,  131,  134,  126,  130,  128,  133,
-      133,  133,  135,  136,  133,  139,  164,  140,  138,  140,
-      134,  164,  133,  141,  141,  163,  163,  338,  139,  141,
-      136,  135,  137,  137,  137,  137,  137,  138,  336,  137,
-      137,  143,  143,  145,  145,  146,  146,  143,  147,  147,
-      149,  149,  145,  155,  147,  161,  149,  151,  151,  153,
-      153,  146,  160,  151,  270,  153,  176,  156,  156,  158,
-      158,  176,  155,  156,  161,  158,  165,  165,  170,  270,
-      160,  170,  165,  172,  172,  173,  173,  174,  174,  175,
-
-      208,  177,  220,  175,  177,  178,  178,  173,  220,  174,
-      208,  178,  180,  180,  172,  182,  182,  183,  180,  334,
-      190,  190,  183,  184,  184,  184,  184,  184,  185,  185,
-      184,  184,  190,  243,  185,  191,  191,  192,  192,  197,
-      197,  202,  202,  192,  332,  197,  203,  203,  209,  209,
-      213,  213,  203,  214,  214,  215,  215,  243,  216,  216,
-      217,  217,  218,  218,  219,  219,  221,  221,  215,  235,
-      219,  235,  221,  214,  216,  217,  227,  227,  228,  228,
-      230,  230,  232,  331,  228,  233,  230,  233,  233,  329,
-      232,  232,  236,  236,  241,  241,  244,  244,  245,  245,
-
-      241,  246,  246,  247,  248,  248,  267,  267,  244,  259,
-      259,  247,  247,  252,  252,  245,  248,  326,  246,  252,
-      253,  253,  267,  324,  259,  316,  253,  262,  262,  262,
-      262,  262,  271,  271,  262,  262,  272,  276,  273,  272,
-      272,  273,  273,  277,  278,  316,  276,  271,  281,  281,
-      299,  278,  278,  282,  282,  285,  285,  277,  300,  287,
-      287,  285,  290,  290,  281,  287,  323,  293,  294,  294,
-      290,  293,  303,  299,  301,  301,  302,  302,  310,  310,
-      303,  303,  300,  317,  302,  294,  304,  304,  322,  328,
-      301,  309,  304,  311,  309,  309,  311,  311,  318,  317,
-
-      318,  318,  319,  321,  314,  319,  319,  328,  330,  330,
-      350,  330,  340,  340,  340,  312,  297,  296,  350,  350,
-      355,  355,  355,  355,  356,  356,  356,  357,  357,  357,
-      357,  358,  358,  358,  358,  359,  295,  359,  359,  360,
-      360,  360,  360,  361,  291,  361,  361,  362,  362,  362,
-      362,  363,  363,  283,  363,  364,  364,  364,  364,  365,
-      279,  365,  365,  366,  366,  366,  366,  367,  367,  367,
-      367,  368,  368,  368,  368,  369,  369,  369,  369,  370,
-      370,  370,  370,  371,  371,  371,  371,  372,  274,  372,
-      372,  373,  373,  373,  373,  374,  374,  374,  374,  375,
-
-      268,  375,  375,  376,  376,  376,  376,  377,  265,  377,
-      377,  378,  378,  378,  378,  379,  263,  379,  379,  380,
-      380,  380,  380,  381,  260,  381,  381,  382,  382,  382,
-      382,  383,  250,  383,  383,  384,  384,  384,  384,  385,
-      242,  385,  385,  386,  386,  386,  386,  387,  239,  387,
-      387,  388,  237,  388,  388,  389,  234,  389,  389,  390,
-      226,  390,  390,  391,  391,  391,  391,  392,  392,  392,
-      392,  393,  212,  393,  393,  394,  394,  394,  394,  395,
-      395,  395,  395,  396,  210,  396,  396,  397,  397,  397,
-      397,  398,  398,  398,  398,  399,  399,  399,  399,  400,
-
-      400,  400,  400,  401,  401,  401,  401,  402,  402,  402,
-      402,  403,  162,  403,  403,  404,  404,  404,  404,  405,
-      405,  405,  405,  406,  108,  406,  406,  407,  407,  407,
-      407,  408,  408,  408,  408,  409,  409,  409,  409,  410,
-      106,  410,  410,  411,  411,  411,  411,  412,  412,  412,
-      412,  413,   69,  413,  413,  414,  414,  414,  414,  415,
-      415,  415,  415,  416,  416,  416,  416,  417,  417,  417,
-      417,  418,  418,  418,  418,  419,  419,  419,  419,  420,
-      420,  420,  420,  421,  421,  421,  421,  422,  422,  422,
-      422,  423,  423,  423,  423,   36,   29,   25,   23,   17,
-
-        6,    5,    4,    3,  354,  354,  354,  354,  354,  354,
-      354,  354,  354,  354,  354,  354,  354,  354,  354,  354,
-      354,  354,  354,  354,  354,  354,  354,  354,  354,  354,
-      354,  354,  354,  354,  354,  354,  354,  354,  354
+       52,   55,   56,   57,   54,   49,   57,   58,   61,   59,
+       74,   62,   61,   60,   62,   71,   56,   64,   64,   71,
+       74,   67,   67,   64,   72,   55,   59,   67,   60,   58,
+       60,   73,   72,   73,   75,   76,   77,   78,   79,   80,
+       79,   78,   80,   81,   82,   84,   85,   81,   75,   76,
+       83,  352,   86,   83,   86,   77,   82,   84,   88,   89,
+
+       88,   90,   91,   90,   85,   87,   87,   87,   87,   93,
+       91,   94,   87,   87,  100,   93,   87,   87,   99,   92,
+       92,   89,   92,   95,   95,   92,  102,  104,  104,   95,
+      102,  103,   94,  104,  105,  100,   99,  101,  101,  101,
+      101,  101,  111,  103,  101,  101,  106,  108,  106,  108,
+      110,  112,  117,  117,  110,  117,  114,  114,  105,  112,
+      119,  122,  111,  113,  113,  113,  113,  113,  114,  122,
+      113,  113,  115,  115,  120,  119,  120,  137,  115,  116,
+      116,  116,  116,  116,  124,  124,  116,  116,  118,  118,
+      118,  118,  118,  125,  137,  118,  118,  121,  121,  121,
+
+      121,  121,  123,  126,  121,  121,  123,  126,  127,  127,
+      131,  125,  129,  129,  127,  132,  135,  136,  129,  140,
+      141,  132,  141,  131,  134,  134,  134,  348,  139,  134,
+      161,  135,  140,  164,  164,  346,  136,  134,  138,  138,
+      138,  138,  138,  142,  142,  138,  138,  139,  161,  142,
+      144,  144,  146,  146,  147,  147,  144,  148,  148,  150,
+      150,  146,  156,  148,  162,  150,  152,  152,  154,  154,
+      147,  236,  152,  236,  154,  165,  157,  157,  159,  159,
+      165,  156,  157,  162,  159,  166,  166,  171,  173,  173,
+      171,  166,  174,  174,  175,  175,  176,  177,  178,  221,
+
+      176,  178,  177,  344,  174,  221,  175,  179,  179,  173,
+      181,  181,  184,  179,  183,  183,  181,  184,  185,  185,
+      185,  185,  185,  186,  186,  185,  185,  191,  191,  186,
+      192,  192,  193,  193,  198,  198,  203,  203,  193,  191,
+      198,  204,  204,  209,  210,  210,  300,  204,  214,  214,
+      215,  215,  342,  209,  216,  216,  217,  217,  218,  218,
+      219,  219,  220,  220,  339,  222,  222,  216,  220,  300,
+      215,  222,  217,  218,  228,  228,  229,  229,  231,  231,
+      233,  244,  229,  234,  231,  234,  234,  337,  233,  233,
+      237,  237,  242,  242,  245,  245,  246,  246,  242,  247,
+
+      247,  248,  249,  249,  335,  244,  245,  260,  260,  248,
+      248,  253,  253,  246,  249,  271,  247,  253,  254,  254,
+      268,  268,  260,  333,  254,  263,  263,  263,  263,  263,
+      271,  278,  263,  263,  272,  272,  268,  273,  277,  274,
+      273,  273,  274,  274,  279,  278,  294,  277,  301,  272,
+      294,  279,  279,  282,  282,  283,  283,  286,  286,  288,
+      288,  295,  295,  286,  332,  288,  291,  291,  330,  282,
+      302,  302,  301,  304,  291,  303,  303,  317,  295,  305,
+      305,  304,  304,  303,  310,  305,  302,  310,  310,  311,
+      311,  312,  318,  329,  312,  312,  319,  317,  319,  319,
+
+      320,  327,  325,  320,  320,  324,  331,  331,  318,  331,
+      351,  329,  341,  341,  341,  323,  322,  315,  351,  351,
+      356,  356,  356,  356,  357,  357,  357,  358,  358,  358,
+      358,  359,  359,  359,  359,  360,  313,  360,  360,  361,
+      361,  361,  361,  362,  298,  362,  362,  363,  363,  363,
+      363,  364,  364,  297,  364,  365,  365,  365,  365,  366,
+      296,  366,  366,  367,  367,  367,  367,  368,  368,  368,
+      368,  369,  369,  369,  369,  370,  370,  370,  370,  371,
+      371,  371,  371,  372,  372,  372,  372,  373,  292,  373,
+      373,  374,  374,  374,  374,  375,  375,  375,  375,  376,
+
+      284,  376,  376,  377,  377,  377,  377,  378,  280,  378,
+      378,  379,  379,  379,  379,  380,  275,  380,  380,  381,
+      381,  381,  381,  382,  269,  382,  382,  383,  383,  383,
+      383,  384,  266,  384,  384,  385,  385,  385,  385,  386,
+      264,  386,  386,  387,  387,  387,  387,  388,  261,  388,
+      388,  389,  251,  389,  389,  390,  243,  390,  390,  391,
+      240,  391,  391,  392,  392,  392,  392,  393,  393,  393,
+      393,  394,  238,  394,  394,  395,  395,  395,  395,  396,
+      396,  396,  396,  397,  235,  397,  397,  398,  398,  398,
+      398,  399,  399,  399,  399,  400,  400,  400,  400,  401,
+
+      401,  401,  401,  402,  402,  402,  402,  403,  403,  403,
+      403,  404,  227,  404,  404,  405,  405,  405,  405,  406,
+      406,  406,  406,  407,  213,  407,  407,  408,  408,  408,
+      408,  409,  409,  409,  409,  410,  410,  410,  410,  411,
+      211,  411,  411,  412,  412,  412,  412,  413,  413,  413,
+      413,  414,  163,  414,  414,  415,  415,  415,  415,  416,
+      416,  416,  416,  417,  417,  417,  417,  418,  418,  418,
+      418,  419,  419,  419,  419,  420,  420,  420,  420,  421,
+      421,  421,  421,  422,  422,  422,  422,  423,  423,  423,
+      423,  424,  424,  424,  424,  109,  107,   70,   36,   29,
+
+       25,   23,   17,    6,    5,    4,    3,  355,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+      355,  355
     } ;
 
 #define YY_TRAILING_MASK 0x2000
@@ -953,6 +940,7 @@  static void setformat(DiskParseContext *dpc, const char *str) {
     else if (!strcmp(str,"qcow2"))  DSET(dpc,format,FORMAT,str,QCOW2);
     else if (!strcmp(str,"vhd"))    DSET(dpc,format,FORMAT,str,VHD);
     else if (!strcmp(str,"empty"))  DSET(dpc,format,FORMAT,str,EMPTY);
+    else if (!strcmp(str,"qed"))    DSET(dpc,format,FORMAT,str,QED);
     else xlu__disk_err(dpc,str,"unknown value for format");
 }
 
@@ -1001,7 +989,7 @@  static int vdev_and_devtype(DiskParseContext *dpc, char *str) {
 #define DPC ((DiskParseContext*)yyextra)
 
 
-#line 1005 "libxlu_disk_l.c"
+#line 993 "libxlu_disk_l.c"
 
 #define INITIAL 0
 #define LEXERR 1
@@ -1031,8 +1019,8 @@  struct yyguts_t
     size_t yy_buffer_stack_max; /**< capacity of stack. */
     YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
     char yy_hold_char;
-    yy_size_t yy_n_chars;
-    yy_size_t yyleng_r;
+    int yy_n_chars;
+    int yyleng_r;
     char *yy_c_buf_p;
     int yy_init;
     int yy_start;
@@ -1084,23 +1072,23 @@  void xlu__disk_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
 
 FILE *xlu__disk_yyget_in (yyscan_t yyscanner );
 
-void xlu__disk_yyset_in  (FILE * in_str ,yyscan_t yyscanner );
+void xlu__disk_yyset_in  (FILE * _in_str ,yyscan_t yyscanner );
 
 FILE *xlu__disk_yyget_out (yyscan_t yyscanner );
 
-void xlu__disk_yyset_out  (FILE * out_str ,yyscan_t yyscanner );
+void xlu__disk_yyset_out  (FILE * _out_str ,yyscan_t yyscanner );
 
-yy_size_t xlu__disk_yyget_leng (yyscan_t yyscanner );
+			int xlu__disk_yyget_leng (yyscan_t yyscanner );
 
 char *xlu__disk_yyget_text (yyscan_t yyscanner );
 
 int xlu__disk_yyget_lineno (yyscan_t yyscanner );
 
-void xlu__disk_yyset_lineno (int line_number ,yyscan_t yyscanner );
+void xlu__disk_yyset_lineno (int _line_number ,yyscan_t yyscanner );
 
 int xlu__disk_yyget_column  (yyscan_t yyscanner );
 
-void xlu__disk_yyset_column (int column_no ,yyscan_t yyscanner );
+void xlu__disk_yyset_column (int _column_no ,yyscan_t yyscanner );
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1114,6 +1102,10 @@  extern int xlu__disk_yywrap (yyscan_t yyscanner );
 #endif
 #endif
 
+#ifndef YY_NO_UNPUT
+    
+#endif
+
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
 #endif
@@ -1147,7 +1139,7 @@  static int input (yyscan_t yyscanner );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -1158,7 +1150,7 @@  static int input (yyscan_t yyscanner );
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		int n; \
+		size_t n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -1171,7 +1163,7 @@  static int input (yyscan_t yyscanner );
 	else \
 		{ \
 		errno=0; \
-		while ( (result = fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
+		while ( (result = (int) fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
 			{ \
 			if( errno != EINTR) \
 				{ \
@@ -1226,7 +1218,7 @@  extern int xlu__disk_yylex (yyscan_t yyscanner);
 
 /* Code executed at the end of each rule. */
 #ifndef YY_BREAK
-#define YY_BREAK break;
+#define YY_BREAK /*LINTED*/break;
 #endif
 
 #define YY_RULE_SETUP \
@@ -1236,9 +1228,9 @@  extern int xlu__disk_yylex (yyscan_t yyscanner);
  */
 YY_DECL
 {
-	register yy_state_type yy_current_state;
-	register char *yy_cp, *yy_bp;
-	register int yy_act;
+	yy_state_type yy_current_state;
+	char *yy_cp, *yy_bp;
+	int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
 	if ( !yyg->yy_init )
@@ -1274,14 +1266,14 @@  YY_DECL
 		}
 
 	{
-#line 165 "libxlu_disk_l.l"
+#line 166 "libxlu_disk_l.l"
 
 
  /*----- the scanner rules which do the parsing -----*/
 
-#line 1283 "libxlu_disk_l.c"
+#line 1275 "libxlu_disk_l.c"
 
-	while ( 1 )		/* loops until end-of-file is reached */
+	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
 		yyg->yy_more_len = 0;
 		if ( yyg->yy_more_flag )
@@ -1307,18 +1299,18 @@  YY_DECL
 yy_match:
 		do
 			{
-			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+			YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 355 )
+				if ( yy_current_state >= 356 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
 			*yyg->yy_state_ptr++ = yy_current_state;
 			++yy_cp;
 			}
-		while ( yy_current_state != 354 );
+		while ( yy_current_state != 355 );
 
 yy_find_action:
 		yy_current_state = *--yyg->yy_state_ptr;
@@ -1368,135 +1360,135 @@  do_action:	/* This label is used only to access EOF actions. */
 case 1:
 /* rule 1 can match eol */
 YY_RULE_SETUP
-#line 169 "libxlu_disk_l.l"
+#line 170 "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 173 "libxlu_disk_l.l"
+#line 174 "libxlu_disk_l.l"
 { STRIP(','); setformat(DPC, FROMEQUALS); }
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 175 "libxlu_disk_l.l"
+#line 176 "libxlu_disk_l.l"
 { DPC->disk->is_cdrom = 1; }
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 176 "libxlu_disk_l.l"
+#line 177 "libxlu_disk_l.l"
 { DPC->disk->is_cdrom = 1; }
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 177 "libxlu_disk_l.l"
+#line 178 "libxlu_disk_l.l"
 { DPC->disk->is_cdrom = 0; }
 	YY_BREAK
 case 6:
 /* rule 6 can match eol */
 YY_RULE_SETUP
-#line 178 "libxlu_disk_l.l"
+#line 179 "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 180 "libxlu_disk_l.l"
+#line 181 "libxlu_disk_l.l"
 { STRIP(','); setaccess(DPC, FROMEQUALS); }
 	YY_BREAK
 case 8:
 /* rule 8 can match eol */
 YY_RULE_SETUP
-#line 181 "libxlu_disk_l.l"
+#line 182 "libxlu_disk_l.l"
 { STRIP(','); SAVESTRING("backend", backend_domname, FROMEQUALS); }
 	YY_BREAK
 case 9:
 /* rule 9 can match eol */
 YY_RULE_SETUP
-#line 182 "libxlu_disk_l.l"
+#line 183 "libxlu_disk_l.l"
 { STRIP(','); setbackendtype(DPC,FROMEQUALS); }
 	YY_BREAK
 case 10:
 /* rule 10 can match eol */
 YY_RULE_SETUP
-#line 184 "libxlu_disk_l.l"
+#line 185 "libxlu_disk_l.l"
 { STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); }
 	YY_BREAK
 case 11:
 /* rule 11 can match eol */
 YY_RULE_SETUP
-#line 185 "libxlu_disk_l.l"
+#line 186 "libxlu_disk_l.l"
 { STRIP(','); SAVESTRING("script", script, FROMEQUALS); }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 186 "libxlu_disk_l.l"
+#line 187 "libxlu_disk_l.l"
 { DPC->disk->direct_io_safe = 1; }
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 187 "libxlu_disk_l.l"
+#line 188 "libxlu_disk_l.l"
 { libxl_defbool_set(&DPC->disk->discard_enable, true); }
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 188 "libxlu_disk_l.l"
+#line 189 "libxlu_disk_l.l"
 { libxl_defbool_set(&DPC->disk->discard_enable, false); }
 	YY_BREAK
 /* Note that the COLO configuration settings should be considered unstable.
   * They may change incompatibly in future versions of Xen. */
 case 15:
 YY_RULE_SETUP
-#line 191 "libxlu_disk_l.l"
+#line 192 "libxlu_disk_l.l"
 { libxl_defbool_set(&DPC->disk->colo_enable, true); }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 192 "libxlu_disk_l.l"
+#line 193 "libxlu_disk_l.l"
 { libxl_defbool_set(&DPC->disk->colo_enable, false); }
 	YY_BREAK
 case 17:
 /* rule 17 can match eol */
 YY_RULE_SETUP
-#line 193 "libxlu_disk_l.l"
+#line 194 "libxlu_disk_l.l"
 { STRIP(','); SAVESTRING("colo-host", colo_host, FROMEQUALS); }
 	YY_BREAK
 case 18:
 /* rule 18 can match eol */
 YY_RULE_SETUP
-#line 194 "libxlu_disk_l.l"
+#line 195 "libxlu_disk_l.l"
 { STRIP(','); setcoloport(DPC, FROMEQUALS); }
 	YY_BREAK
 case 19:
 /* rule 19 can match eol */
 YY_RULE_SETUP
-#line 195 "libxlu_disk_l.l"
+#line 196 "libxlu_disk_l.l"
 { STRIP(','); SAVESTRING("colo-export", colo_export, FROMEQUALS); }
 	YY_BREAK
 case 20:
 /* rule 20 can match eol */
 YY_RULE_SETUP
-#line 196 "libxlu_disk_l.l"
+#line 197 "libxlu_disk_l.l"
 { STRIP(','); SAVESTRING("active-disk", active_disk, FROMEQUALS); }
 	YY_BREAK
 case 21:
 /* rule 21 can match eol */
 YY_RULE_SETUP
-#line 197 "libxlu_disk_l.l"
+#line 198 "libxlu_disk_l.l"
 { STRIP(','); SAVESTRING("hidden-disk", hidden_disk, FROMEQUALS); }
 	YY_BREAK
 /* the target magic parameter, eats the rest of the string */
 case 22:
 YY_RULE_SETUP
-#line 201 "libxlu_disk_l.l"
+#line 202 "libxlu_disk_l.l"
 { STRIP(','); SAVESTRING("target", pdev_path, FROMEQUALS); }
 	YY_BREAK
 /* unknown parameters */
 case 23:
 /* rule 23 can match eol */
 YY_RULE_SETUP
-#line 205 "libxlu_disk_l.l"
+#line 206 "libxlu_disk_l.l"
 { xlu__disk_err(DPC,yytext,"unknown parameter"); }
 	YY_BREAK
 /* deprecated prefixes */
@@ -1504,7 +1496,7 @@  YY_RULE_SETUP
    * matched the whole string, so these patterns take precedence */
 case 24:
 YY_RULE_SETUP
-#line 212 "libxlu_disk_l.l"
+#line 213 "libxlu_disk_l.l"
 {
                     STRIP(':');
                     DPC->had_depr_prefix=1; DEPRECATE("use `[format=]...,'");
@@ -1513,7 +1505,7 @@  YY_RULE_SETUP
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 218 "libxlu_disk_l.l"
+#line 219 "libxlu_disk_l.l"
 {
                     char *newscript;
                     STRIP(':');
@@ -1532,12 +1524,12 @@  case 26:
 yyg->yy_c_buf_p = yy_cp = yy_bp + 8;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 231 "libxlu_disk_l.l"
+#line 232 "libxlu_disk_l.l"
 { DPC->had_depr_prefix=1; DEPRECATE(0); }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 232 "libxlu_disk_l.l"
+#line 233 "libxlu_disk_l.l"
 { DPC->had_depr_prefix=1; DEPRECATE(0); }
 	YY_BREAK
 case 28:
@@ -1545,7 +1537,7 @@  case 28:
 yyg->yy_c_buf_p = yy_cp = yy_bp + 4;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 233 "libxlu_disk_l.l"
+#line 234 "libxlu_disk_l.l"
 { DPC->had_depr_prefix=1; DEPRECATE(0); }
 	YY_BREAK
 case 29:
@@ -1553,7 +1545,7 @@  case 29:
 yyg->yy_c_buf_p = yy_cp = yy_bp + 6;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 234 "libxlu_disk_l.l"
+#line 235 "libxlu_disk_l.l"
 { DPC->had_depr_prefix=1; DEPRECATE(0); }
 	YY_BREAK
 case 30:
@@ -1561,7 +1553,7 @@  case 30:
 yyg->yy_c_buf_p = yy_cp = yy_bp + 5;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 235 "libxlu_disk_l.l"
+#line 236 "libxlu_disk_l.l"
 { DPC->had_depr_prefix=1; DEPRECATE(0); }
 	YY_BREAK
 case 31:
@@ -1569,13 +1561,13 @@  case 31:
 yyg->yy_c_buf_p = yy_cp = yy_bp + 4;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 236 "libxlu_disk_l.l"
+#line 237 "libxlu_disk_l.l"
 { DPC->had_depr_prefix=1; DEPRECATE(0); }
 	YY_BREAK
 case 32:
 /* rule 32 can match eol */
 YY_RULE_SETUP
-#line 238 "libxlu_disk_l.l"
+#line 239 "libxlu_disk_l.l"
 {
 		  xlu__disk_err(DPC,yytext,"unknown deprecated disk prefix");
 		  return 0;
@@ -1585,7 +1577,7 @@  YY_RULE_SETUP
 case 33:
 /* rule 33 can match eol */
 YY_RULE_SETUP
-#line 245 "libxlu_disk_l.l"
+#line 246 "libxlu_disk_l.l"
 {
     STRIP(',');
 
@@ -1614,7 +1606,7 @@  YY_RULE_SETUP
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 271 "libxlu_disk_l.l"
+#line 272 "libxlu_disk_l.l"
 {
     BEGIN(LEXERR);
     yymore();
@@ -1622,17 +1614,17 @@  YY_RULE_SETUP
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 275 "libxlu_disk_l.l"
+#line 276 "libxlu_disk_l.l"
 {
     xlu__disk_err(DPC,yytext,"bad disk syntax"); return 0;
 }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 278 "libxlu_disk_l.l"
+#line 279 "libxlu_disk_l.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK
-#line 1636 "libxlu_disk_l.c"
+#line 1628 "libxlu_disk_l.c"
 			case YY_STATE_EOF(INITIAL):
 			case YY_STATE_EOF(LEXERR):
 				yyterminate();
@@ -1777,9 +1769,9 @@  YY_FATAL_ERROR( "flex scanner jammed" );
 static int yy_get_next_buffer (yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-	register char *source = yyg->yytext_ptr;
-	register int number_to_move, i;
+	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	char *source = yyg->yytext_ptr;
+	yy_size_t number_to_move, i;
 	int ret_val;
 
 	if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
@@ -1808,7 +1800,7 @@  static int yy_get_next_buffer (yyscan_t yyscanner)
 	/* Try to read more data. */
 
 	/* First move last chars to start of buffer. */
-	number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
+	number_to_move = (yy_size_t) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
 
 	for ( i = 0; i < number_to_move; ++i )
 		*(dest++) = *(source++);
@@ -1861,9 +1853,9 @@  static int yy_get_next_buffer (yyscan_t yyscanner)
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
-	if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+	if ((int) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
 		/* Extend the array by 50%, plus the number we really need. */
-		yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
+		int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
 		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) xlu__disk_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
 		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
 			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
@@ -1882,8 +1874,8 @@  static int yy_get_next_buffer (yyscan_t yyscanner)
 
     static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
 {
-	register yy_state_type yy_current_state;
-	register char *yy_cp;
+	yy_state_type yy_current_state;
+	char *yy_cp;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
 	yy_current_state = yyg->yy_start;
@@ -1893,14 +1885,14 @@  static int yy_get_next_buffer (yyscan_t yyscanner)
 
 	for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
 		{
-		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 355 )
+			if ( yy_current_state >= 356 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
 		*yyg->yy_state_ptr++ = yy_current_state;
 		}
 
@@ -1914,18 +1906,18 @@  static int yy_get_next_buffer (yyscan_t yyscanner)
  */
     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
 {
-	register int yy_is_jam;
+	int yy_is_jam;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
 
-	register YY_CHAR yy_c = 1;
+	YY_CHAR yy_c = 1;
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 355 )
+		if ( yy_current_state >= 356 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 354);
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+	yy_is_jam = (yy_current_state == 355);
 	if ( ! yy_is_jam )
 		*yyg->yy_state_ptr++ = yy_current_state;
 
@@ -1933,6 +1925,10 @@  static int yy_get_next_buffer (yyscan_t yyscanner)
 	return yy_is_jam ? 0 : yy_current_state;
 }
 
+#ifndef YY_NO_UNPUT
+
+#endif
+
 #ifndef YY_NO_INPUT
 #ifdef __cplusplus
     static int yyinput (yyscan_t yyscanner)
@@ -1958,7 +1954,7 @@  static int yy_get_next_buffer (yyscan_t yyscanner)
 
 		else
 			{ /* need more input */
-			yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
+			int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
 			++yyg->yy_c_buf_p;
 
 			switch ( yy_get_next_buffer( yyscanner ) )
@@ -1982,7 +1978,7 @@  static int yy_get_next_buffer (yyscan_t yyscanner)
 				case EOB_ACT_END_OF_FILE:
 					{
 					if ( xlu__disk_yywrap(yyscanner ) )
-						return EOF;
+						return 0;
 
 					if ( ! yyg->yy_did_buffer_switch_on_eof )
 						YY_NEW_FILE;
@@ -2086,7 +2082,7 @@  static void xlu__disk_yy_load_buffer_state  (yyscan_t yyscanner)
 	if ( ! b )
 		YY_FATAL_ERROR( "out of dynamic memory in xlu__disk_yy_create_buffer()" );
 
-	b->yy_buf_size = size;
+	b->yy_buf_size = (yy_size_t)size;
 
 	/* yy_ch_buf has to be 2 characters longer than the size given because
 	 * we need to put in 2 end-of-buffer characters.
@@ -2238,7 +2234,7 @@  void xlu__disk_yypop_buffer_state (yyscan_t yyscanner)
  */
 static void xlu__disk_yyensure_buffer_stack (yyscan_t yyscanner)
 {
-	yy_size_t num_to_alloc;
+	int num_to_alloc;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
 	if (!yyg->yy_buffer_stack) {
@@ -2247,7 +2243,7 @@  static void xlu__disk_yyensure_buffer_stack (yyscan_t yyscanner)
 		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
 		 * immediate realloc on the next call.
          */
-		num_to_alloc = 1;
+      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
 		yyg->yy_buffer_stack = (struct yy_buffer_state**)xlu__disk_yyalloc
 								(num_to_alloc * sizeof(struct yy_buffer_state*)
 								, yyscanner);
@@ -2264,7 +2260,7 @@  static void xlu__disk_yyensure_buffer_stack (yyscan_t yyscanner)
 	if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
 
 		/* Increase the buffer to prepare for a possible push. */
-		int grow_size = 8 /* arbitrary grow size */;
+		yy_size_t grow_size = 8 /* arbitrary grow size */;
 
 		num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
 		yyg->yy_buffer_stack = (struct yy_buffer_state**)xlu__disk_yyrealloc
@@ -2294,7 +2290,7 @@  YY_BUFFER_STATE xlu__disk_yy_scan_buffer  (char * base, yy_size_t  size , yyscan
 	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
 	     base[size-1] != YY_END_OF_BUFFER_CHAR )
 		/* They forgot to leave room for the EOB's. */
-		return 0;
+		return NULL;
 
 	b = (YY_BUFFER_STATE) xlu__disk_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
 	if ( ! b )
@@ -2303,7 +2299,7 @@  YY_BUFFER_STATE xlu__disk_yy_scan_buffer  (char * base, yy_size_t  size , yyscan
 	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
 	b->yy_buf_pos = b->yy_ch_buf = base;
 	b->yy_is_our_buffer = 0;
-	b->yy_input_file = 0;
+	b->yy_input_file = NULL;
 	b->yy_n_chars = b->yy_buf_size;
 	b->yy_is_interactive = 0;
 	b->yy_at_bol = 1;
@@ -2326,7 +2322,7 @@  YY_BUFFER_STATE xlu__disk_yy_scan_buffer  (char * base, yy_size_t  size , yyscan
 YY_BUFFER_STATE xlu__disk_yy_scan_string (yyconst char * yystr , yyscan_t yyscanner)
 {
     
-	return xlu__disk_yy_scan_bytes(yystr,strlen(yystr) ,yyscanner);
+	return xlu__disk_yy_scan_bytes(yystr,(int) strlen(yystr) ,yyscanner);
 }
 
 /** Setup the input buffer state to scan the given bytes. The next call to xlu__disk_yylex() will
@@ -2336,7 +2332,7 @@  YY_BUFFER_STATE xlu__disk_yy_scan_string (yyconst char * yystr , yyscan_t yyscan
  * @param yyscanner The scanner object.
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE xlu__disk_yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len , yyscan_t yyscanner)
+YY_BUFFER_STATE xlu__disk_yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len , yyscan_t yyscanner)
 {
 	YY_BUFFER_STATE b;
 	char *buf;
@@ -2344,7 +2340,7 @@  YY_BUFFER_STATE xlu__disk_yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yy
 	yy_size_t i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = _yybytes_len + 2;
+	n = (yy_size_t) _yybytes_len + 2;
 	buf = (char *) xlu__disk_yyalloc(n ,yyscanner );
 	if ( ! buf )
 		YY_FATAL_ERROR( "out of dynamic memory in xlu__disk_yy_scan_bytes()" );
@@ -2370,9 +2366,11 @@  YY_BUFFER_STATE xlu__disk_yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yy
 #define YY_EXIT_FAILURE 2
 #endif
 
-static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
+static void yynoreturn yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
 {
-    	(void) fprintf( stderr, "%s\n", msg );
+	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	(void)yyg;
+	(void) fprintf( stderr, "%s\n", msg );
 	exit( YY_EXIT_FAILURE );
 }
 
@@ -2451,7 +2449,7 @@  FILE *xlu__disk_yyget_out  (yyscan_t yyscanner)
 /** Get the length of the current token.
  * @param yyscanner The scanner object.
  */
-yy_size_t xlu__disk_yyget_leng  (yyscan_t yyscanner)
+int xlu__disk_yyget_leng  (yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
     return yyleng;
@@ -2478,10 +2476,10 @@  void xlu__disk_yyset_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
 }
 
 /** Set the current line number.
- * @param line_number
+ * @param _line_number line number
  * @param yyscanner The scanner object.
  */
-void xlu__disk_yyset_lineno (int  line_number , yyscan_t yyscanner)
+void xlu__disk_yyset_lineno (int  _line_number , yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
@@ -2489,14 +2487,14 @@  void xlu__disk_yyset_lineno (int  line_number , yyscan_t yyscanner)
         if (! YY_CURRENT_BUFFER )
            YY_FATAL_ERROR( "xlu__disk_yyset_lineno called with no buffer" );
     
-    yylineno = line_number;
+    yylineno = _line_number;
 }
 
 /** Set the current column.
- * @param line_number
+ * @param _column_no column number
  * @param yyscanner The scanner object.
  */
-void xlu__disk_yyset_column (int  column_no , yyscan_t yyscanner)
+void xlu__disk_yyset_column (int  _column_no , yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
@@ -2504,25 +2502,25 @@  void xlu__disk_yyset_column (int  column_no , yyscan_t yyscanner)
         if (! YY_CURRENT_BUFFER )
            YY_FATAL_ERROR( "xlu__disk_yyset_column called with no buffer" );
     
-    yycolumn = column_no;
+    yycolumn = _column_no;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
- * @param in_str A readable stream.
+ * @param _in_str A readable stream.
  * @param yyscanner The scanner object.
  * @see xlu__disk_yy_switch_to_buffer
  */
-void xlu__disk_yyset_in (FILE *  in_str , yyscan_t yyscanner)
+void xlu__disk_yyset_in (FILE *  _in_str , yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-    yyin = in_str ;
+    yyin = _in_str ;
 }
 
-void xlu__disk_yyset_out (FILE *  out_str , yyscan_t yyscanner)
+void xlu__disk_yyset_out (FILE *  _out_str , yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-    yyout = out_str ;
+    yyout = _out_str ;
 }
 
 int xlu__disk_yyget_debug  (yyscan_t yyscanner)
@@ -2531,10 +2529,10 @@  int xlu__disk_yyget_debug  (yyscan_t yyscanner)
     return yy_flex_debug;
 }
 
-void xlu__disk_yyset_debug (int  bdebug , yyscan_t yyscanner)
+void xlu__disk_yyset_debug (int  _bdebug , yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-    yy_flex_debug = bdebug ;
+    yy_flex_debug = _bdebug ;
 }
 
 /* Accessor methods for yylval and yylloc */
@@ -2610,10 +2608,10 @@  static int yy_init_globals (yyscan_t yyscanner)
      * This function is called from xlu__disk_yylex_destroy(), so don't allocate here.
      */
 
-    yyg->yy_buffer_stack = 0;
+    yyg->yy_buffer_stack = NULL;
     yyg->yy_buffer_stack_top = 0;
     yyg->yy_buffer_stack_max = 0;
-    yyg->yy_c_buf_p = (char *) 0;
+    yyg->yy_c_buf_p = NULL;
     yyg->yy_init = 0;
     yyg->yy_start = 0;
 
@@ -2631,8 +2629,8 @@  static int yy_init_globals (yyscan_t yyscanner)
     yyin = stdin;
     yyout = stdout;
 #else
-    yyin = (FILE *) 0;
-    yyout = (FILE *) 0;
+    yyin = NULL;
+    yyout = NULL;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
@@ -2681,7 +2679,10 @@  int xlu__disk_yylex_destroy  (yyscan_t yyscanner)
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
 {
-	register int i;
+	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	(void)yyg;
+
+	int i;
 	for ( i = 0; i < n; ++i )
 		s1[i] = s2[i];
 }
@@ -2690,7 +2691,7 @@  static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yysca
 #ifdef YY_NEED_STRLEN
 static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
 {
-	register int n;
+	int n;
 	for ( n = 0; s[n]; ++n )
 		;
 
@@ -2700,11 +2701,16 @@  static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
 
 void *xlu__disk_yyalloc (yy_size_t  size , yyscan_t yyscanner)
 {
-	return (void *) malloc( size );
+	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	(void)yyg;
+	return malloc(size);
 }
 
 void *xlu__disk_yyrealloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
 {
+	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	(void)yyg;
+
 	/* The cast to (char *) in the following accommodates both
 	 * implementations that use char* generic pointers, and those
 	 * that use void* generic pointers.  It works with the latter
@@ -2712,14 +2718,16 @@  void *xlu__disk_yyrealloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
 	 * any pointer type to void*, and deal with argument conversions
 	 * as though doing an assignment.
 	 */
-	return (void *) realloc( (char *) ptr, size );
+	return realloc(ptr, size);
 }
 
 void xlu__disk_yyfree (void * ptr , yyscan_t yyscanner)
 {
+	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	(void)yyg;
 	free( (char *) ptr );	/* see xlu__disk_yyrealloc() for (char *) cast */
 }
 
 #define YYTABLES_NAME "yytables"
 
-#line 277 "libxlu_disk_l.l"
+#line 279 "libxlu_disk_l.l"
diff --git a/tools/libxl/libxlu_disk_l.h b/tools/libxl/libxlu_disk_l.h
index 794274f552..abeb9bdd68 100644
--- a/tools/libxl/libxlu_disk_l.h
+++ b/tools/libxl/libxlu_disk_l.h
@@ -3,12 +3,9 @@ 
 #define xlu__disk_yyIN_HEADER 1
 
 #line 6 "libxlu_disk_l.h"
-#line 31 "libxlu_disk_l.l"
 #include "libxl_osdeps.h" /* must come before any other headers */
 
-
-
-#line 12 "libxlu_disk_l.h"
+#line 9 "libxlu_disk_l.h"
 
 #define  YY_INT_ALIGNED short int
 
@@ -16,8 +13,8 @@ 
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 39
+#define YY_FLEX_MINOR_VERSION 6
+#define YY_FLEX_SUBMINOR_VERSION 1
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -96,25 +93,13 @@  typedef unsigned int flex_uint32_t;
 
 #endif /* ! FLEXINT_H */
 
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif	/* defined (__STDC__) */
-#endif	/* ! __cplusplus */
-
-#ifdef YY_USE_CONST
+/* TODO: this is always defined, so inline it */
 #define yyconst const
+
+#if defined(__GNUC__) && __GNUC__ >= 3
+#define yynoreturn __attribute__((__noreturn__))
 #else
-#define yyconst
+#define yynoreturn
 #endif
 
 /* An opaque pointer. */
@@ -169,12 +154,12 @@  struct yy_buffer_state
 	/* Size of input buffer in bytes, not including room for EOB
 	 * characters.
 	 */
-	yy_size_t yy_buf_size;
+	int yy_buf_size;
 
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
 	 */
-	yy_size_t yy_n_chars;
+	int yy_n_chars;
 
 	/* Whether we "own" the buffer - i.e., we know we created it,
 	 * and can realloc() it to grow it, and should free() it to
@@ -218,13 +203,13 @@  void xlu__disk_yypop_buffer_state (yyscan_t yyscanner );
 
 YY_BUFFER_STATE xlu__disk_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
 YY_BUFFER_STATE xlu__disk_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
-YY_BUFFER_STATE xlu__disk_yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner );
+YY_BUFFER_STATE xlu__disk_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
 
 void *xlu__disk_yyalloc (yy_size_t ,yyscan_t yyscanner );
 void *xlu__disk_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
 void xlu__disk_yyfree (void * ,yyscan_t yyscanner );
 
-#define xlu__disk_yywrap(yyscanner) 1
+#define xlu__disk_yywrap(yyscanner) (/*CONSTCOND*/1)
 #define YY_SKIP_YYWRAP
 
 #define yytext_ptr yytext_r
@@ -266,23 +251,23 @@  void xlu__disk_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
 
 FILE *xlu__disk_yyget_in (yyscan_t yyscanner );
 
-void xlu__disk_yyset_in  (FILE * in_str ,yyscan_t yyscanner );
+void xlu__disk_yyset_in  (FILE * _in_str ,yyscan_t yyscanner );
 
 FILE *xlu__disk_yyget_out (yyscan_t yyscanner );
 
-void xlu__disk_yyset_out  (FILE * out_str ,yyscan_t yyscanner );
+void xlu__disk_yyset_out  (FILE * _out_str ,yyscan_t yyscanner );
 
-yy_size_t xlu__disk_yyget_leng (yyscan_t yyscanner );
+			int xlu__disk_yyget_leng (yyscan_t yyscanner );
 
 char *xlu__disk_yyget_text (yyscan_t yyscanner );
 
 int xlu__disk_yyget_lineno (yyscan_t yyscanner );
 
-void xlu__disk_yyset_lineno (int line_number ,yyscan_t yyscanner );
+void xlu__disk_yyset_lineno (int _line_number ,yyscan_t yyscanner );
 
 int xlu__disk_yyget_column  (yyscan_t yyscanner );
 
-void xlu__disk_yyset_column (int column_no ,yyscan_t yyscanner );
+void xlu__disk_yyset_column (int _column_no ,yyscan_t yyscanner );
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -348,8 +333,8 @@  extern int xlu__disk_yylex (yyscan_t yyscanner);
 #undef YY_DECL
 #endif
 
-#line 277 "libxlu_disk_l.l"
+#line 279 "libxlu_disk_l.l"
 
-#line 354 "libxlu_disk_l.h"
+#line 339 "libxlu_disk_l.h"
 #undef xlu__disk_yyIN_HEADER
 #endif /* xlu__disk_yyHEADER_H */
diff --git a/tools/libxl/libxlu_disk_l.l b/tools/libxl/libxlu_disk_l.l
index 5b6db221e4..97039a2800 100644
--- a/tools/libxl/libxlu_disk_l.l
+++ b/tools/libxl/libxlu_disk_l.l
@@ -102,6 +102,7 @@  static void setformat(DiskParseContext *dpc, const char *str) {
     else if (!strcmp(str,"qcow2"))  DSET(dpc,format,FORMAT,str,QCOW2);
     else if (!strcmp(str,"vhd"))    DSET(dpc,format,FORMAT,str,VHD);
     else if (!strcmp(str,"empty"))  DSET(dpc,format,FORMAT,str,EMPTY);
+    else if (!strcmp(str,"qed"))    DSET(dpc,format,FORMAT,str,QED);
     else xlu__disk_err(dpc,str,"unknown value for format");
 }