[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] libxl: support custom block hotplug scripts
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1343398879 -3600 # Node ID 9357ff928a355844a46fe33cfee6727c4541f696 # Parent 006588b1bbb609186df45770a3c16d3028b54778 libxl: support custom block hotplug scripts These are provided using the "script=" syntax described in docs/misc/xl-disk-configuration.txt. At a high level this is rather simple but there are some subtleties: - Previously in the blktap case we would add "script = .../blktap" to the backend flex array, but then jumped to the PHY case which added "script = .../block" too. The block one takes precendence since it comes second. This was, accidentally, correct. The blktap script is for blktap1 devices and not blktap2 devices. libxl completely manages the blktap2 side of things without resorting to hotplug scripts and creates a blkback device directly. Therefore the "block" script is the correct one to call. - libxl should not write the "physical-device" node. This is the responsibility of the "block" script. Writing the "physical-device" node in libxl basically completely short-cuts the standard block hotplug script which uses "physical-device" to know if it has run already or not. In the case of more complex block-hotplug scripts libxl cannot know the right value to write here anyway, in particular the device may not exist until after the script is called. This change has the side effect of re-enabling the checks for device sharing aspect of the default block script, which I have tested and which now cause libxl to properly abort now that libxl properly checks for hotplug script errors. There is no sharing check for blktap2 since even if you reuse the same vhd the resulting tap device is different. - When the block script falls through and shells out to a block-$type script it used to pass "$node" however the only place this was assigned was in the remove+phy case (in which case it contains the file:// derived /dev/loopN device), and in that case the script exits without falling through to the block-$type case. Since libxl never creates a type other than phy this never happens in practice anyway and we now call the correct block-$type script directly. But fix it up anyway since it is confusing. - The block-nbd and block-enbd scripts which we supply appear to be broken WRT the hotplug calling convention, in that they seem to expect a command line parameter (perhaps the $node described above) rather than reading the appropriate node from xenstore. I rather suspect this was broken by 7774:e2e7f47e6f79 in November 2005. I think it is safe to say no one is using these scripts! I haven't fixed this here. It would be good to track down some working scripts and either incorproate them or defer to them (e.g. if they live somewhere useful like the nbd tools package). - Added a few block script related entries to check-xl-disk-parse from http://backdrift.org/xen-block-iscsi-script-with-multipath-support and http://lists.linbit.com/pipermail/drbd-user/2008-September/010221.html / http://www.drbd.org/users-guide-emb/s-xen-configure-domu.html (and snuck in another interesting empty CDROM case) This highlighted two bugs in the libxlu disk parser handling of the deprecated "<script>:" prefix: - It was failing to prefix with "block-" to construct the actual script name - The regex for matching iscsi or drdb or e?nbd was incorrect - Use libxl__abs_path for the nic script too. Just because the existing code nearly tricked me into repeating the mistake I have tested with a custom block-ijc which is just block + extra debug. I also tested on a blktap2 system. I haven't tested anything more complex like iscsi: or nbd: other than what check-xl-disk-parse exercises. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> diff -r 006588b1bbb6 -r 9357ff928a35 tools/hotplug/Linux/block --- a/tools/hotplug/Linux/block Thu Jul 26 17:11:07 2012 +0100 +++ b/tools/hotplug/Linux/block Fri Jul 27 15:21:19 2012 +0100 @@ -342,4 +342,4 @@ esac # If we've reached here, $t is neither phy nor file, so fire a helper script. [ -x ${XEN_SCRIPT_DIR}/block-"$t" ] && \ - ${XEN_SCRIPT_DIR}/block-"$t" "$command" $node + ${XEN_SCRIPT_DIR}/block-"$t" "$command" diff -r 006588b1bbb6 -r 9357ff928a35 tools/libxl/check-xl-disk-parse --- a/tools/libxl/check-xl-disk-parse Thu Jul 26 17:11:07 2012 +0100 +++ b/tools/libxl/check-xl-disk-parse Fri Jul 27 15:21:19 2012 +0100 @@ -142,5 +142,44 @@ disk: { EOF one 0 vdev=hdc,access=r,devtype=cdrom,format=empty +one 0 vdev=hdc,access=r,devtype=cdrom + +expected <<EOF +disk: { + "backend_domid": 0, + "pdev_path": "iqn.2001-05.com.equallogic:0-8a0906-23fe93404-c82797962054a96d-examplehost", + "vdev": "xvda", + "backend": "unknown", + "format": "raw", + "script": "block-iscsi", + "removable": 0, + "readwrite": 1, + "is_cdrom": 0 +} + +EOF + +# http://backdrift.org/xen-block-iscsi-script-with-multipath-support +one 0 iscsi:iqn.2001-05.com.equallogic:0-8a0906-23fe93404-c82797962054a96d-examplehost,xvda,w +one 0 vdev=xvda,access=w,script=block-iscsi,target=iqn.2001-05.com.equallogic:0-8a0906-23fe93404-c82797962054a96d-examplehost + +expected <<EOF +disk: { + "backend_domid": 0, + "pdev_path": "app01", + "vdev": "hda", + "backend": "unknown", + "format": "raw", + "script": "block-drbd", + "removable": 0, + "readwrite": 1, + "is_cdrom": 0 +} + +EOF + +# http://lists.linbit.com/pipermail/drbd-user/2008-September/010221.html +# http://www.drbd.org/users-guide-emb/s-xen-configure-domu.html +one 0 drbd:app01,hda,w complete diff -r 006588b1bbb6 -r 9357ff928a35 tools/libxl/libxl.c --- a/tools/libxl/libxl.c Thu Jul 26 17:11:07 2012 +0100 +++ b/tools/libxl/libxl.c Fri Jul 27 15:21:19 2012 +0100 @@ -1731,7 +1731,24 @@ int libxl__device_disk_setdefault(libxl_ rc = libxl__device_disk_set_backend(gc, disk); if (rc) return rc; - return rc; + switch (disk->backend) { + case LIBXL_DISK_BACKEND_PHY: + case LIBXL_DISK_BACKEND_TAP: + if (!disk->script) + disk->script = libxl__sprintf(NOGC, "%s/%s", + libxl__xen_script_dir_path(), + "block"); + break; + case LIBXL_DISK_BACKEND_QDISK: + /* No default script */ + break; + default: + LOG(ERROR, "unrecognized disk backend type: %s (%d)\n", + libxl_disk_backend_to_string(disk->backend), + disk->backend); + return ERROR_INVAL; + } + return 0; } int libxl__device_from_disk(libxl__gc *gc, uint32_t domid, @@ -1797,7 +1814,7 @@ static void device_disk_add(libxl__egc * flexarray_t *back = NULL; char *dev; libxl__device *device; - int major, minor, rc; + int rc; libxl_ctx *ctx = gc->owner; xs_transaction_t t = XBT_NULL; @@ -1832,13 +1849,6 @@ static void device_disk_add(libxl__egc * goto out_free; } - if (disk->script) { - LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "External block scripts" - " not yet supported, sorry"); - rc = ERROR_INVAL; - goto out_free; - } - GCNEW(device); rc = libxl__device_from_disk(gc, domid, disk, device); if (rc != 0) { @@ -1851,18 +1861,9 @@ static void device_disk_add(libxl__egc * case LIBXL_DISK_BACKEND_PHY: dev = disk->pdev_path; do_backend_phy: - libxl__device_physdisk_major_minor(dev, &major, &minor); - flexarray_append(back, "physical-device"); - flexarray_append(back, libxl__sprintf(gc, "%x:%x", major, minor)); - flexarray_append(back, "params"); flexarray_append(back, dev); - flexarray_append(back, "script"); - flexarray_append(back, GCSPRINTF("%s/%s", - libxl__xen_script_dir_path(), - "block")); - assert(device->backend_kind == LIBXL__DEVICE_KIND_VBD); break; case LIBXL_DISK_BACKEND_TAP: @@ -1878,11 +1879,6 @@ static void device_disk_add(libxl__egc * libxl__device_disk_string_of_format(disk->format), disk->pdev_path)); - flexarray_append(back, "script"); - flexarray_append(back, GCSPRINTF("%s/%s", - libxl__xen_script_dir_path(), - "blktap")); - /* now create a phy device to export the device to the guest */ goto do_backend_phy; case LIBXL_DISK_BACKEND_QDISK: @@ -1897,6 +1893,12 @@ static void device_disk_add(libxl__egc * goto out_free; } + if (disk->script) { + flexarray_append(back, "script"); + flexarray_append(back, libxl__abs_path(gc, disk->script, + libxl__xen_script_dir_path())); + } + flexarray_append(back, "frontend-id"); flexarray_append(back, libxl__sprintf(gc, "%d", domid)); flexarray_append(back, "online"); @@ -2583,10 +2585,8 @@ void libxl__device_nic_add(libxl__egc *e flexarray_append(back, libxl__sprintf(gc, "%d", 1)); if (nic->script) { flexarray_append(back, "script"); - flexarray_append(back, nic->script[0]=='/' ? nic->script - : libxl__sprintf(gc, "%s/%s", - libxl__xen_script_dir_path(), - nic->script)); + flexarray_append(back, libxl__abs_path(gc, nic->script, + libxl__xen_script_dir_path())); } if (nic->ifname) { diff -r 006588b1bbb6 -r 9357ff928a35 tools/libxl/libxlu_disk_l.c --- a/tools/libxl/libxlu_disk_l.c Thu Jul 26 17:11:07 2012 +0100 +++ b/tools/libxl/libxlu_disk_l.c Fri Jul 27 15:21:19 2012 +0100 @@ -366,7 +366,7 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_acclist[456] = +static yyconst flex_int16_t yy_acclist[447] = { 0, 24, 24, 26, 22, 23, 25, 8193, 22, 23, 25, 16385, 8193, 22, 25,16385, 22, 23, 25, 23, 25, @@ -379,77 +379,76 @@ static yyconst flex_int16_t yy_acclist[4 8213, 22,16405, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 24, 8193, 22, 8193, 22, 8193, 8213, 22, 8213, - 22, 8213, 12, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 24, 8193, 22, 8193, 22, 8193, 8213, 22, + 8213, 22, 8213, 12, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 8213, 22, 8213, 22, 8213, 12, 22, 17, 8213, 22, - 16405, 22, 22, 22, 22, 22, 22, 22, 8213, 22, - 16405, 20, 8213, 22,16405, 22, 8205, 8213, 22,16397, - 16405, 22, 22, 8208, 8213, 22,16400,16405, 22, 22, - 22, 22, 17, 8213, 22, 17, 8213, 22, 17, 22, - 17, 8213, 22, 3, 22, 22, 19, 8213, 22,16405, - 22, 22, 22, 22, 20, 8213, 22, 20, 8213, 22, + 22, 22, 8213, 22, 8213, 22, 8213, 12, 22, 17, + 8213, 22,16405, 22, 22, 22, 22, 22, 22, 22, + 8206, 8213, 22,16398,16405, 20, 8213, 22,16405, 22, + 8205, 8213, 22,16397,16405, 22, 22, 8208, 8213, 22, + 16400,16405, 22, 22, 22, 22, 17, 8213, 22, 17, + 8213, 22, 17, 22, 17, 8213, 22, 3, 22, 22, + 19, 8213, 22,16405, 22, 22, 8206, 8213, 22, 8206, - 20, 22, 20, 8213, 8205, 8213, 22, 8205, 8213, 22, - 8205, 22, 8205, 8213, 22, 8208, 8213, 22, 8208, 8213, - 22, 8208, 22, 8208, 8213, 22, 22, 9, 22, 17, - 8213, 22, 17, 8213, 22, 17, 8213, 17, 22, 17, - 22, 3, 22, 22, 19, 8213, 22, 19, 8213, 22, - 19, 22, 19, 8213, 22, 18, 8213, 22,16405, 8206, - 8213, 22,16398,16405, 22, 20, 8213, 22, 20, 8213, - 22, 20, 8213, 20, 22, 20, 8205, 8213, 22, 8205, - 8213, 22, 8205, 8213, 8205, 22, 8205, 22, 8208, 8213, - 22, 8208, 8213, 22, 8208, 8213, 8208, 22, 8208, 22, + 8213, 22, 8206, 22, 8206, 8213, 20, 8213, 22, 20, + 8213, 22, 20, 22, 20, 8213, 8205, 8213, 22, 8205, + 8213, 22, 8205, 22, 8205, 8213, 22, 8208, 8213, 22, + 8208, 8213, 22, 8208, 22, 8208, 8213, 22, 22, 9, + 22, 17, 8213, 22, 17, 8213, 22, 17, 8213, 17, + 22, 17, 22, 3, 22, 22, 19, 8213, 22, 19, + 8213, 22, 19, 22, 19, 8213, 22, 18, 8213, 22, + 16405, 8206, 8213, 22, 8206, 8213, 22, 8206, 8213, 8206, + 22, 8206, 20, 8213, 22, 20, 8213, 22, 20, 8213, + 20, 22, 20, 8205, 8213, 22, 8205, 8213, 22, 8205, - 22, 9, 12, 9, 7, 22, 22, 19, 8213, 22, - 19, 8213, 22, 19, 8213, 19, 22, 19, 2, 18, - 8213, 22, 18, 8213, 22, 18, 22, 18, 8213, 8206, - 8213, 22, 8206, 8213, 22, 8206, 22, 8206, 8213, 22, - 10, 22, 11, 9, 9, 12, 7, 12, 7, 22, - 6, 2, 12, 2, 18, 8213, 22, 18, 8213, 22, - 18, 8213, 18, 22, 18, 8206, 8213, 22, 8206, 8213, - 22, 8206, 8213, 8206, 22, 8206, 22, 10, 12, 10, - 15, 8213, 22,16405, 11, 12, 11, 7, 7, 12, - 22, 6, 12, 6, 6, 12, 6, 12, 2, 2, + 8213, 8205, 22, 8205, 22, 8208, 8213, 22, 8208, 8213, + 22, 8208, 8213, 8208, 22, 8208, 22, 22, 9, 12, + 9, 7, 22, 22, 19, 8213, 22, 19, 8213, 22, + 19, 8213, 19, 22, 19, 2, 18, 8213, 22, 18, + 8213, 22, 18, 22, 18, 8213, 10, 22, 11, 9, + 9, 12, 7, 12, 7, 22, 6, 2, 12, 2, + 18, 8213, 22, 18, 8213, 22, 18, 8213, 18, 22, + 18, 10, 12, 10, 15, 8213, 22,16405, 11, 12, + 11, 7, 7, 12, 22, 6, 12, 6, 6, 12, + 6, 12, 2, 2, 12, 10, 10, 12, 15, 8213, - 12, 8206, 22,16398, 10, 10, 12, 15, 8213, 22, - 15, 8213, 22, 15, 22, 15, 8213, 11, 12, 22, - 6, 6, 12, 6, 6, 15, 8213, 22, 15, 8213, - 22, 15, 8213, 15, 22, 15, 22, 6, 6, 8, - 6, 5, 6, 8, 12, 8, 4, 6, 5, 6, - 8, 8, 12, 4, 6 + 22, 15, 8213, 22, 15, 22, 15, 8213, 11, 12, + 22, 6, 6, 12, 6, 6, 15, 8213, 22, 15, + 8213, 22, 15, 8213, 15, 22, 15, 22, 6, 6, + 8, 6, 5, 6, 8, 12, 8, 4, 6, 5, + 6, 8, 8, 12, 4, 6 } ; -static yyconst flex_int16_t yy_accept[257] = +static yyconst flex_int16_t yy_accept[252] = { 0, 1, 1, 1, 2, 3, 4, 7, 12, 16, 19, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 68, 69, 70, 71, 73, 76, 78, 79, 80, 81, 84, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 105, 107, 108, - 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 97, 98, 99, 100, 101, 102, 103, 104, 106, 108, + 109, 111, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 133, 135, 136, 137, 138, 142, 143, 144, 145, - 146, 147, 148, 149, 152, 156, 157, 162, 163, 164, + 131, 132, 133, 135, 137, 138, 139, 140, 144, 145, + 146, 147, 148, 149, 150, 151, 156, 160, 161, 166, - 169, 170, 171, 172, 173, 176, 179, 181, 183, 184, - 186, 187, 191, 192, 193, 194, 195, 198, 201, 203, - 205, 208, 211, 213, 215, 216, 219, 222, 224, 226, - 227, 228, 229, 230, 233, 236, 238, 240, 241, 242, - 244, 245, 248, 251, 253, 255, 256, 260, 265, 266, - 269, 272, 274, 276, 277, 280, 283, 285, 287, 288, - 289, 292, 295, 297, 299, 300, 301, 302, 304, 305, - 306, 307, 308, 311, 314, 316, 318, 319, 320, 323, - 326, 328, 330, 333, 336, 338, 340, 341, 342, 343, - 344, 345, 347, 349, 350, 351, 352, 354, 355, 358, + 167, 168, 173, 174, 175, 176, 177, 180, 183, 185, + 187, 188, 190, 191, 195, 196, 197, 200, 203, 205, + 207, 210, 213, 215, 217, 220, 223, 225, 227, 228, + 231, 234, 236, 238, 239, 240, 241, 242, 245, 248, + 250, 252, 253, 254, 256, 257, 260, 263, 265, 267, + 268, 272, 275, 278, 280, 282, 283, 286, 289, 291, + 293, 294, 297, 300, 302, 304, 305, 306, 309, 312, + 314, 316, 317, 318, 319, 321, 322, 323, 324, 325, + 328, 331, 333, 335, 336, 337, 340, 343, 345, 347, + 348, 349, 350, 351, 353, 355, 356, 357, 358, 360, - 361, 363, 365, 366, 369, 372, 374, 376, 377, 378, - 380, 381, 385, 387, 388, 389, 391, 392, 394, 395, - 397, 399, 400, 402, 405, 406, 408, 411, 414, 416, - 418, 420, 421, 422, 424, 425, 426, 429, 432, 434, - 436, 437, 438, 439, 440, 441, 442, 444, 446, 447, - 449, 451, 452, 454, 456, 456 + 361, 364, 367, 369, 371, 372, 374, 375, 379, 381, + 382, 383, 385, 386, 388, 389, 391, 393, 394, 396, + 397, 399, 402, 405, 407, 409, 411, 412, 413, 415, + 416, 417, 420, 423, 425, 427, 428, 429, 430, 431, + 432, 433, 435, 437, 438, 440, 442, 443, 445, 447, + 447 } ; static yyconst flex_int32_t yy_ec[256] = @@ -492,244 +491,238 @@ static yyconst flex_int32_t yy_meta[34] 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[313] = +static yyconst flex_int16_t yy_base[308] = { 0, - 0, 0, 572, 560, 559, 551, 32, 35, 662, 662, - 44, 62, 30, 40, 32, 50, 533, 49, 47, 59, - 68, 525, 69, 517, 72, 0, 662, 515, 662, 83, - 91, 0, 0, 100, 501, 109, 0, 78, 51, 86, - 89, 74, 96, 105, 109, 110, 111, 112, 117, 73, - 119, 118, 121, 120, 122, 0, 134, 0, 0, 138, - 0, 0, 495, 130, 144, 129, 143, 145, 146, 147, - 148, 149, 153, 154, 155, 158, 161, 165, 166, 170, - 180, 0, 0, 662, 171, 201, 176, 175, 178, 183, - 465, 182, 190, 455, 212, 188, 221, 208, 224, 234, + 0, 0, 546, 538, 533, 521, 32, 35, 656, 656, + 44, 62, 30, 41, 50, 51, 507, 64, 47, 66, + 67, 499, 68, 487, 72, 0, 656, 465, 656, 87, + 91, 0, 0, 100, 452, 109, 0, 74, 95, 87, + 32, 96, 105, 110, 77, 97, 40, 113, 116, 112, + 118, 120, 121, 122, 123, 125, 0, 137, 0, 0, + 147, 0, 0, 449, 129, 126, 134, 143, 145, 147, + 148, 149, 151, 153, 156, 160, 155, 167, 162, 175, + 168, 159, 188, 0, 0, 656, 166, 197, 179, 185, + 176, 200, 435, 186, 193, 216, 225, 205, 234, 221, - 209, 230, 236, 221, 244, 0, 247, 0, 184, 248, - 244, 269, 231, 247, 251, 258, 272, 0, 279, 0, - 283, 0, 286, 0, 255, 290, 0, 293, 0, 270, - 281, 455, 254, 297, 0, 0, 0, 0, 294, 662, - 295, 308, 0, 310, 0, 257, 319, 328, 304, 331, - 0, 0, 0, 0, 335, 0, 0, 0, 0, 316, - 338, 0, 0, 0, 0, 333, 336, 447, 662, 429, - 338, 340, 348, 0, 0, 0, 0, 428, 351, 0, - 355, 0, 359, 0, 362, 0, 357, 427, 308, 369, - 426, 662, 425, 662, 346, 365, 423, 662, 371, 0, + 237, 247, 204, 230, 244, 213, 254, 0, 256, 0, + 251, 258, 254, 279, 256, 259, 267, 0, 269, 0, + 286, 0, 288, 0, 290, 0, 297, 0, 267, 299, + 0, 301, 0, 288, 297, 421, 302, 310, 0, 0, + 0, 0, 305, 656, 307, 319, 0, 321, 0, 322, + 332, 335, 0, 0, 0, 0, 339, 0, 0, 0, + 0, 342, 0, 0, 0, 0, 340, 349, 0, 0, + 0, 0, 337, 345, 420, 656, 419, 346, 350, 358, + 0, 0, 0, 0, 418, 360, 0, 362, 0, 417, + 319, 369, 416, 656, 415, 656, 276, 364, 414, 656, - 0, 0, 0, 378, 0, 0, 0, 0, 380, 421, - 662, 388, 420, 0, 419, 662, 373, 418, 662, 372, - 382, 417, 662, 398, 416, 662, 400, 0, 402, 0, - 0, 385, 415, 662, 390, 275, 409, 0, 0, 0, - 0, 405, 404, 406, 264, 412, 224, 129, 662, 87, - 662, 47, 662, 662, 662, 434, 438, 441, 445, 449, - 453, 457, 461, 465, 469, 473, 477, 481, 485, 489, - 493, 497, 501, 505, 509, 513, 517, 521, 525, 529, - 533, 537, 541, 545, 549, 553, 557, 561, 565, 569, - 573, 577, 581, 585, 589, 593, 597, 601, 605, 609, + 375, 0, 0, 0, 0, 413, 656, 384, 412, 0, + 410, 656, 370, 409, 656, 370, 378, 408, 656, 366, + 656, 394, 0, 396, 0, 0, 380, 316, 656, 377, + 387, 398, 0, 0, 0, 0, 399, 402, 407, 271, + 406, 228, 200, 656, 175, 656, 77, 656, 656, 656, + 428, 432, 435, 439, 443, 447, 451, 455, 459, 463, + 467, 471, 475, 479, 483, 487, 491, 495, 499, 503, + 507, 511, 515, 519, 523, 527, 531, 535, 539, 543, + 547, 551, 555, 559, 563, 567, 571, 575, 579, 583, + 587, 591, 595, 599, 603, 607, 611, 615, 619, 623, - 613, 617, 621, 625, 629, 633, 637, 641, 645, 649, - 653, 657 + 627, 631, 635, 639, 643, 647, 651 } ; -static yyconst flex_int16_t yy_def[313] = +static yyconst flex_int16_t yy_def[308] = { 0, - 255, 1, 256, 256, 255, 257, 258, 258, 255, 255, - 259, 259, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 260, 255, 257, 255, 261, - 258, 262, 262, 263, 12, 257, 264, 12, 12, 12, + 250, 1, 251, 251, 250, 252, 253, 253, 250, 250, + 254, 254, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 255, 250, 252, 250, 256, + 253, 257, 257, 258, 12, 252, 259, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 260, 261, 262, 262, 265, - 266, 266, 255, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 255, 256, 257, 257, + 260, 261, 261, 250, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 265, 266, 266, 255, 12, 267, 12, 12, 12, 12, - 12, 12, 12, 36, 268, 12, 269, 12, 12, 270, + 12, 12, 260, 261, 261, 250, 12, 262, 12, 12, + 12, 12, 12, 12, 12, 263, 264, 12, 265, 12, - 12, 12, 12, 12, 271, 272, 267, 272, 12, 12, - 12, 273, 12, 12, 12, 257, 274, 275, 268, 275, - 276, 277, 269, 277, 12, 278, 279, 270, 279, 12, - 12, 280, 12, 271, 272, 272, 281, 281, 12, 255, - 12, 282, 283, 273, 283, 12, 284, 285, 257, 274, - 275, 275, 286, 286, 276, 277, 277, 287, 287, 12, - 278, 279, 279, 288, 288, 12, 12, 289, 255, 290, - 12, 12, 282, 283, 283, 291, 291, 292, 293, 294, - 284, 294, 295, 296, 285, 296, 257, 297, 12, 298, - 289, 255, 299, 255, 12, 300, 301, 255, 293, 294, + 12, 266, 12, 12, 12, 12, 267, 268, 262, 268, + 12, 12, 12, 269, 12, 12, 270, 271, 263, 271, + 272, 273, 264, 273, 274, 275, 265, 275, 12, 276, + 277, 266, 277, 12, 12, 278, 12, 267, 268, 268, + 279, 279, 12, 250, 12, 280, 281, 269, 281, 12, + 282, 270, 271, 271, 283, 283, 272, 273, 273, 284, + 284, 274, 275, 275, 285, 285, 12, 276, 277, 277, + 286, 286, 12, 12, 287, 250, 288, 12, 12, 280, + 281, 281, 289, 289, 290, 291, 292, 282, 292, 293, + 12, 294, 287, 250, 295, 250, 12, 296, 297, 250, - 294, 302, 302, 295, 296, 296, 303, 303, 257, 304, - 255, 305, 306, 306, 299, 255, 12, 307, 255, 307, - 307, 301, 255, 285, 304, 255, 308, 309, 305, 309, - 306, 12, 307, 255, 307, 307, 308, 309, 309, 310, - 310, 12, 307, 307, 311, 307, 307, 312, 255, 307, - 255, 312, 255, 255, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 291, 292, 292, 298, 298, 299, 250, 300, 301, 301, + 295, 250, 12, 302, 250, 302, 302, 297, 250, 299, + 250, 303, 304, 300, 304, 301, 12, 302, 250, 302, + 302, 303, 304, 304, 305, 305, 12, 302, 302, 306, + 302, 302, 307, 250, 302, 250, 307, 250, 250, 0, + 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255 + 250, 250, 250, 250, 250, 250, 250 } ; -static yyconst flex_int16_t yy_nxt[696] = +static yyconst flex_int16_t yy_nxt[690] = { 0, 6, 7, 8, 9, 6, 6, 6, 6, 10, 11, 12, 13, 14, 15, 16, 17, 17, 18, 17, 17, 17, 17, 19, 17, 20, 21, 22, 23, 24, 17, 25, 17, 17, 31, 31, 32, 31, 31, 32, 35, 33, 35, 41, 33, 28, 28, 28, 29, 34, 35, - 249, 36, 37, 42, 43, 38, 35, 48, 35, 35, - 35, 39, 28, 28, 28, 29, 34, 44, 35, 36, - 37, 40, 46, 45, 65, 49, 47, 35, 35, 50, - 52, 35, 35, 35, 54, 28, 58, 35, 55, 64, - 254, 59, 31, 31, 32, 35, 75, 66, 35, 33, + 35, 36, 37, 73, 42, 38, 35, 49, 68, 35, + 35, 39, 28, 28, 28, 29, 34, 43, 45, 36, + 37, 40, 44, 35, 46, 35, 35, 35, 51, 53, + 244, 35, 50, 35, 55, 65, 35, 47, 56, 28, + 59, 48, 31, 31, 32, 60, 35, 71, 67, 33, - 28, 28, 28, 29, 68, 35, 48, 28, 37, 60, - 60, 60, 61, 60, 35, 67, 60, 62, 35, 35, - 35, 35, 72, 71, 73, 69, 35, 35, 35, 35, - 35, 35, 253, 80, 76, 70, 28, 58, 35, 35, - 28, 82, 59, 85, 77, 78, 83, 79, 87, 74, - 76, 86, 35, 35, 35, 35, 35, 35, 35, 90, - 94, 95, 35, 35, 35, 97, 88, 35, 91, 92, - 35, 99, 100, 89, 35, 35, 93, 101, 98, 35, - 35, 102, 28, 82, 35, 35, 96, 35, 83, 109, - 112, 35, 35, 35, 76, 97, 110, 35, 104, 35, + 28, 28, 28, 29, 35, 35, 35, 28, 37, 61, + 61, 61, 62, 61, 35, 70, 61, 63, 66, 35, + 49, 35, 35, 72, 74, 35, 69, 35, 75, 35, + 35, 35, 35, 88, 35, 35, 82, 78, 35, 28, + 59, 77, 87, 35, 76, 60, 80, 79, 81, 28, + 84, 78, 35, 89, 35, 85, 35, 35, 35, 75, + 35, 92, 35, 96, 35, 35, 90, 97, 35, 35, + 93, 35, 94, 91, 99, 35, 35, 35, 249, 100, + 95, 101, 102, 104, 35, 35, 98, 103, 35, 105, + 28, 84, 111, 106, 35, 35, 85, 107, 107, 61, - 103, 105, 105, 60, 106, 105, 139, 115, 105, 108, - 111, 114, 117, 117, 60, 118, 117, 35, 35, 117, - 120, 121, 121, 60, 122, 121, 130, 251, 121, 124, - 35, 100, 125, 35, 126, 126, 60, 127, 126, 35, - 35, 126, 129, 131, 132, 35, 28, 135, 133, 28, - 137, 140, 136, 35, 147, 138, 35, 35, 148, 146, - 35, 29, 170, 35, 35, 178, 35, 249, 141, 142, - 142, 60, 143, 142, 28, 151, 142, 145, 219, 35, - 152, 28, 153, 160, 149, 28, 156, 154, 28, 158, - 35, 157, 28, 162, 159, 28, 164, 166, 163, 28, + 108, 107, 35, 248, 107, 110, 112, 114, 113, 35, + 75, 78, 99, 35, 35, 116, 117, 117, 61, 118, + 117, 134, 35, 117, 120, 121, 121, 61, 122, 121, + 35, 246, 121, 124, 125, 125, 61, 126, 125, 35, + 137, 125, 128, 135, 102, 129, 35, 130, 130, 61, + 131, 130, 136, 35, 130, 133, 28, 139, 28, 141, + 35, 144, 140, 35, 142, 35, 151, 35, 35, 28, + 153, 28, 155, 143, 244, 154, 35, 156, 145, 146, + 146, 61, 147, 146, 150, 35, 146, 149, 28, 158, + 28, 160, 28, 163, 159, 167, 161, 35, 164, 28, - 135, 165, 244, 35, 35, 136, 171, 29, 172, 167, - 28, 174, 28, 176, 187, 212, 175, 35, 177, 179, - 179, 60, 180, 179, 188, 35, 179, 182, 183, 183, - 60, 184, 183, 28, 151, 183, 186, 28, 156, 152, - 28, 162, 35, 157, 190, 35, 163, 35, 196, 35, - 28, 174, 189, 28, 200, 35, 175, 28, 202, 201, - 29, 28, 205, 203, 28, 207, 195, 206, 219, 209, - 208, 63, 214, 28, 200, 234, 220, 221, 217, 201, - 28, 205, 35, 29, 235, 234, 206, 224, 227, 227, - 60, 228, 227, 219, 35, 227, 230, 232, 242, 236, + 165, 28, 169, 28, 171, 166, 35, 170, 213, 172, + 177, 35, 28, 139, 35, 173, 35, 178, 140, 215, + 179, 28, 181, 28, 183, 174, 208, 182, 35, 184, + 185, 35, 186, 186, 61, 187, 186, 28, 153, 186, + 189, 28, 158, 154, 28, 163, 35, 159, 190, 35, + 164, 28, 169, 192, 35, 35, 191, 170, 198, 35, + 28, 181, 28, 202, 28, 204, 182, 215, 203, 207, + 205, 64, 210, 229, 197, 216, 217, 28, 202, 35, + 215, 229, 230, 203, 222, 222, 61, 223, 222, 35, + 215, 222, 225, 237, 227, 231, 28, 233, 28, 235, - 28, 207, 28, 238, 28, 240, 208, 219, 239, 219, - 241, 28, 238, 245, 35, 219, 243, 239, 219, 211, - 198, 234, 194, 231, 226, 247, 223, 246, 216, 169, - 211, 198, 194, 250, 26, 26, 26, 26, 28, 28, - 28, 30, 30, 30, 30, 35, 35, 35, 35, 56, - 192, 56, 56, 57, 57, 57, 57, 59, 169, 59, - 59, 34, 34, 34, 34, 63, 63, 116, 63, 81, - 81, 81, 81, 83, 113, 83, 83, 107, 107, 107, - 107, 119, 119, 119, 119, 123, 123, 123, 123, 128, - 128, 128, 128, 134, 134, 134, 134, 136, 84, 136, + 28, 233, 234, 238, 236, 215, 234, 240, 35, 215, + 215, 200, 229, 196, 239, 226, 221, 219, 212, 176, + 207, 200, 196, 194, 176, 241, 242, 245, 26, 26, + 26, 26, 28, 28, 28, 30, 30, 30, 30, 35, + 35, 35, 35, 57, 115, 57, 57, 58, 58, 58, + 58, 60, 86, 60, 60, 34, 34, 34, 34, 64, + 64, 35, 64, 83, 83, 83, 83, 85, 29, 85, + 85, 109, 109, 109, 109, 119, 119, 119, 119, 123, + 123, 123, 123, 127, 127, 127, 127, 132, 132, 132, + 132, 138, 138, 138, 138, 140, 54, 140, 140, 148, - 136, 144, 144, 144, 144, 150, 150, 150, 150, 152, - 35, 152, 152, 155, 155, 155, 155, 157, 29, 157, - 157, 161, 161, 161, 161, 163, 53, 163, 163, 168, - 168, 168, 168, 138, 51, 138, 138, 173, 173, 173, - 173, 175, 35, 175, 175, 181, 181, 181, 181, 185, - 185, 185, 185, 154, 29, 154, 154, 159, 255, 159, - 159, 165, 27, 165, 165, 191, 191, 191, 191, 193, - 193, 193, 193, 177, 27, 177, 177, 197, 197, 197, - 197, 199, 199, 199, 199, 201, 255, 201, 201, 204, - 204, 204, 204, 206, 255, 206, 206, 210, 210, 210, + 148, 148, 148, 152, 152, 152, 152, 154, 52, 154, + 154, 157, 157, 157, 157, 159, 35, 159, 159, 162, + 162, 162, 162, 164, 29, 164, 164, 168, 168, 168, + 168, 170, 250, 170, 170, 175, 175, 175, 175, 142, + 27, 142, 142, 180, 180, 180, 180, 182, 27, 182, + 182, 188, 188, 188, 188, 156, 250, 156, 156, 161, + 250, 161, 161, 166, 250, 166, 166, 172, 250, 172, + 172, 193, 193, 193, 193, 195, 195, 195, 195, 184, + 250, 184, 184, 199, 199, 199, 199, 201, 201, 201, + 201, 203, 250, 203, 203, 206, 206, 206, 206, 209, - 210, 213, 213, 213, 213, 215, 215, 215, 215, 218, - 218, 218, 218, 222, 222, 222, 222, 203, 255, 203, - 203, 208, 255, 208, 208, 225, 225, 225, 225, 229, - 229, 229, 229, 214, 255, 214, 214, 233, 233, 233, - 233, 237, 237, 237, 237, 239, 255, 239, 239, 241, - 255, 241, 241, 248, 248, 248, 248, 252, 252, 252, - 252, 5, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255 - + 209, 209, 209, 211, 211, 211, 211, 214, 214, 214, + 214, 218, 218, 218, 218, 205, 250, 205, 205, 220, + 220, 220, 220, 224, 224, 224, 224, 210, 250, 210, + 210, 228, 228, 228, 228, 232, 232, 232, 232, 234, + 250, 234, 234, 236, 250, 236, 236, 243, 243, 243, + 243, 247, 247, 247, 247, 5, 250, 250, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250 } ; -static yyconst flex_int16_t yy_chk[696] = +static yyconst flex_int16_t yy_chk[690] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 8, 8, 8, 13, - 7, 15, 13, 8, 11, 11, 11, 11, 11, 14, - 252, 11, 11, 14, 15, 11, 19, 19, 18, 16, - 39, 11, 12, 12, 12, 12, 12, 16, 20, 12, - 12, 12, 18, 16, 39, 20, 18, 21, 23, 21, - 23, 25, 50, 42, 25, 30, 30, 38, 25, 38, - 250, 30, 31, 31, 31, 40, 50, 40, 41, 31, + 7, 41, 13, 8, 11, 11, 11, 11, 11, 47, + 14, 11, 11, 47, 14, 11, 19, 19, 41, 15, + 16, 11, 12, 12, 12, 12, 12, 14, 16, 12, + 12, 12, 15, 18, 16, 20, 21, 23, 21, 23, + 247, 25, 20, 38, 25, 38, 45, 18, 25, 30, + 30, 18, 31, 31, 31, 30, 40, 45, 40, 31, - 34, 34, 34, 34, 42, 43, 43, 34, 34, 36, - 36, 36, 36, 36, 44, 41, 36, 36, 45, 46, - 47, 48, 47, 46, 48, 44, 49, 52, 51, 54, - 53, 55, 248, 54, 55, 45, 57, 57, 66, 64, - 60, 60, 57, 64, 52, 53, 60, 53, 66, 49, - 51, 65, 67, 65, 68, 69, 70, 71, 72, 69, - 73, 74, 73, 74, 75, 76, 67, 76, 70, 71, - 77, 78, 78, 68, 78, 79, 72, 78, 77, 80, - 85, 79, 81, 81, 88, 87, 75, 89, 81, 87, - 90, 92, 90, 109, 96, 96, 88, 96, 85, 93, + 34, 34, 34, 34, 39, 42, 46, 34, 34, 36, + 36, 36, 36, 36, 43, 43, 36, 36, 39, 44, + 44, 50, 48, 46, 48, 49, 42, 51, 49, 52, + 53, 54, 55, 66, 56, 66, 55, 56, 65, 58, + 58, 51, 65, 67, 50, 58, 54, 53, 54, 61, + 61, 52, 68, 67, 69, 61, 70, 71, 72, 70, + 73, 71, 74, 75, 77, 75, 68, 76, 82, 76, + 72, 79, 73, 69, 78, 87, 78, 81, 245, 79, + 74, 80, 80, 81, 80, 91, 77, 80, 89, 82, + 83, 83, 89, 87, 90, 94, 83, 88, 88, 88, - 80, 86, 86, 86, 86, 86, 109, 93, 86, 86, - 89, 92, 95, 95, 95, 95, 95, 98, 101, 95, - 95, 97, 97, 97, 97, 97, 101, 247, 97, 97, - 104, 99, 98, 99, 100, 100, 100, 100, 100, 102, - 113, 100, 100, 102, 103, 103, 105, 105, 104, 107, - 107, 110, 105, 111, 114, 107, 114, 110, 115, 113, - 115, 116, 133, 133, 125, 146, 146, 245, 111, 112, - 112, 112, 112, 112, 117, 117, 112, 112, 236, 130, - 117, 119, 119, 125, 116, 121, 121, 119, 123, 123, - 131, 121, 126, 126, 123, 128, 128, 130, 126, 134, + 88, 88, 95, 243, 88, 88, 90, 92, 91, 92, + 95, 98, 98, 103, 98, 94, 96, 96, 96, 96, + 96, 103, 106, 96, 96, 97, 97, 97, 97, 97, + 100, 242, 97, 97, 99, 99, 99, 99, 99, 104, + 106, 99, 99, 104, 101, 100, 101, 102, 102, 102, + 102, 102, 105, 105, 102, 102, 107, 107, 109, 109, + 111, 112, 107, 113, 109, 115, 116, 112, 116, 117, + 117, 119, 119, 111, 240, 117, 129, 119, 113, 114, + 114, 114, 114, 114, 115, 197, 114, 114, 121, 121, + 123, 123, 125, 125, 121, 129, 123, 134, 125, 127, - 134, 128, 236, 139, 141, 134, 139, 149, 141, 131, - 142, 142, 144, 144, 149, 189, 142, 189, 144, 147, - 147, 147, 147, 147, 160, 160, 147, 147, 148, 148, - 148, 148, 148, 150, 150, 148, 148, 155, 155, 150, - 161, 161, 166, 155, 167, 167, 161, 171, 172, 172, - 173, 173, 166, 179, 179, 195, 173, 181, 181, 179, - 187, 183, 183, 181, 185, 185, 171, 183, 196, 187, - 185, 190, 190, 199, 199, 220, 196, 196, 195, 199, - 204, 204, 217, 209, 220, 221, 204, 209, 212, 212, - 212, 212, 212, 235, 232, 212, 212, 217, 232, 221, + 127, 130, 130, 132, 132, 127, 135, 130, 197, 132, + 137, 137, 138, 138, 143, 134, 145, 143, 138, 228, + 145, 146, 146, 148, 148, 135, 191, 146, 191, 148, + 150, 150, 151, 151, 151, 151, 151, 152, 152, 151, + 151, 157, 157, 152, 162, 162, 173, 157, 167, 167, + 162, 168, 168, 174, 174, 178, 173, 168, 179, 179, + 180, 180, 186, 186, 188, 188, 180, 198, 186, 220, + 188, 192, 192, 216, 178, 198, 198, 201, 201, 213, + 230, 217, 216, 201, 208, 208, 208, 208, 208, 227, + 231, 208, 208, 227, 213, 217, 222, 222, 224, 224, - 224, 224, 227, 227, 229, 229, 224, 243, 227, 244, - 229, 237, 237, 242, 242, 246, 235, 237, 233, 225, - 222, 218, 215, 213, 210, 244, 197, 243, 193, 191, - 188, 178, 170, 246, 256, 256, 256, 256, 257, 257, - 257, 258, 258, 258, 258, 259, 259, 259, 259, 260, - 168, 260, 260, 261, 261, 261, 261, 262, 132, 262, - 262, 263, 263, 263, 263, 264, 264, 94, 264, 265, - 265, 265, 265, 266, 91, 266, 266, 267, 267, 267, - 267, 268, 268, 268, 268, 269, 269, 269, 269, 270, - 270, 270, 270, 271, 271, 271, 271, 272, 63, 272, + 232, 232, 222, 230, 224, 238, 232, 237, 237, 241, + 239, 218, 214, 211, 231, 209, 206, 199, 195, 193, + 190, 185, 177, 175, 136, 238, 239, 241, 251, 251, + 251, 251, 252, 252, 252, 253, 253, 253, 253, 254, + 254, 254, 254, 255, 93, 255, 255, 256, 256, 256, + 256, 257, 64, 257, 257, 258, 258, 258, 258, 259, + 259, 35, 259, 260, 260, 260, 260, 261, 28, 261, + 261, 262, 262, 262, 262, 263, 263, 263, 263, 264, + 264, 264, 264, 265, 265, 265, 265, 266, 266, 266, + 266, 267, 267, 267, 267, 268, 24, 268, 268, 269, - 272, 273, 273, 273, 273, 274, 274, 274, 274, 275, - 35, 275, 275, 276, 276, 276, 276, 277, 28, 277, - 277, 278, 278, 278, 278, 279, 24, 279, 279, 280, - 280, 280, 280, 281, 22, 281, 281, 282, 282, 282, - 282, 283, 17, 283, 283, 284, 284, 284, 284, 285, - 285, 285, 285, 286, 6, 286, 286, 287, 5, 287, - 287, 288, 4, 288, 288, 289, 289, 289, 289, 290, - 290, 290, 290, 291, 3, 291, 291, 292, 292, 292, - 292, 293, 293, 293, 293, 294, 0, 294, 294, 295, - 295, 295, 295, 296, 0, 296, 296, 297, 297, 297, + 269, 269, 269, 270, 270, 270, 270, 271, 22, 271, + 271, 272, 272, 272, 272, 273, 17, 273, 273, 274, + 274, 274, 274, 275, 6, 275, 275, 276, 276, 276, + 276, 277, 5, 277, 277, 278, 278, 278, 278, 279, + 4, 279, 279, 280, 280, 280, 280, 281, 3, 281, + 281, 282, 282, 282, 282, 283, 0, 283, 283, 284, + 0, 284, 284, 285, 0, 285, 285, 286, 0, 286, + 286, 287, 287, 287, 287, 288, 288, 288, 288, 289, + 0, 289, 289, 290, 290, 290, 290, 291, 291, 291, + 291, 292, 0, 292, 292, 293, 293, 293, 293, 294, - 297, 298, 298, 298, 298, 299, 299, 299, 299, 300, - 300, 300, 300, 301, 301, 301, 301, 302, 0, 302, - 302, 303, 0, 303, 303, 304, 304, 304, 304, 305, - 305, 305, 305, 306, 0, 306, 306, 307, 307, 307, - 307, 308, 308, 308, 308, 309, 0, 309, 309, 310, - 0, 310, 310, 311, 311, 311, 311, 312, 312, 312, - 312, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255 - + 294, 294, 294, 295, 295, 295, 295, 296, 296, 296, + 296, 297, 297, 297, 297, 298, 0, 298, 298, 299, + 299, 299, 299, 300, 300, 300, 300, 301, 0, 301, + 301, 302, 302, 302, 302, 303, 303, 303, 303, 304, + 0, 304, 304, 305, 0, 305, 305, 306, 306, 306, + 306, 307, 307, 307, 307, 250, 250, 250, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250 } ; #define YY_TRAILING_MASK 0x2000 @@ -815,7 +808,7 @@ void xlu__disk_yyset_column(int column_ /* Sets a string value, checking it hasn't been set already. */ #define SAVESTRING(what,loc,val) do{ \ - savestring(DPC, what " respecified", &DPC->disk->loc, (val)); \ + savestring(DPC, what " respecified", &DPC->disk->loc, val); \ }while(0) static void savestring(DiskParseContext *dpc, const char *what_respecified, char **update, const char *value) { @@ -885,7 +878,7 @@ static int vdev_and_devtype(DiskParseCon #define DPC ((DiskParseContext*)yyextra) -#line 889 "libxlu_disk_l.c" +#line 882 "libxlu_disk_l.c" #define INITIAL 0 #define LEXERR 1 @@ -1126,7 +1119,7 @@ YY_DECL /*----- the scanner rules which do the parsing -----*/ -#line 1130 "libxlu_disk_l.c" +#line 1123 "libxlu_disk_l.c" if ( !yyg->yy_init ) { @@ -1190,14 +1183,14 @@ yy_match: 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 >= 256 ) + if ( yy_current_state >= 251 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; *yyg->yy_state_ptr++ = yy_current_state; ++yy_cp; } - while ( yy_current_state != 255 ); + while ( yy_current_state != 250 ); yy_find_action: yy_current_state = *--yyg->yy_state_ptr; @@ -1331,22 +1324,33 @@ case 14: YY_RULE_SETUP #line 191 "libxlu_disk_l.l" { - STRIP(':'); + STRIP(':'); DPC->had_depr_prefix=1; DEPRECATE("use `script=...'"); - SAVESTRING("script", script, yytext); - } + if (DPC->disk->script) { + if (*DPC->disk->script) { + xlu__disk_err(DPC,yytext,"script respecified"); + return 0; + } + /* do not complain about overwriting empty strings */ + free(DPC->disk->script); + } + DPC->disk->script = malloc(strlen("block-") + +strlen(yytext) + 1); + strcpy(DPC->disk->script, "block-"); + strcat(DPC->disk->script, yytext); + } YY_BREAK case 15: *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ yyg->yy_c_buf_p = yy_cp = yy_bp + 8; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 197 "libxlu_disk_l.l" +#line 208 "libxlu_disk_l.l" { DPC->had_depr_prefix=1; DEPRECATE(0); } YY_BREAK case 16: YY_RULE_SETUP -#line 198 "libxlu_disk_l.l" +#line 209 "libxlu_disk_l.l" { DPC->had_depr_prefix=1; DEPRECATE(0); } YY_BREAK case 17: @@ -1354,7 +1358,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 199 "libxlu_disk_l.l" +#line 210 "libxlu_disk_l.l" { DPC->had_depr_prefix=1; DEPRECATE(0); } YY_BREAK case 18: @@ -1362,7 +1366,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 200 "libxlu_disk_l.l" +#line 211 "libxlu_disk_l.l" { DPC->had_depr_prefix=1; DEPRECATE(0); } YY_BREAK case 19: @@ -1370,7 +1374,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 201 "libxlu_disk_l.l" +#line 212 "libxlu_disk_l.l" { DPC->had_depr_prefix=1; DEPRECATE(0); } YY_BREAK case 20: @@ -1378,13 +1382,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 202 "libxlu_disk_l.l" +#line 213 "libxlu_disk_l.l" { DPC->had_depr_prefix=1; DEPRECATE(0); } YY_BREAK case 21: /* rule 21 can match eol */ YY_RULE_SETUP -#line 204 "libxlu_disk_l.l" +#line 215 "libxlu_disk_l.l" { xlu__disk_err(DPC,yytext,"unknown deprecated disk prefix"); return 0; @@ -1394,7 +1398,7 @@ YY_RULE_SETUP case 22: /* rule 22 can match eol */ YY_RULE_SETUP -#line 211 "libxlu_disk_l.l" +#line 222 "libxlu_disk_l.l" { STRIP(','); @@ -1423,7 +1427,7 @@ YY_RULE_SETUP YY_BREAK case 23: YY_RULE_SETUP -#line 237 "libxlu_disk_l.l" +#line 248 "libxlu_disk_l.l" { BEGIN(LEXERR); yymore(); @@ -1431,17 +1435,17 @@ YY_RULE_SETUP YY_BREAK case 24: YY_RULE_SETUP -#line 241 "libxlu_disk_l.l" +#line 252 "libxlu_disk_l.l" { xlu__disk_err(DPC,yytext,"bad disk syntax"); return 0; } YY_BREAK case 25: YY_RULE_SETUP -#line 244 "libxlu_disk_l.l" +#line 255 "libxlu_disk_l.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK -#line 1445 "libxlu_disk_l.c" +#line 1449 "libxlu_disk_l.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(LEXERR): yyterminate(); @@ -1705,7 +1709,7 @@ static int yy_get_next_buffer (yyscan_t 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 >= 256 ) + if ( yy_current_state >= 251 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -1729,11 +1733,11 @@ static int yy_get_next_buffer (yyscan_t 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 >= 256 ) + if ( yy_current_state >= 251 ) 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 == 255); + yy_is_jam = (yy_current_state == 250); if ( ! yy_is_jam ) *yyg->yy_state_ptr++ = yy_current_state; @@ -2533,4 +2537,4 @@ void xlu__disk_yyfree (void * ptr , yysc #define YYTABLES_NAME "yytables" -#line 244 "libxlu_disk_l.l" +#line 255 "libxlu_disk_l.l" diff -r 006588b1bbb6 -r 9357ff928a35 tools/libxl/libxlu_disk_l.h --- a/tools/libxl/libxlu_disk_l.h Thu Jul 26 17:11:07 2012 +0100 +++ b/tools/libxl/libxlu_disk_l.h Fri Jul 27 15:21:19 2012 +0100 @@ -340,7 +340,7 @@ extern int xlu__disk_yylex (yyscan_t yys #undef YY_DECL #endif -#line 244 "libxlu_disk_l.l" +#line 255 "libxlu_disk_l.l" #line 346 "libxlu_disk_l.h" #undef xlu__disk_yyIN_HEADER diff -r 006588b1bbb6 -r 9357ff928a35 tools/libxl/libxlu_disk_l.l --- a/tools/libxl/libxlu_disk_l.l Thu Jul 26 17:11:07 2012 +0100 +++ b/tools/libxl/libxlu_disk_l.l Fri Jul 27 15:21:19 2012 +0100 @@ -66,7 +66,7 @@ void xlu__disk_yyset_column(int column_ /* Sets a string value, checking it hasn't been set already. */ #define SAVESTRING(what,loc,val) do{ \ - savestring(DPC, what " respecified", &DPC->disk->loc, (val)); \ + savestring(DPC, what " respecified", &DPC->disk->loc, val); \ }while(0) static void savestring(DiskParseContext *dpc, const char *what_respecified, char **update, const char *value) { @@ -188,11 +188,22 @@ target=.* { STRIP(','); SAVESTRING("targ setformat(DPC, yytext); } -iscsi:|e?nbd:drbd:/.* { - STRIP(':'); +(iscsi|e?nbd|drbd):/.* { + STRIP(':'); DPC->had_depr_prefix=1; DEPRECATE("use `script=...'"); - SAVESTRING("script", script, yytext); - } + if (DPC->disk->script) { + if (*DPC->disk->script) { + xlu__disk_err(DPC,yytext,"script respecified"); + return 0; + } + /* do not complain about overwriting empty strings */ + free(DPC->disk->script); + } + DPC->disk->script = malloc(strlen("block-") + +strlen(yytext) + 1); + strcpy(DPC->disk->script, "block-"); + strcat(DPC->disk->script, yytext); + } tapdisk:/.* { DPC->had_depr_prefix=1; DEPRECATE(0); } tap2?:/.* { DPC->had_depr_prefix=1; DEPRECATE(0); } _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |