From c8cf1933ba04edf40181545b4c258be059d66f87 Mon Sep 17 00:00:00 2001 From: Christian Franke Date: Sun, 5 Nov 2023 15:54:23 +0100 Subject: [PATCH] Cygwin: Add /dev/disk/by-id symlinks The new directory '/dev/disk/by-id' provides symlinks for each disk and its partitions: 'BUSTYPE-[VENDOR_]PRODUCT_SERIAL[-partN]' -> '../../sdX[N]'. This is based on strings provided by STORAGE_DEVICE_DESCRIPTOR. If this information is too short, a 128-bit hash of the STORAGE_DEVICE_UNIQUE_IDENTIFIER raw data is added. Administrator privileges are not required. Signed-off-by: Christian Franke --- winsup/cygwin/Makefile.am | 1 + winsup/cygwin/devices.cc | 1433 ++++++++++++----------- winsup/cygwin/devices.in | 4 + winsup/cygwin/dtable.cc | 3 + winsup/cygwin/fhandler/dev_disk.cc | 621 ++++++++++ winsup/cygwin/local_includes/devices.h | 6 +- winsup/cygwin/local_includes/fhandler.h | 47 + winsup/cygwin/mount.cc | 10 + 8 files changed, 1417 insertions(+), 708 deletions(-) create mode 100644 winsup/cygwin/fhandler/dev_disk.cc diff --git a/winsup/cygwin/Makefile.am b/winsup/cygwin/Makefile.am index 64b252a22..376c79fc3 100644 --- a/winsup/cygwin/Makefile.am +++ b/winsup/cygwin/Makefile.am @@ -84,6 +84,7 @@ FHANDLER_FILES= \ fhandler/console.cc \ fhandler/cygdrive.cc \ fhandler/dev.cc \ + fhandler/dev_disk.cc \ fhandler/dev_fd.cc \ fhandler/disk_file.cc \ fhandler/dsp.cc \ diff --git a/winsup/cygwin/devices.cc b/winsup/cygwin/devices.cc index acdc54412..167b0e4b4 100644 --- a/winsup/cygwin/devices.cc +++ b/winsup/cygwin/devices.cc @@ -119,6 +119,9 @@ const _device dev_cygdrive_storage = const _device dev_fs_storage = {"", {FH_FS}, "", exists}; +const _device dev_dev_disk_storage = + {"", {FH_DEV_DISK}, "", exists}; + const _device dev_proc_storage = {"", {FH_PROC}, "", exists}; @@ -322,6 +325,7 @@ const _RDATA _device dev_storage[] = {"/dev/cons126", BRACK(FHDEV(DEV_CONS_MAJOR, 126)), "/dev/cons126", exists_console, S_IFCHR, true}, {"/dev/cons127", BRACK(FHDEV(DEV_CONS_MAJOR, 127)), "/dev/cons127", exists_console, S_IFCHR, true}, {"/dev/console", BRACK(FH_CONSOLE), "/dev/console", exists_console, S_IFCHR, true}, + {"/dev/disk", BRACK(FH_DEV_DISK), "", exists, S_IFDIR, true}, {"/dev/dsp", BRACK(FH_OSS_DSP), "\\Device\\Null", exists_ntdev, S_IFCHR, true}, {"/dev/fd", BRACK(FH_DEV_FD), "/proc/self/fd", exists, S_IFLNK, true}, {"/dev/fd0", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 0)), "\\Device\\Floppy0", exists_ntdev, S_IFBLK, true}, @@ -1030,9 +1034,9 @@ const _RDATA _device dev_storage[] = const _device *cons_dev = dev_storage + 20; const _device *console_dev = dev_storage + 148; -const _device *ptym_dev = dev_storage + 725; -const _device *ptys_dev = dev_storage + 299; -const _device *urandom_dev = dev_storage + 720; +const _device *ptym_dev = dev_storage + 726; +const _device *ptys_dev = dev_storage + 300; +const _device *urandom_dev = dev_storage + 721; static KR_device_t KR_find_keyword (const char *KR_keyword, int KR_length) @@ -1062,7 +1066,7 @@ return NULL; if (strncmp (KR_keyword, ":pipe", 5) == 0) { { -return dev_storage + 724; +return dev_storage + 725; } } @@ -1077,7 +1081,7 @@ return NULL; if (strncmp (KR_keyword, ":fifo", 5) == 0) { { -return dev_storage + 723; +return dev_storage + 724; } } @@ -1101,7 +1105,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym9", 6) == 0) { { -return dev_storage + 734; +return dev_storage + 735; } } @@ -1116,7 +1120,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym8", 6) == 0) { { -return dev_storage + 733; +return dev_storage + 734; } } @@ -1131,7 +1135,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym7", 6) == 0) { { -return dev_storage + 732; +return dev_storage + 733; } } @@ -1146,7 +1150,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym6", 6) == 0) { { -return dev_storage + 731; +return dev_storage + 732; } } @@ -1161,7 +1165,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym5", 6) == 0) { { -return dev_storage + 730; +return dev_storage + 731; } } @@ -1176,7 +1180,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym4", 6) == 0) { { -return dev_storage + 729; +return dev_storage + 730; } } @@ -1191,7 +1195,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym3", 6) == 0) { { -return dev_storage + 728; +return dev_storage + 729; } } @@ -1206,7 +1210,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym2", 6) == 0) { { -return dev_storage + 727; +return dev_storage + 728; } } @@ -1221,7 +1225,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym1", 6) == 0) { { -return dev_storage + 726; +return dev_storage + 727; } } @@ -1236,7 +1240,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym0", 6) == 0) { { -return dev_storage + 725; +return dev_storage + 726; } } @@ -1260,7 +1264,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd", 7) == 0) { { -return dev_storage + 150; +return dev_storage + 151; } } @@ -1278,7 +1282,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym99", 7) == 0) { { -return dev_storage + 824; +return dev_storage + 825; } } @@ -1293,7 +1297,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym98", 7) == 0) { { -return dev_storage + 823; +return dev_storage + 824; } } @@ -1308,7 +1312,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym97", 7) == 0) { { -return dev_storage + 822; +return dev_storage + 823; } } @@ -1323,7 +1327,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym96", 7) == 0) { { -return dev_storage + 821; +return dev_storage + 822; } } @@ -1338,7 +1342,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym95", 7) == 0) { { -return dev_storage + 820; +return dev_storage + 821; } } @@ -1353,7 +1357,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym94", 7) == 0) { { -return dev_storage + 819; +return dev_storage + 820; } } @@ -1368,7 +1372,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym93", 7) == 0) { { -return dev_storage + 818; +return dev_storage + 819; } } @@ -1383,7 +1387,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym92", 7) == 0) { { -return dev_storage + 817; +return dev_storage + 818; } } @@ -1398,7 +1402,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym91", 7) == 0) { { -return dev_storage + 816; +return dev_storage + 817; } } @@ -1413,7 +1417,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym90", 7) == 0) { { -return dev_storage + 815; +return dev_storage + 816; } } @@ -1437,7 +1441,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym89", 7) == 0) { { -return dev_storage + 814; +return dev_storage + 815; } } @@ -1452,7 +1456,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym88", 7) == 0) { { -return dev_storage + 813; +return dev_storage + 814; } } @@ -1467,7 +1471,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym87", 7) == 0) { { -return dev_storage + 812; +return dev_storage + 813; } } @@ -1482,7 +1486,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym86", 7) == 0) { { -return dev_storage + 811; +return dev_storage + 812; } } @@ -1497,7 +1501,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym85", 7) == 0) { { -return dev_storage + 810; +return dev_storage + 811; } } @@ -1512,7 +1516,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym84", 7) == 0) { { -return dev_storage + 809; +return dev_storage + 810; } } @@ -1527,7 +1531,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym83", 7) == 0) { { -return dev_storage + 808; +return dev_storage + 809; } } @@ -1542,7 +1546,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym82", 7) == 0) { { -return dev_storage + 807; +return dev_storage + 808; } } @@ -1557,7 +1561,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym81", 7) == 0) { { -return dev_storage + 806; +return dev_storage + 807; } } @@ -1572,7 +1576,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym80", 7) == 0) { { -return dev_storage + 805; +return dev_storage + 806; } } @@ -1596,7 +1600,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym79", 7) == 0) { { -return dev_storage + 804; +return dev_storage + 805; } } @@ -1611,7 +1615,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym78", 7) == 0) { { -return dev_storage + 803; +return dev_storage + 804; } } @@ -1626,7 +1630,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym77", 7) == 0) { { -return dev_storage + 802; +return dev_storage + 803; } } @@ -1641,7 +1645,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym76", 7) == 0) { { -return dev_storage + 801; +return dev_storage + 802; } } @@ -1656,7 +1660,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym75", 7) == 0) { { -return dev_storage + 800; +return dev_storage + 801; } } @@ -1671,7 +1675,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym74", 7) == 0) { { -return dev_storage + 799; +return dev_storage + 800; } } @@ -1686,7 +1690,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym73", 7) == 0) { { -return dev_storage + 798; +return dev_storage + 799; } } @@ -1701,7 +1705,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym72", 7) == 0) { { -return dev_storage + 797; +return dev_storage + 798; } } @@ -1716,7 +1720,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym71", 7) == 0) { { -return dev_storage + 796; +return dev_storage + 797; } } @@ -1731,7 +1735,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym70", 7) == 0) { { -return dev_storage + 795; +return dev_storage + 796; } } @@ -1755,7 +1759,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym69", 7) == 0) { { -return dev_storage + 794; +return dev_storage + 795; } } @@ -1770,7 +1774,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym68", 7) == 0) { { -return dev_storage + 793; +return dev_storage + 794; } } @@ -1785,7 +1789,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym67", 7) == 0) { { -return dev_storage + 792; +return dev_storage + 793; } } @@ -1800,7 +1804,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym66", 7) == 0) { { -return dev_storage + 791; +return dev_storage + 792; } } @@ -1815,7 +1819,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym65", 7) == 0) { { -return dev_storage + 790; +return dev_storage + 791; } } @@ -1830,7 +1834,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym64", 7) == 0) { { -return dev_storage + 789; +return dev_storage + 790; } } @@ -1845,7 +1849,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym63", 7) == 0) { { -return dev_storage + 788; +return dev_storage + 789; } } @@ -1860,7 +1864,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym62", 7) == 0) { { -return dev_storage + 787; +return dev_storage + 788; } } @@ -1875,7 +1879,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym61", 7) == 0) { { -return dev_storage + 786; +return dev_storage + 787; } } @@ -1890,7 +1894,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym60", 7) == 0) { { -return dev_storage + 785; +return dev_storage + 786; } } @@ -1914,7 +1918,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym59", 7) == 0) { { -return dev_storage + 784; +return dev_storage + 785; } } @@ -1929,7 +1933,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym58", 7) == 0) { { -return dev_storage + 783; +return dev_storage + 784; } } @@ -1944,7 +1948,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym57", 7) == 0) { { -return dev_storage + 782; +return dev_storage + 783; } } @@ -1959,7 +1963,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym56", 7) == 0) { { -return dev_storage + 781; +return dev_storage + 782; } } @@ -1974,7 +1978,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym55", 7) == 0) { { -return dev_storage + 780; +return dev_storage + 781; } } @@ -1989,7 +1993,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym54", 7) == 0) { { -return dev_storage + 779; +return dev_storage + 780; } } @@ -2004,7 +2008,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym53", 7) == 0) { { -return dev_storage + 778; +return dev_storage + 779; } } @@ -2019,7 +2023,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym52", 7) == 0) { { -return dev_storage + 777; +return dev_storage + 778; } } @@ -2034,7 +2038,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym51", 7) == 0) { { -return dev_storage + 776; +return dev_storage + 777; } } @@ -2049,7 +2053,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym50", 7) == 0) { { -return dev_storage + 775; +return dev_storage + 776; } } @@ -2073,7 +2077,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym49", 7) == 0) { { -return dev_storage + 774; +return dev_storage + 775; } } @@ -2088,7 +2092,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym48", 7) == 0) { { -return dev_storage + 773; +return dev_storage + 774; } } @@ -2103,7 +2107,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym47", 7) == 0) { { -return dev_storage + 772; +return dev_storage + 773; } } @@ -2118,7 +2122,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym46", 7) == 0) { { -return dev_storage + 771; +return dev_storage + 772; } } @@ -2133,7 +2137,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym45", 7) == 0) { { -return dev_storage + 770; +return dev_storage + 771; } } @@ -2148,7 +2152,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym44", 7) == 0) { { -return dev_storage + 769; +return dev_storage + 770; } } @@ -2163,7 +2167,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym43", 7) == 0) { { -return dev_storage + 768; +return dev_storage + 769; } } @@ -2178,7 +2182,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym42", 7) == 0) { { -return dev_storage + 767; +return dev_storage + 768; } } @@ -2193,7 +2197,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym41", 7) == 0) { { -return dev_storage + 766; +return dev_storage + 767; } } @@ -2208,7 +2212,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym40", 7) == 0) { { -return dev_storage + 765; +return dev_storage + 766; } } @@ -2232,7 +2236,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym39", 7) == 0) { { -return dev_storage + 764; +return dev_storage + 765; } } @@ -2247,7 +2251,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym38", 7) == 0) { { -return dev_storage + 763; +return dev_storage + 764; } } @@ -2262,7 +2266,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym37", 7) == 0) { { -return dev_storage + 762; +return dev_storage + 763; } } @@ -2277,7 +2281,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym36", 7) == 0) { { -return dev_storage + 761; +return dev_storage + 762; } } @@ -2292,7 +2296,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym35", 7) == 0) { { -return dev_storage + 760; +return dev_storage + 761; } } @@ -2307,7 +2311,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym34", 7) == 0) { { -return dev_storage + 759; +return dev_storage + 760; } } @@ -2322,7 +2326,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym33", 7) == 0) { { -return dev_storage + 758; +return dev_storage + 759; } } @@ -2337,7 +2341,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym32", 7) == 0) { { -return dev_storage + 757; +return dev_storage + 758; } } @@ -2352,7 +2356,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym31", 7) == 0) { { -return dev_storage + 756; +return dev_storage + 757; } } @@ -2367,7 +2371,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym30", 7) == 0) { { -return dev_storage + 755; +return dev_storage + 756; } } @@ -2391,7 +2395,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym29", 7) == 0) { { -return dev_storage + 754; +return dev_storage + 755; } } @@ -2406,7 +2410,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym28", 7) == 0) { { -return dev_storage + 753; +return dev_storage + 754; } } @@ -2421,7 +2425,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym27", 7) == 0) { { -return dev_storage + 752; +return dev_storage + 753; } } @@ -2436,7 +2440,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym26", 7) == 0) { { -return dev_storage + 751; +return dev_storage + 752; } } @@ -2451,7 +2455,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym25", 7) == 0) { { -return dev_storage + 750; +return dev_storage + 751; } } @@ -2466,7 +2470,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym24", 7) == 0) { { -return dev_storage + 749; +return dev_storage + 750; } } @@ -2481,7 +2485,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym23", 7) == 0) { { -return dev_storage + 748; +return dev_storage + 749; } } @@ -2496,7 +2500,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym22", 7) == 0) { { -return dev_storage + 747; +return dev_storage + 748; } } @@ -2511,7 +2515,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym21", 7) == 0) { { -return dev_storage + 746; +return dev_storage + 747; } } @@ -2526,7 +2530,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym20", 7) == 0) { { -return dev_storage + 745; +return dev_storage + 746; } } @@ -2550,7 +2554,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym19", 7) == 0) { { -return dev_storage + 744; +return dev_storage + 745; } } @@ -2565,7 +2569,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym18", 7) == 0) { { -return dev_storage + 743; +return dev_storage + 744; } } @@ -2580,7 +2584,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym17", 7) == 0) { { -return dev_storage + 742; +return dev_storage + 743; } } @@ -2595,7 +2599,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym16", 7) == 0) { { -return dev_storage + 741; +return dev_storage + 742; } } @@ -2610,7 +2614,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym15", 7) == 0) { { -return dev_storage + 740; +return dev_storage + 741; } } @@ -2625,7 +2629,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym14", 7) == 0) { { -return dev_storage + 739; +return dev_storage + 740; } } @@ -2640,7 +2644,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym13", 7) == 0) { { -return dev_storage + 738; +return dev_storage + 739; } } @@ -2655,7 +2659,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym12", 7) == 0) { { -return dev_storage + 737; +return dev_storage + 738; } } @@ -2670,7 +2674,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym11", 7) == 0) { { -return dev_storage + 736; +return dev_storage + 737; } } @@ -2685,7 +2689,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym10", 7) == 0) { { -return dev_storage + 735; +return dev_storage + 736; } } @@ -2715,7 +2719,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/tty", 8) == 0) { { -return dev_storage + 591; +return dev_storage + 592; } } @@ -2730,7 +2734,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/dsp", 8) == 0) { { -return dev_storage + 149; +return dev_storage + 150; } } @@ -2748,7 +2752,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st9", 8) == 0) { { -return dev_storage + 469; +return dev_storage + 470; } } @@ -2763,7 +2767,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr9", 8) == 0) { { -return dev_storage + 453; +return dev_storage + 454; } } @@ -2778,7 +2782,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd9", 8) == 0) { { -return dev_storage + 160; +return dev_storage + 161; } } @@ -2793,7 +2797,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym119", 8) == 0) { { -return dev_storage + 844; +return dev_storage + 845; } } @@ -2808,7 +2812,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym109", 8) == 0) { { -return dev_storage + 834; +return dev_storage + 835; } } @@ -2832,7 +2836,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st8", 8) == 0) { { -return dev_storage + 468; +return dev_storage + 469; } } @@ -2847,7 +2851,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr8", 8) == 0) { { -return dev_storage + 452; +return dev_storage + 453; } } @@ -2862,7 +2866,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd8", 8) == 0) { { -return dev_storage + 159; +return dev_storage + 160; } } @@ -2877,7 +2881,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym118", 8) == 0) { { -return dev_storage + 843; +return dev_storage + 844; } } @@ -2892,7 +2896,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym108", 8) == 0) { { -return dev_storage + 833; +return dev_storage + 834; } } @@ -2916,7 +2920,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st7", 8) == 0) { { -return dev_storage + 467; +return dev_storage + 468; } } @@ -2931,7 +2935,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr7", 8) == 0) { { -return dev_storage + 451; +return dev_storage + 452; } } @@ -2946,7 +2950,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd7", 8) == 0) { { -return dev_storage + 158; +return dev_storage + 159; } } @@ -2961,7 +2965,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym127", 8) == 0) { { -return dev_storage + 852; +return dev_storage + 853; } } @@ -2976,7 +2980,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym117", 8) == 0) { { -return dev_storage + 842; +return dev_storage + 843; } } @@ -2991,7 +2995,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym107", 8) == 0) { { -return dev_storage + 832; +return dev_storage + 833; } } @@ -3015,7 +3019,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st6", 8) == 0) { { -return dev_storage + 466; +return dev_storage + 467; } } @@ -3030,7 +3034,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr6", 8) == 0) { { -return dev_storage + 450; +return dev_storage + 451; } } @@ -3045,7 +3049,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd6", 8) == 0) { { -return dev_storage + 157; +return dev_storage + 158; } } @@ -3060,7 +3064,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym126", 8) == 0) { { -return dev_storage + 851; +return dev_storage + 852; } } @@ -3075,7 +3079,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym116", 8) == 0) { { -return dev_storage + 841; +return dev_storage + 842; } } @@ -3090,7 +3094,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym106", 8) == 0) { { -return dev_storage + 831; +return dev_storage + 832; } } @@ -3114,7 +3118,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st5", 8) == 0) { { -return dev_storage + 465; +return dev_storage + 466; } } @@ -3129,7 +3133,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr5", 8) == 0) { { -return dev_storage + 449; +return dev_storage + 450; } } @@ -3144,7 +3148,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd5", 8) == 0) { { -return dev_storage + 156; +return dev_storage + 157; } } @@ -3159,7 +3163,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym125", 8) == 0) { { -return dev_storage + 850; +return dev_storage + 851; } } @@ -3174,7 +3178,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym115", 8) == 0) { { -return dev_storage + 840; +return dev_storage + 841; } } @@ -3189,7 +3193,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym105", 8) == 0) { { -return dev_storage + 830; +return dev_storage + 831; } } @@ -3213,7 +3217,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st4", 8) == 0) { { -return dev_storage + 464; +return dev_storage + 465; } } @@ -3228,7 +3232,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr4", 8) == 0) { { -return dev_storage + 448; +return dev_storage + 449; } } @@ -3243,7 +3247,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd4", 8) == 0) { { -return dev_storage + 155; +return dev_storage + 156; } } @@ -3258,7 +3262,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym124", 8) == 0) { { -return dev_storage + 849; +return dev_storage + 850; } } @@ -3273,7 +3277,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym114", 8) == 0) { { -return dev_storage + 839; +return dev_storage + 840; } } @@ -3288,7 +3292,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym104", 8) == 0) { { -return dev_storage + 829; +return dev_storage + 830; } } @@ -3312,7 +3316,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st3", 8) == 0) { { -return dev_storage + 463; +return dev_storage + 464; } } @@ -3327,7 +3331,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr3", 8) == 0) { { -return dev_storage + 447; +return dev_storage + 448; } } @@ -3342,7 +3346,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd3", 8) == 0) { { -return dev_storage + 154; +return dev_storage + 155; } } @@ -3357,7 +3361,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym123", 8) == 0) { { -return dev_storage + 848; +return dev_storage + 849; } } @@ -3372,7 +3376,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym113", 8) == 0) { { -return dev_storage + 838; +return dev_storage + 839; } } @@ -3387,7 +3391,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym103", 8) == 0) { { -return dev_storage + 828; +return dev_storage + 829; } } @@ -3411,7 +3415,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st2", 8) == 0) { { -return dev_storage + 462; +return dev_storage + 463; } } @@ -3426,7 +3430,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr2", 8) == 0) { { -return dev_storage + 446; +return dev_storage + 447; } } @@ -3441,7 +3445,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd2", 8) == 0) { { -return dev_storage + 153; +return dev_storage + 154; } } @@ -3456,7 +3460,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym122", 8) == 0) { { -return dev_storage + 847; +return dev_storage + 848; } } @@ -3471,7 +3475,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym112", 8) == 0) { { -return dev_storage + 837; +return dev_storage + 838; } } @@ -3486,7 +3490,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym102", 8) == 0) { { -return dev_storage + 827; +return dev_storage + 828; } } @@ -3510,7 +3514,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st1", 8) == 0) { { -return dev_storage + 461; +return dev_storage + 462; } } @@ -3525,7 +3529,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr1", 8) == 0) { { -return dev_storage + 445; +return dev_storage + 446; } } @@ -3540,7 +3544,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd1", 8) == 0) { { -return dev_storage + 152; +return dev_storage + 153; } } @@ -3555,7 +3559,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym121", 8) == 0) { { -return dev_storage + 846; +return dev_storage + 847; } } @@ -3570,7 +3574,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym111", 8) == 0) { { -return dev_storage + 836; +return dev_storage + 837; } } @@ -3585,7 +3589,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym101", 8) == 0) { { -return dev_storage + 826; +return dev_storage + 827; } } @@ -3609,7 +3613,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st0", 8) == 0) { { -return dev_storage + 460; +return dev_storage + 461; } } @@ -3624,7 +3628,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr0", 8) == 0) { { -return dev_storage + 444; +return dev_storage + 445; } } @@ -3639,7 +3643,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd0", 8) == 0) { { -return dev_storage + 151; +return dev_storage + 152; } } @@ -3654,7 +3658,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym120", 8) == 0) { { -return dev_storage + 845; +return dev_storage + 846; } } @@ -3669,7 +3673,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym110", 8) == 0) { { -return dev_storage + 835; +return dev_storage + 836; } } @@ -3684,7 +3688,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym100", 8) == 0) { { -return dev_storage + 825; +return dev_storage + 826; } } @@ -3714,7 +3718,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ptmx", 9) == 0) { { -return dev_storage + 298; +return dev_storage + 299; } } @@ -3729,7 +3733,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/zero", 9) == 0) { { -return dev_storage + 722; +return dev_storage + 723; } } @@ -3747,7 +3751,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/null", 9) == 0) { { -return dev_storage + 297; +return dev_storage + 298; } } @@ -3762,7 +3766,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/full", 9) == 0) { { -return dev_storage + 167; +return dev_storage + 168; } } @@ -3777,6 +3781,21 @@ return NULL; { return NULL; +} + } + case 'k': + if (strncmp (KR_keyword, "/dev/disk", 9) == 0) + { +{ +return dev_storage + 149; + +} + } + else + { +{ +return NULL; + } } case '9': @@ -3786,7 +3805,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty9", 9) == 0) { { -return dev_storage + 308; +return dev_storage + 309; } } @@ -3801,7 +3820,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst9", 9) == 0) { { -return dev_storage + 178; +return dev_storage + 179; } } @@ -3831,7 +3850,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd9", 9) == 0) { { -return dev_storage + 437; +return dev_storage + 438; } } @@ -3846,7 +3865,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st99", 9) == 0) { { -return dev_storage + 559; +return dev_storage + 560; } } @@ -3861,7 +3880,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st89", 9) == 0) { { -return dev_storage + 549; +return dev_storage + 550; } } @@ -3876,7 +3895,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st79", 9) == 0) { { -return dev_storage + 539; +return dev_storage + 540; } } @@ -3891,7 +3910,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st69", 9) == 0) { { -return dev_storage + 529; +return dev_storage + 530; } } @@ -3906,7 +3925,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st59", 9) == 0) { { -return dev_storage + 519; +return dev_storage + 520; } } @@ -3921,7 +3940,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st49", 9) == 0) { { -return dev_storage + 509; +return dev_storage + 510; } } @@ -3936,7 +3955,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st39", 9) == 0) { { -return dev_storage + 499; +return dev_storage + 500; } } @@ -3951,7 +3970,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st29", 9) == 0) { { -return dev_storage + 489; +return dev_storage + 490; } } @@ -3966,7 +3985,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st19", 9) == 0) { { -return dev_storage + 479; +return dev_storage + 480; } } @@ -3990,7 +4009,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty8", 9) == 0) { { -return dev_storage + 307; +return dev_storage + 308; } } @@ -4005,7 +4024,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst8", 9) == 0) { { -return dev_storage + 177; +return dev_storage + 178; } } @@ -4035,7 +4054,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd8", 9) == 0) { { -return dev_storage + 436; +return dev_storage + 437; } } @@ -4050,7 +4069,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st98", 9) == 0) { { -return dev_storage + 558; +return dev_storage + 559; } } @@ -4065,7 +4084,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st88", 9) == 0) { { -return dev_storage + 548; +return dev_storage + 549; } } @@ -4080,7 +4099,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st78", 9) == 0) { { -return dev_storage + 538; +return dev_storage + 539; } } @@ -4095,7 +4114,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st68", 9) == 0) { { -return dev_storage + 528; +return dev_storage + 529; } } @@ -4110,7 +4129,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st58", 9) == 0) { { -return dev_storage + 518; +return dev_storage + 519; } } @@ -4125,7 +4144,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st48", 9) == 0) { { -return dev_storage + 508; +return dev_storage + 509; } } @@ -4140,7 +4159,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st38", 9) == 0) { { -return dev_storage + 498; +return dev_storage + 499; } } @@ -4155,7 +4174,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st28", 9) == 0) { { -return dev_storage + 488; +return dev_storage + 489; } } @@ -4170,7 +4189,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st18", 9) == 0) { { -return dev_storage + 478; +return dev_storage + 479; } } @@ -4194,7 +4213,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty7", 9) == 0) { { -return dev_storage + 306; +return dev_storage + 307; } } @@ -4209,7 +4228,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst7", 9) == 0) { { -return dev_storage + 176; +return dev_storage + 177; } } @@ -4239,7 +4258,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd7", 9) == 0) { { -return dev_storage + 435; +return dev_storage + 436; } } @@ -4254,7 +4273,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st97", 9) == 0) { { -return dev_storage + 557; +return dev_storage + 558; } } @@ -4269,7 +4288,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st87", 9) == 0) { { -return dev_storage + 547; +return dev_storage + 548; } } @@ -4284,7 +4303,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st77", 9) == 0) { { -return dev_storage + 537; +return dev_storage + 538; } } @@ -4299,7 +4318,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st67", 9) == 0) { { -return dev_storage + 527; +return dev_storage + 528; } } @@ -4314,7 +4333,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st57", 9) == 0) { { -return dev_storage + 517; +return dev_storage + 518; } } @@ -4329,7 +4348,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st47", 9) == 0) { { -return dev_storage + 507; +return dev_storage + 508; } } @@ -4344,7 +4363,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st37", 9) == 0) { { -return dev_storage + 497; +return dev_storage + 498; } } @@ -4359,7 +4378,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st27", 9) == 0) { { -return dev_storage + 487; +return dev_storage + 488; } } @@ -4374,7 +4393,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st17", 9) == 0) { { -return dev_storage + 477; +return dev_storage + 478; } } @@ -4398,7 +4417,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty6", 9) == 0) { { -return dev_storage + 305; +return dev_storage + 306; } } @@ -4413,7 +4432,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst6", 9) == 0) { { -return dev_storage + 175; +return dev_storage + 176; } } @@ -4443,7 +4462,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd6", 9) == 0) { { -return dev_storage + 434; +return dev_storage + 435; } } @@ -4458,7 +4477,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st96", 9) == 0) { { -return dev_storage + 556; +return dev_storage + 557; } } @@ -4473,7 +4492,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st86", 9) == 0) { { -return dev_storage + 546; +return dev_storage + 547; } } @@ -4488,7 +4507,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st76", 9) == 0) { { -return dev_storage + 536; +return dev_storage + 537; } } @@ -4503,7 +4522,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st66", 9) == 0) { { -return dev_storage + 526; +return dev_storage + 527; } } @@ -4518,7 +4537,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st56", 9) == 0) { { -return dev_storage + 516; +return dev_storage + 517; } } @@ -4533,7 +4552,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st46", 9) == 0) { { -return dev_storage + 506; +return dev_storage + 507; } } @@ -4548,7 +4567,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st36", 9) == 0) { { -return dev_storage + 496; +return dev_storage + 497; } } @@ -4563,7 +4582,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st26", 9) == 0) { { -return dev_storage + 486; +return dev_storage + 487; } } @@ -4578,7 +4597,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st16", 9) == 0) { { -return dev_storage + 476; +return dev_storage + 477; } } @@ -4602,7 +4621,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty5", 9) == 0) { { -return dev_storage + 304; +return dev_storage + 305; } } @@ -4617,7 +4636,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst5", 9) == 0) { { -return dev_storage + 174; +return dev_storage + 175; } } @@ -4647,7 +4666,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd5", 9) == 0) { { -return dev_storage + 433; +return dev_storage + 434; } } @@ -4662,7 +4681,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st95", 9) == 0) { { -return dev_storage + 555; +return dev_storage + 556; } } @@ -4677,7 +4696,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st85", 9) == 0) { { -return dev_storage + 545; +return dev_storage + 546; } } @@ -4692,7 +4711,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st75", 9) == 0) { { -return dev_storage + 535; +return dev_storage + 536; } } @@ -4707,7 +4726,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st65", 9) == 0) { { -return dev_storage + 525; +return dev_storage + 526; } } @@ -4722,7 +4741,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st55", 9) == 0) { { -return dev_storage + 515; +return dev_storage + 516; } } @@ -4737,7 +4756,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st45", 9) == 0) { { -return dev_storage + 505; +return dev_storage + 506; } } @@ -4752,7 +4771,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st35", 9) == 0) { { -return dev_storage + 495; +return dev_storage + 496; } } @@ -4767,7 +4786,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st25", 9) == 0) { { -return dev_storage + 485; +return dev_storage + 486; } } @@ -4785,7 +4804,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st15", 9) == 0) { { -return dev_storage + 475; +return dev_storage + 476; } } @@ -4800,7 +4819,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr15", 9) == 0) { { -return dev_storage + 459; +return dev_storage + 460; } } @@ -4815,7 +4834,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd15", 9) == 0) { { -return dev_storage + 166; +return dev_storage + 167; } } @@ -4845,7 +4864,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty4", 9) == 0) { { -return dev_storage + 303; +return dev_storage + 304; } } @@ -4860,7 +4879,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst4", 9) == 0) { { -return dev_storage + 173; +return dev_storage + 174; } } @@ -4890,7 +4909,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd4", 9) == 0) { { -return dev_storage + 432; +return dev_storage + 433; } } @@ -4905,7 +4924,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st94", 9) == 0) { { -return dev_storage + 554; +return dev_storage + 555; } } @@ -4920,7 +4939,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st84", 9) == 0) { { -return dev_storage + 544; +return dev_storage + 545; } } @@ -4935,7 +4954,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st74", 9) == 0) { { -return dev_storage + 534; +return dev_storage + 535; } } @@ -4950,7 +4969,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st64", 9) == 0) { { -return dev_storage + 524; +return dev_storage + 525; } } @@ -4965,7 +4984,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st54", 9) == 0) { { -return dev_storage + 514; +return dev_storage + 515; } } @@ -4980,7 +4999,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st44", 9) == 0) { { -return dev_storage + 504; +return dev_storage + 505; } } @@ -4995,7 +5014,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st34", 9) == 0) { { -return dev_storage + 494; +return dev_storage + 495; } } @@ -5010,7 +5029,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st24", 9) == 0) { { -return dev_storage + 484; +return dev_storage + 485; } } @@ -5028,7 +5047,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st14", 9) == 0) { { -return dev_storage + 474; +return dev_storage + 475; } } @@ -5043,7 +5062,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr14", 9) == 0) { { -return dev_storage + 458; +return dev_storage + 459; } } @@ -5058,7 +5077,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd14", 9) == 0) { { -return dev_storage + 165; +return dev_storage + 166; } } @@ -5088,7 +5107,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty3", 9) == 0) { { -return dev_storage + 302; +return dev_storage + 303; } } @@ -5103,7 +5122,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst3", 9) == 0) { { -return dev_storage + 172; +return dev_storage + 173; } } @@ -5133,7 +5152,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd3", 9) == 0) { { -return dev_storage + 431; +return dev_storage + 432; } } @@ -5148,7 +5167,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st93", 9) == 0) { { -return dev_storage + 553; +return dev_storage + 554; } } @@ -5163,7 +5182,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st83", 9) == 0) { { -return dev_storage + 543; +return dev_storage + 544; } } @@ -5178,7 +5197,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st73", 9) == 0) { { -return dev_storage + 533; +return dev_storage + 534; } } @@ -5193,7 +5212,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st63", 9) == 0) { { -return dev_storage + 523; +return dev_storage + 524; } } @@ -5208,7 +5227,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st53", 9) == 0) { { -return dev_storage + 513; +return dev_storage + 514; } } @@ -5223,7 +5242,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st43", 9) == 0) { { -return dev_storage + 503; +return dev_storage + 504; } } @@ -5238,7 +5257,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st33", 9) == 0) { { -return dev_storage + 493; +return dev_storage + 494; } } @@ -5253,7 +5272,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st23", 9) == 0) { { -return dev_storage + 483; +return dev_storage + 484; } } @@ -5271,7 +5290,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st13", 9) == 0) { { -return dev_storage + 473; +return dev_storage + 474; } } @@ -5286,7 +5305,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr13", 9) == 0) { { -return dev_storage + 457; +return dev_storage + 458; } } @@ -5301,7 +5320,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd13", 9) == 0) { { -return dev_storage + 164; +return dev_storage + 165; } } @@ -5331,7 +5350,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty2", 9) == 0) { { -return dev_storage + 301; +return dev_storage + 302; } } @@ -5346,7 +5365,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst2", 9) == 0) { { -return dev_storage + 171; +return dev_storage + 172; } } @@ -5376,7 +5395,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd2", 9) == 0) { { -return dev_storage + 430; +return dev_storage + 431; } } @@ -5391,7 +5410,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st92", 9) == 0) { { -return dev_storage + 552; +return dev_storage + 553; } } @@ -5406,7 +5425,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st82", 9) == 0) { { -return dev_storage + 542; +return dev_storage + 543; } } @@ -5421,7 +5440,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st72", 9) == 0) { { -return dev_storage + 532; +return dev_storage + 533; } } @@ -5436,7 +5455,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st62", 9) == 0) { { -return dev_storage + 522; +return dev_storage + 523; } } @@ -5451,7 +5470,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st52", 9) == 0) { { -return dev_storage + 512; +return dev_storage + 513; } } @@ -5466,7 +5485,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st42", 9) == 0) { { -return dev_storage + 502; +return dev_storage + 503; } } @@ -5481,7 +5500,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st32", 9) == 0) { { -return dev_storage + 492; +return dev_storage + 493; } } @@ -5496,7 +5515,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st22", 9) == 0) { { -return dev_storage + 482; +return dev_storage + 483; } } @@ -5514,7 +5533,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st12", 9) == 0) { { -return dev_storage + 472; +return dev_storage + 473; } } @@ -5529,7 +5548,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr12", 9) == 0) { { -return dev_storage + 456; +return dev_storage + 457; } } @@ -5544,7 +5563,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd12", 9) == 0) { { -return dev_storage + 163; +return dev_storage + 164; } } @@ -5574,7 +5593,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty1", 9) == 0) { { -return dev_storage + 300; +return dev_storage + 301; } } @@ -5589,7 +5608,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst1", 9) == 0) { { -return dev_storage + 170; +return dev_storage + 171; } } @@ -5619,7 +5638,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd1", 9) == 0) { { -return dev_storage + 429; +return dev_storage + 430; } } @@ -5634,7 +5653,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st91", 9) == 0) { { -return dev_storage + 551; +return dev_storage + 552; } } @@ -5649,7 +5668,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st81", 9) == 0) { { -return dev_storage + 541; +return dev_storage + 542; } } @@ -5664,7 +5683,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st71", 9) == 0) { { -return dev_storage + 531; +return dev_storage + 532; } } @@ -5679,7 +5698,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st61", 9) == 0) { { -return dev_storage + 521; +return dev_storage + 522; } } @@ -5694,7 +5713,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st51", 9) == 0) { { -return dev_storage + 511; +return dev_storage + 512; } } @@ -5709,7 +5728,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st41", 9) == 0) { { -return dev_storage + 501; +return dev_storage + 502; } } @@ -5724,7 +5743,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st31", 9) == 0) { { -return dev_storage + 491; +return dev_storage + 492; } } @@ -5739,7 +5758,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st21", 9) == 0) { { -return dev_storage + 481; +return dev_storage + 482; } } @@ -5757,7 +5776,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st11", 9) == 0) { { -return dev_storage + 471; +return dev_storage + 472; } } @@ -5772,7 +5791,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr11", 9) == 0) { { -return dev_storage + 455; +return dev_storage + 456; } } @@ -5787,7 +5806,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd11", 9) == 0) { { -return dev_storage + 162; +return dev_storage + 163; } } @@ -5817,7 +5836,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty0", 9) == 0) { { -return dev_storage + 299; +return dev_storage + 300; } } @@ -5832,7 +5851,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst0", 9) == 0) { { -return dev_storage + 169; +return dev_storage + 170; } } @@ -5847,7 +5866,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd0", 9) == 0) { { -return dev_storage + 428; +return dev_storage + 429; } } @@ -5862,7 +5881,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st90", 9) == 0) { { -return dev_storage + 550; +return dev_storage + 551; } } @@ -5877,7 +5896,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st80", 9) == 0) { { -return dev_storage + 540; +return dev_storage + 541; } } @@ -5892,7 +5911,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st70", 9) == 0) { { -return dev_storage + 530; +return dev_storage + 531; } } @@ -5907,7 +5926,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st60", 9) == 0) { { -return dev_storage + 520; +return dev_storage + 521; } } @@ -5922,7 +5941,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st50", 9) == 0) { { -return dev_storage + 510; +return dev_storage + 511; } } @@ -5937,7 +5956,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st40", 9) == 0) { { -return dev_storage + 500; +return dev_storage + 501; } } @@ -5952,7 +5971,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st30", 9) == 0) { { -return dev_storage + 490; +return dev_storage + 491; } } @@ -5967,7 +5986,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st20", 9) == 0) { { -return dev_storage + 480; +return dev_storage + 481; } } @@ -5985,7 +6004,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st10", 9) == 0) { { -return dev_storage + 470; +return dev_storage + 471; } } @@ -6000,7 +6019,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr10", 9) == 0) { { -return dev_storage + 454; +return dev_storage + 455; } } @@ -6015,7 +6034,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd10", 9) == 0) { { -return dev_storage + 161; +return dev_storage + 162; } } @@ -6213,7 +6232,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/stdin", 10) == 0) { { -return dev_storage + 589; +return dev_storage + 590; } } @@ -6249,7 +6268,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/mixer", 10) == 0) { { -return dev_storage + 168; +return dev_storage + 169; } } @@ -6267,7 +6286,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS9", 10) == 0) { { -return dev_storage + 601; +return dev_storage + 602; } } @@ -6282,7 +6301,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS8", 10) == 0) { { -return dev_storage + 600; +return dev_storage + 601; } } @@ -6297,7 +6316,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS7", 10) == 0) { { -return dev_storage + 599; +return dev_storage + 600; } } @@ -6312,7 +6331,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS6", 10) == 0) { { -return dev_storage + 598; +return dev_storage + 599; } } @@ -6327,7 +6346,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS5", 10) == 0) { { -return dev_storage + 597; +return dev_storage + 598; } } @@ -6342,7 +6361,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS4", 10) == 0) { { -return dev_storage + 596; +return dev_storage + 597; } } @@ -6357,7 +6376,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS3", 10) == 0) { { -return dev_storage + 595; +return dev_storage + 596; } } @@ -6372,7 +6391,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS2", 10) == 0) { { -return dev_storage + 594; +return dev_storage + 595; } } @@ -6387,7 +6406,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS1", 10) == 0) { { -return dev_storage + 593; +return dev_storage + 594; } } @@ -6402,7 +6421,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS0", 10) == 0) { { -return dev_storage + 592; +return dev_storage + 593; } } @@ -6429,7 +6448,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty99", 10) == 0) { { -return dev_storage + 398; +return dev_storage + 399; } } @@ -6444,7 +6463,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty98", 10) == 0) { { -return dev_storage + 397; +return dev_storage + 398; } } @@ -6459,7 +6478,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty97", 10) == 0) { { -return dev_storage + 396; +return dev_storage + 397; } } @@ -6474,7 +6493,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty96", 10) == 0) { { -return dev_storage + 395; +return dev_storage + 396; } } @@ -6489,7 +6508,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty95", 10) == 0) { { -return dev_storage + 394; +return dev_storage + 395; } } @@ -6504,7 +6523,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty94", 10) == 0) { { -return dev_storage + 393; +return dev_storage + 394; } } @@ -6519,7 +6538,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty93", 10) == 0) { { -return dev_storage + 392; +return dev_storage + 393; } } @@ -6534,7 +6553,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty92", 10) == 0) { { -return dev_storage + 391; +return dev_storage + 392; } } @@ -6549,7 +6568,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty91", 10) == 0) { { -return dev_storage + 390; +return dev_storage + 391; } } @@ -6564,7 +6583,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty90", 10) == 0) { { -return dev_storage + 389; +return dev_storage + 390; } } @@ -6588,7 +6607,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst99", 10) == 0) { { -return dev_storage + 268; +return dev_storage + 269; } } @@ -6603,7 +6622,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst98", 10) == 0) { { -return dev_storage + 267; +return dev_storage + 268; } } @@ -6618,7 +6637,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst97", 10) == 0) { { -return dev_storage + 266; +return dev_storage + 267; } } @@ -6633,7 +6652,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst96", 10) == 0) { { -return dev_storage + 265; +return dev_storage + 266; } } @@ -6648,7 +6667,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst95", 10) == 0) { { -return dev_storage + 264; +return dev_storage + 265; } } @@ -6663,7 +6682,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst94", 10) == 0) { { -return dev_storage + 263; +return dev_storage + 264; } } @@ -6678,7 +6697,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst93", 10) == 0) { { -return dev_storage + 262; +return dev_storage + 263; } } @@ -6693,7 +6712,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst92", 10) == 0) { { -return dev_storage + 261; +return dev_storage + 262; } } @@ -6708,7 +6727,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst91", 10) == 0) { { -return dev_storage + 260; +return dev_storage + 261; } } @@ -6723,7 +6742,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst90", 10) == 0) { { -return dev_storage + 259; +return dev_storage + 260; } } @@ -6756,7 +6775,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty89", 10) == 0) { { -return dev_storage + 388; +return dev_storage + 389; } } @@ -6771,7 +6790,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty88", 10) == 0) { { -return dev_storage + 387; +return dev_storage + 388; } } @@ -6786,7 +6805,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty87", 10) == 0) { { -return dev_storage + 386; +return dev_storage + 387; } } @@ -6801,7 +6820,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty86", 10) == 0) { { -return dev_storage + 385; +return dev_storage + 386; } } @@ -6816,7 +6835,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty85", 10) == 0) { { -return dev_storage + 384; +return dev_storage + 385; } } @@ -6831,7 +6850,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty84", 10) == 0) { { -return dev_storage + 383; +return dev_storage + 384; } } @@ -6846,7 +6865,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty83", 10) == 0) { { -return dev_storage + 382; +return dev_storage + 383; } } @@ -6861,7 +6880,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty82", 10) == 0) { { -return dev_storage + 381; +return dev_storage + 382; } } @@ -6876,7 +6895,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty81", 10) == 0) { { -return dev_storage + 380; +return dev_storage + 381; } } @@ -6891,7 +6910,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty80", 10) == 0) { { -return dev_storage + 379; +return dev_storage + 380; } } @@ -6915,7 +6934,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst89", 10) == 0) { { -return dev_storage + 258; +return dev_storage + 259; } } @@ -6930,7 +6949,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst88", 10) == 0) { { -return dev_storage + 257; +return dev_storage + 258; } } @@ -6945,7 +6964,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst87", 10) == 0) { { -return dev_storage + 256; +return dev_storage + 257; } } @@ -6960,7 +6979,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst86", 10) == 0) { { -return dev_storage + 255; +return dev_storage + 256; } } @@ -6975,7 +6994,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst85", 10) == 0) { { -return dev_storage + 254; +return dev_storage + 255; } } @@ -6990,7 +7009,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst84", 10) == 0) { { -return dev_storage + 253; +return dev_storage + 254; } } @@ -7005,7 +7024,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst83", 10) == 0) { { -return dev_storage + 252; +return dev_storage + 253; } } @@ -7020,7 +7039,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst82", 10) == 0) { { -return dev_storage + 251; +return dev_storage + 252; } } @@ -7035,7 +7054,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst81", 10) == 0) { { -return dev_storage + 250; +return dev_storage + 251; } } @@ -7050,7 +7069,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst80", 10) == 0) { { -return dev_storage + 249; +return dev_storage + 250; } } @@ -7083,7 +7102,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty79", 10) == 0) { { -return dev_storage + 378; +return dev_storage + 379; } } @@ -7098,7 +7117,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty78", 10) == 0) { { -return dev_storage + 377; +return dev_storage + 378; } } @@ -7113,7 +7132,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty77", 10) == 0) { { -return dev_storage + 376; +return dev_storage + 377; } } @@ -7128,7 +7147,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty76", 10) == 0) { { -return dev_storage + 375; +return dev_storage + 376; } } @@ -7143,7 +7162,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty75", 10) == 0) { { -return dev_storage + 374; +return dev_storage + 375; } } @@ -7158,7 +7177,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty74", 10) == 0) { { -return dev_storage + 373; +return dev_storage + 374; } } @@ -7173,7 +7192,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty73", 10) == 0) { { -return dev_storage + 372; +return dev_storage + 373; } } @@ -7188,7 +7207,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty72", 10) == 0) { { -return dev_storage + 371; +return dev_storage + 372; } } @@ -7203,7 +7222,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty71", 10) == 0) { { -return dev_storage + 370; +return dev_storage + 371; } } @@ -7218,7 +7237,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty70", 10) == 0) { { -return dev_storage + 369; +return dev_storage + 370; } } @@ -7242,7 +7261,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst79", 10) == 0) { { -return dev_storage + 248; +return dev_storage + 249; } } @@ -7257,7 +7276,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst78", 10) == 0) { { -return dev_storage + 247; +return dev_storage + 248; } } @@ -7272,7 +7291,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst77", 10) == 0) { { -return dev_storage + 246; +return dev_storage + 247; } } @@ -7287,7 +7306,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst76", 10) == 0) { { -return dev_storage + 245; +return dev_storage + 246; } } @@ -7302,7 +7321,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst75", 10) == 0) { { -return dev_storage + 244; +return dev_storage + 245; } } @@ -7317,7 +7336,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst74", 10) == 0) { { -return dev_storage + 243; +return dev_storage + 244; } } @@ -7332,7 +7351,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst73", 10) == 0) { { -return dev_storage + 242; +return dev_storage + 243; } } @@ -7347,7 +7366,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst72", 10) == 0) { { -return dev_storage + 241; +return dev_storage + 242; } } @@ -7362,7 +7381,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst71", 10) == 0) { { -return dev_storage + 240; +return dev_storage + 241; } } @@ -7377,7 +7396,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst70", 10) == 0) { { -return dev_storage + 239; +return dev_storage + 240; } } @@ -7410,7 +7429,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty69", 10) == 0) { { -return dev_storage + 368; +return dev_storage + 369; } } @@ -7425,7 +7444,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty68", 10) == 0) { { -return dev_storage + 367; +return dev_storage + 368; } } @@ -7440,7 +7459,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty67", 10) == 0) { { -return dev_storage + 366; +return dev_storage + 367; } } @@ -7455,7 +7474,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty66", 10) == 0) { { -return dev_storage + 365; +return dev_storage + 366; } } @@ -7470,7 +7489,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty65", 10) == 0) { { -return dev_storage + 364; +return dev_storage + 365; } } @@ -7485,7 +7504,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty64", 10) == 0) { { -return dev_storage + 363; +return dev_storage + 364; } } @@ -7500,7 +7519,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty63", 10) == 0) { { -return dev_storage + 362; +return dev_storage + 363; } } @@ -7515,7 +7534,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty62", 10) == 0) { { -return dev_storage + 361; +return dev_storage + 362; } } @@ -7530,7 +7549,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty61", 10) == 0) { { -return dev_storage + 360; +return dev_storage + 361; } } @@ -7545,7 +7564,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty60", 10) == 0) { { -return dev_storage + 359; +return dev_storage + 360; } } @@ -7569,7 +7588,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst69", 10) == 0) { { -return dev_storage + 238; +return dev_storage + 239; } } @@ -7584,7 +7603,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst68", 10) == 0) { { -return dev_storage + 237; +return dev_storage + 238; } } @@ -7599,7 +7618,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst67", 10) == 0) { { -return dev_storage + 236; +return dev_storage + 237; } } @@ -7614,7 +7633,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst66", 10) == 0) { { -return dev_storage + 235; +return dev_storage + 236; } } @@ -7629,7 +7648,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst65", 10) == 0) { { -return dev_storage + 234; +return dev_storage + 235; } } @@ -7644,7 +7663,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst64", 10) == 0) { { -return dev_storage + 233; +return dev_storage + 234; } } @@ -7659,7 +7678,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst63", 10) == 0) { { -return dev_storage + 232; +return dev_storage + 233; } } @@ -7674,7 +7693,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst62", 10) == 0) { { -return dev_storage + 231; +return dev_storage + 232; } } @@ -7689,7 +7708,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst61", 10) == 0) { { -return dev_storage + 230; +return dev_storage + 231; } } @@ -7704,7 +7723,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst60", 10) == 0) { { -return dev_storage + 229; +return dev_storage + 230; } } @@ -7737,7 +7756,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty59", 10) == 0) { { -return dev_storage + 358; +return dev_storage + 359; } } @@ -7752,7 +7771,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty58", 10) == 0) { { -return dev_storage + 357; +return dev_storage + 358; } } @@ -7767,7 +7786,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty57", 10) == 0) { { -return dev_storage + 356; +return dev_storage + 357; } } @@ -7782,7 +7801,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty56", 10) == 0) { { -return dev_storage + 355; +return dev_storage + 356; } } @@ -7797,7 +7816,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty55", 10) == 0) { { -return dev_storage + 354; +return dev_storage + 355; } } @@ -7812,7 +7831,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty54", 10) == 0) { { -return dev_storage + 353; +return dev_storage + 354; } } @@ -7827,7 +7846,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty53", 10) == 0) { { -return dev_storage + 352; +return dev_storage + 353; } } @@ -7842,7 +7861,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty52", 10) == 0) { { -return dev_storage + 351; +return dev_storage + 352; } } @@ -7857,7 +7876,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty51", 10) == 0) { { -return dev_storage + 350; +return dev_storage + 351; } } @@ -7872,7 +7891,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty50", 10) == 0) { { -return dev_storage + 349; +return dev_storage + 350; } } @@ -7896,7 +7915,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst59", 10) == 0) { { -return dev_storage + 228; +return dev_storage + 229; } } @@ -7911,7 +7930,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst58", 10) == 0) { { -return dev_storage + 227; +return dev_storage + 228; } } @@ -7926,7 +7945,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst57", 10) == 0) { { -return dev_storage + 226; +return dev_storage + 227; } } @@ -7941,7 +7960,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst56", 10) == 0) { { -return dev_storage + 225; +return dev_storage + 226; } } @@ -7956,7 +7975,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst55", 10) == 0) { { -return dev_storage + 224; +return dev_storage + 225; } } @@ -7971,7 +7990,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst54", 10) == 0) { { -return dev_storage + 223; +return dev_storage + 224; } } @@ -7986,7 +8005,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst53", 10) == 0) { { -return dev_storage + 222; +return dev_storage + 223; } } @@ -8001,7 +8020,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst52", 10) == 0) { { -return dev_storage + 221; +return dev_storage + 222; } } @@ -8016,7 +8035,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst51", 10) == 0) { { -return dev_storage + 220; +return dev_storage + 221; } } @@ -8031,7 +8050,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst50", 10) == 0) { { -return dev_storage + 219; +return dev_storage + 220; } } @@ -8064,7 +8083,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty49", 10) == 0) { { -return dev_storage + 348; +return dev_storage + 349; } } @@ -8079,7 +8098,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty48", 10) == 0) { { -return dev_storage + 347; +return dev_storage + 348; } } @@ -8094,7 +8113,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty47", 10) == 0) { { -return dev_storage + 346; +return dev_storage + 347; } } @@ -8109,7 +8128,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty46", 10) == 0) { { -return dev_storage + 345; +return dev_storage + 346; } } @@ -8124,7 +8143,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty45", 10) == 0) { { -return dev_storage + 344; +return dev_storage + 345; } } @@ -8139,7 +8158,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty44", 10) == 0) { { -return dev_storage + 343; +return dev_storage + 344; } } @@ -8154,7 +8173,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty43", 10) == 0) { { -return dev_storage + 342; +return dev_storage + 343; } } @@ -8169,7 +8188,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty42", 10) == 0) { { -return dev_storage + 341; +return dev_storage + 342; } } @@ -8184,7 +8203,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty41", 10) == 0) { { -return dev_storage + 340; +return dev_storage + 341; } } @@ -8199,7 +8218,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty40", 10) == 0) { { -return dev_storage + 339; +return dev_storage + 340; } } @@ -8223,7 +8242,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst49", 10) == 0) { { -return dev_storage + 218; +return dev_storage + 219; } } @@ -8238,7 +8257,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst48", 10) == 0) { { -return dev_storage + 217; +return dev_storage + 218; } } @@ -8253,7 +8272,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst47", 10) == 0) { { -return dev_storage + 216; +return dev_storage + 217; } } @@ -8268,7 +8287,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst46", 10) == 0) { { -return dev_storage + 215; +return dev_storage + 216; } } @@ -8283,7 +8302,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst45", 10) == 0) { { -return dev_storage + 214; +return dev_storage + 215; } } @@ -8298,7 +8317,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst44", 10) == 0) { { -return dev_storage + 213; +return dev_storage + 214; } } @@ -8313,7 +8332,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst43", 10) == 0) { { -return dev_storage + 212; +return dev_storage + 213; } } @@ -8328,7 +8347,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst42", 10) == 0) { { -return dev_storage + 211; +return dev_storage + 212; } } @@ -8343,7 +8362,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst41", 10) == 0) { { -return dev_storage + 210; +return dev_storage + 211; } } @@ -8358,7 +8377,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst40", 10) == 0) { { -return dev_storage + 209; +return dev_storage + 210; } } @@ -8391,7 +8410,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty39", 10) == 0) { { -return dev_storage + 338; +return dev_storage + 339; } } @@ -8406,7 +8425,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty38", 10) == 0) { { -return dev_storage + 337; +return dev_storage + 338; } } @@ -8421,7 +8440,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty37", 10) == 0) { { -return dev_storage + 336; +return dev_storage + 337; } } @@ -8436,7 +8455,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty36", 10) == 0) { { -return dev_storage + 335; +return dev_storage + 336; } } @@ -8451,7 +8470,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty35", 10) == 0) { { -return dev_storage + 334; +return dev_storage + 335; } } @@ -8466,7 +8485,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty34", 10) == 0) { { -return dev_storage + 333; +return dev_storage + 334; } } @@ -8481,7 +8500,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty33", 10) == 0) { { -return dev_storage + 332; +return dev_storage + 333; } } @@ -8496,7 +8515,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty32", 10) == 0) { { -return dev_storage + 331; +return dev_storage + 332; } } @@ -8511,7 +8530,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty31", 10) == 0) { { -return dev_storage + 330; +return dev_storage + 331; } } @@ -8526,7 +8545,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty30", 10) == 0) { { -return dev_storage + 329; +return dev_storage + 330; } } @@ -8550,7 +8569,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst39", 10) == 0) { { -return dev_storage + 208; +return dev_storage + 209; } } @@ -8565,7 +8584,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst38", 10) == 0) { { -return dev_storage + 207; +return dev_storage + 208; } } @@ -8580,7 +8599,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst37", 10) == 0) { { -return dev_storage + 206; +return dev_storage + 207; } } @@ -8595,7 +8614,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst36", 10) == 0) { { -return dev_storage + 205; +return dev_storage + 206; } } @@ -8610,7 +8629,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst35", 10) == 0) { { -return dev_storage + 204; +return dev_storage + 205; } } @@ -8625,7 +8644,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst34", 10) == 0) { { -return dev_storage + 203; +return dev_storage + 204; } } @@ -8640,7 +8659,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst33", 10) == 0) { { -return dev_storage + 202; +return dev_storage + 203; } } @@ -8655,7 +8674,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst32", 10) == 0) { { -return dev_storage + 201; +return dev_storage + 202; } } @@ -8670,7 +8689,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst31", 10) == 0) { { -return dev_storage + 200; +return dev_storage + 201; } } @@ -8685,7 +8704,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst30", 10) == 0) { { -return dev_storage + 199; +return dev_storage + 200; } } @@ -8718,7 +8737,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st127", 10) == 0) { { -return dev_storage + 587; +return dev_storage + 588; } } @@ -8733,7 +8752,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st126", 10) == 0) { { -return dev_storage + 586; +return dev_storage + 587; } } @@ -8748,7 +8767,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st125", 10) == 0) { { -return dev_storage + 585; +return dev_storage + 586; } } @@ -8763,7 +8782,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st124", 10) == 0) { { -return dev_storage + 584; +return dev_storage + 585; } } @@ -8778,7 +8797,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st123", 10) == 0) { { -return dev_storage + 583; +return dev_storage + 584; } } @@ -8793,7 +8812,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st122", 10) == 0) { { -return dev_storage + 582; +return dev_storage + 583; } } @@ -8808,7 +8827,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st121", 10) == 0) { { -return dev_storage + 581; +return dev_storage + 582; } } @@ -8823,7 +8842,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st120", 10) == 0) { { -return dev_storage + 580; +return dev_storage + 581; } } @@ -8847,7 +8866,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty29", 10) == 0) { { -return dev_storage + 328; +return dev_storage + 329; } } @@ -8862,7 +8881,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty28", 10) == 0) { { -return dev_storage + 327; +return dev_storage + 328; } } @@ -8877,7 +8896,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty27", 10) == 0) { { -return dev_storage + 326; +return dev_storage + 327; } } @@ -8892,7 +8911,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty26", 10) == 0) { { -return dev_storage + 325; +return dev_storage + 326; } } @@ -8907,7 +8926,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty25", 10) == 0) { { -return dev_storage + 324; +return dev_storage + 325; } } @@ -8922,7 +8941,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty24", 10) == 0) { { -return dev_storage + 323; +return dev_storage + 324; } } @@ -8937,7 +8956,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty23", 10) == 0) { { -return dev_storage + 322; +return dev_storage + 323; } } @@ -8952,7 +8971,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty22", 10) == 0) { { -return dev_storage + 321; +return dev_storage + 322; } } @@ -8967,7 +8986,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty21", 10) == 0) { { -return dev_storage + 320; +return dev_storage + 321; } } @@ -8982,7 +9001,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty20", 10) == 0) { { -return dev_storage + 319; +return dev_storage + 320; } } @@ -9006,7 +9025,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst29", 10) == 0) { { -return dev_storage + 198; +return dev_storage + 199; } } @@ -9021,7 +9040,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst28", 10) == 0) { { -return dev_storage + 197; +return dev_storage + 198; } } @@ -9036,7 +9055,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst27", 10) == 0) { { -return dev_storage + 196; +return dev_storage + 197; } } @@ -9051,7 +9070,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst26", 10) == 0) { { -return dev_storage + 195; +return dev_storage + 196; } } @@ -9066,7 +9085,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst25", 10) == 0) { { -return dev_storage + 194; +return dev_storage + 195; } } @@ -9081,7 +9100,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst24", 10) == 0) { { -return dev_storage + 193; +return dev_storage + 194; } } @@ -9096,7 +9115,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst23", 10) == 0) { { -return dev_storage + 192; +return dev_storage + 193; } } @@ -9111,7 +9130,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst22", 10) == 0) { { -return dev_storage + 191; +return dev_storage + 192; } } @@ -9126,7 +9145,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst21", 10) == 0) { { -return dev_storage + 190; +return dev_storage + 191; } } @@ -9141,7 +9160,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst20", 10) == 0) { { -return dev_storage + 189; +return dev_storage + 190; } } @@ -9174,7 +9193,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty19", 10) == 0) { { -return dev_storage + 318; +return dev_storage + 319; } } @@ -9189,7 +9208,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty18", 10) == 0) { { -return dev_storage + 317; +return dev_storage + 318; } } @@ -9204,7 +9223,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty17", 10) == 0) { { -return dev_storage + 316; +return dev_storage + 317; } } @@ -9219,7 +9238,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty16", 10) == 0) { { -return dev_storage + 315; +return dev_storage + 316; } } @@ -9234,7 +9253,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty15", 10) == 0) { { -return dev_storage + 314; +return dev_storage + 315; } } @@ -9249,7 +9268,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty14", 10) == 0) { { -return dev_storage + 313; +return dev_storage + 314; } } @@ -9264,7 +9283,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty13", 10) == 0) { { -return dev_storage + 312; +return dev_storage + 313; } } @@ -9279,7 +9298,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty12", 10) == 0) { { -return dev_storage + 311; +return dev_storage + 312; } } @@ -9294,7 +9313,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty11", 10) == 0) { { -return dev_storage + 310; +return dev_storage + 311; } } @@ -9309,7 +9328,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty10", 10) == 0) { { -return dev_storage + 309; +return dev_storage + 310; } } @@ -9333,7 +9352,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst19", 10) == 0) { { -return dev_storage + 188; +return dev_storage + 189; } } @@ -9348,7 +9367,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst18", 10) == 0) { { -return dev_storage + 187; +return dev_storage + 188; } } @@ -9363,7 +9382,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst17", 10) == 0) { { -return dev_storage + 186; +return dev_storage + 187; } } @@ -9378,7 +9397,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst16", 10) == 0) { { -return dev_storage + 185; +return dev_storage + 186; } } @@ -9393,7 +9412,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst15", 10) == 0) { { -return dev_storage + 184; +return dev_storage + 185; } } @@ -9408,7 +9427,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst14", 10) == 0) { { -return dev_storage + 183; +return dev_storage + 184; } } @@ -9423,7 +9442,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst13", 10) == 0) { { -return dev_storage + 182; +return dev_storage + 183; } } @@ -9438,7 +9457,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst12", 10) == 0) { { -return dev_storage + 181; +return dev_storage + 182; } } @@ -9453,7 +9472,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst11", 10) == 0) { { -return dev_storage + 180; +return dev_storage + 181; } } @@ -9468,7 +9487,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst10", 10) == 0) { { -return dev_storage + 179; +return dev_storage + 180; } } @@ -9606,7 +9625,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd15", 10) == 0) { { -return dev_storage + 443; +return dev_storage + 444; } } @@ -9621,7 +9640,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd14", 10) == 0) { { -return dev_storage + 442; +return dev_storage + 443; } } @@ -9636,7 +9655,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd13", 10) == 0) { { -return dev_storage + 441; +return dev_storage + 442; } } @@ -9651,7 +9670,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd12", 10) == 0) { { -return dev_storage + 440; +return dev_storage + 441; } } @@ -9666,7 +9685,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd11", 10) == 0) { { -return dev_storage + 439; +return dev_storage + 440; } } @@ -9681,7 +9700,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd10", 10) == 0) { { -return dev_storage + 438; +return dev_storage + 439; } } @@ -9705,7 +9724,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st119", 10) == 0) { { -return dev_storage + 579; +return dev_storage + 580; } } @@ -9720,7 +9739,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st118", 10) == 0) { { -return dev_storage + 578; +return dev_storage + 579; } } @@ -9735,7 +9754,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st117", 10) == 0) { { -return dev_storage + 577; +return dev_storage + 578; } } @@ -9750,7 +9769,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st116", 10) == 0) { { -return dev_storage + 576; +return dev_storage + 577; } } @@ -9765,7 +9784,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st115", 10) == 0) { { -return dev_storage + 575; +return dev_storage + 576; } } @@ -9780,7 +9799,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st114", 10) == 0) { { -return dev_storage + 574; +return dev_storage + 575; } } @@ -9795,7 +9814,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st113", 10) == 0) { { -return dev_storage + 573; +return dev_storage + 574; } } @@ -9810,7 +9829,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st112", 10) == 0) { { -return dev_storage + 572; +return dev_storage + 573; } } @@ -9825,7 +9844,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st111", 10) == 0) { { -return dev_storage + 571; +return dev_storage + 572; } } @@ -9840,7 +9859,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st110", 10) == 0) { { -return dev_storage + 570; +return dev_storage + 571; } } @@ -9870,7 +9889,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st109", 10) == 0) { { -return dev_storage + 569; +return dev_storage + 570; } } @@ -9885,7 +9904,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st108", 10) == 0) { { -return dev_storage + 568; +return dev_storage + 569; } } @@ -9900,7 +9919,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st107", 10) == 0) { { -return dev_storage + 567; +return dev_storage + 568; } } @@ -9915,7 +9934,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st106", 10) == 0) { { -return dev_storage + 566; +return dev_storage + 567; } } @@ -9930,7 +9949,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st105", 10) == 0) { { -return dev_storage + 565; +return dev_storage + 566; } } @@ -9945,7 +9964,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st104", 10) == 0) { { -return dev_storage + 564; +return dev_storage + 565; } } @@ -9960,7 +9979,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st103", 10) == 0) { { -return dev_storage + 563; +return dev_storage + 564; } } @@ -9975,7 +9994,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st102", 10) == 0) { { -return dev_storage + 562; +return dev_storage + 563; } } @@ -9990,7 +10009,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st101", 10) == 0) { { -return dev_storage + 561; +return dev_storage + 562; } } @@ -10005,7 +10024,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st100", 10) == 0) { { -return dev_storage + 560; +return dev_storage + 561; } } @@ -10038,7 +10057,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/stdout", 11) == 0) { { -return dev_storage + 590; +return dev_storage + 591; } } @@ -10074,7 +10093,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/stderr", 11) == 0) { { -return dev_storage + 588; +return dev_storage + 589; } } @@ -10089,7 +10108,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/random", 11) == 0) { { -return dev_storage + 427; +return dev_storage + 428; } } @@ -10110,7 +10129,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS99", 11) == 0) { { -return dev_storage + 691; +return dev_storage + 692; } } @@ -10125,7 +10144,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS98", 11) == 0) { { -return dev_storage + 690; +return dev_storage + 691; } } @@ -10140,7 +10159,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS97", 11) == 0) { { -return dev_storage + 689; +return dev_storage + 690; } } @@ -10155,7 +10174,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS96", 11) == 0) { { -return dev_storage + 688; +return dev_storage + 689; } } @@ -10170,7 +10189,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS95", 11) == 0) { { -return dev_storage + 687; +return dev_storage + 688; } } @@ -10185,7 +10204,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS94", 11) == 0) { { -return dev_storage + 686; +return dev_storage + 687; } } @@ -10200,7 +10219,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS93", 11) == 0) { { -return dev_storage + 685; +return dev_storage + 686; } } @@ -10215,7 +10234,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS92", 11) == 0) { { -return dev_storage + 684; +return dev_storage + 685; } } @@ -10230,7 +10249,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS91", 11) == 0) { { -return dev_storage + 683; +return dev_storage + 684; } } @@ -10245,7 +10264,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS90", 11) == 0) { { -return dev_storage + 682; +return dev_storage + 683; } } @@ -10437,7 +10456,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS89", 11) == 0) { { -return dev_storage + 681; +return dev_storage + 682; } } @@ -10452,7 +10471,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS88", 11) == 0) { { -return dev_storage + 680; +return dev_storage + 681; } } @@ -10467,7 +10486,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS87", 11) == 0) { { -return dev_storage + 679; +return dev_storage + 680; } } @@ -10482,7 +10501,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS86", 11) == 0) { { -return dev_storage + 678; +return dev_storage + 679; } } @@ -10497,7 +10516,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS85", 11) == 0) { { -return dev_storage + 677; +return dev_storage + 678; } } @@ -10512,7 +10531,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS84", 11) == 0) { { -return dev_storage + 676; +return dev_storage + 677; } } @@ -10527,7 +10546,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS83", 11) == 0) { { -return dev_storage + 675; +return dev_storage + 676; } } @@ -10542,7 +10561,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS82", 11) == 0) { { -return dev_storage + 674; +return dev_storage + 675; } } @@ -10557,7 +10576,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS81", 11) == 0) { { -return dev_storage + 673; +return dev_storage + 674; } } @@ -10572,7 +10591,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS80", 11) == 0) { { -return dev_storage + 672; +return dev_storage + 673; } } @@ -10764,7 +10783,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS79", 11) == 0) { { -return dev_storage + 671; +return dev_storage + 672; } } @@ -10779,7 +10798,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS78", 11) == 0) { { -return dev_storage + 670; +return dev_storage + 671; } } @@ -10794,7 +10813,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS77", 11) == 0) { { -return dev_storage + 669; +return dev_storage + 670; } } @@ -10809,7 +10828,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS76", 11) == 0) { { -return dev_storage + 668; +return dev_storage + 669; } } @@ -10824,7 +10843,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS75", 11) == 0) { { -return dev_storage + 667; +return dev_storage + 668; } } @@ -10839,7 +10858,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS74", 11) == 0) { { -return dev_storage + 666; +return dev_storage + 667; } } @@ -10854,7 +10873,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS73", 11) == 0) { { -return dev_storage + 665; +return dev_storage + 666; } } @@ -10869,7 +10888,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS72", 11) == 0) { { -return dev_storage + 664; +return dev_storage + 665; } } @@ -10884,7 +10903,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS71", 11) == 0) { { -return dev_storage + 663; +return dev_storage + 664; } } @@ -10899,7 +10918,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS70", 11) == 0) { { -return dev_storage + 662; +return dev_storage + 663; } } @@ -11091,7 +11110,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS69", 11) == 0) { { -return dev_storage + 661; +return dev_storage + 662; } } @@ -11106,7 +11125,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS68", 11) == 0) { { -return dev_storage + 660; +return dev_storage + 661; } } @@ -11121,7 +11140,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS67", 11) == 0) { { -return dev_storage + 659; +return dev_storage + 660; } } @@ -11136,7 +11155,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS66", 11) == 0) { { -return dev_storage + 658; +return dev_storage + 659; } } @@ -11151,7 +11170,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS65", 11) == 0) { { -return dev_storage + 657; +return dev_storage + 658; } } @@ -11166,7 +11185,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS64", 11) == 0) { { -return dev_storage + 656; +return dev_storage + 657; } } @@ -11181,7 +11200,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS63", 11) == 0) { { -return dev_storage + 655; +return dev_storage + 656; } } @@ -11196,7 +11215,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS62", 11) == 0) { { -return dev_storage + 654; +return dev_storage + 655; } } @@ -11211,7 +11230,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS61", 11) == 0) { { -return dev_storage + 653; +return dev_storage + 654; } } @@ -11226,7 +11245,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS60", 11) == 0) { { -return dev_storage + 652; +return dev_storage + 653; } } @@ -11418,7 +11437,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS59", 11) == 0) { { -return dev_storage + 651; +return dev_storage + 652; } } @@ -11433,7 +11452,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS58", 11) == 0) { { -return dev_storage + 650; +return dev_storage + 651; } } @@ -11448,7 +11467,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS57", 11) == 0) { { -return dev_storage + 649; +return dev_storage + 650; } } @@ -11463,7 +11482,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS56", 11) == 0) { { -return dev_storage + 648; +return dev_storage + 649; } } @@ -11478,7 +11497,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS55", 11) == 0) { { -return dev_storage + 647; +return dev_storage + 648; } } @@ -11493,7 +11512,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS54", 11) == 0) { { -return dev_storage + 646; +return dev_storage + 647; } } @@ -11508,7 +11527,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS53", 11) == 0) { { -return dev_storage + 645; +return dev_storage + 646; } } @@ -11523,7 +11542,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS52", 11) == 0) { { -return dev_storage + 644; +return dev_storage + 645; } } @@ -11538,7 +11557,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS51", 11) == 0) { { -return dev_storage + 643; +return dev_storage + 644; } } @@ -11553,7 +11572,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS50", 11) == 0) { { -return dev_storage + 642; +return dev_storage + 643; } } @@ -11745,7 +11764,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS49", 11) == 0) { { -return dev_storage + 641; +return dev_storage + 642; } } @@ -11760,7 +11779,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS48", 11) == 0) { { -return dev_storage + 640; +return dev_storage + 641; } } @@ -11775,7 +11794,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS47", 11) == 0) { { -return dev_storage + 639; +return dev_storage + 640; } } @@ -11790,7 +11809,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS46", 11) == 0) { { -return dev_storage + 638; +return dev_storage + 639; } } @@ -11805,7 +11824,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS45", 11) == 0) { { -return dev_storage + 637; +return dev_storage + 638; } } @@ -11820,7 +11839,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS44", 11) == 0) { { -return dev_storage + 636; +return dev_storage + 637; } } @@ -11835,7 +11854,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS43", 11) == 0) { { -return dev_storage + 635; +return dev_storage + 636; } } @@ -11850,7 +11869,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS42", 11) == 0) { { -return dev_storage + 634; +return dev_storage + 635; } } @@ -11865,7 +11884,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS41", 11) == 0) { { -return dev_storage + 633; +return dev_storage + 634; } } @@ -11880,7 +11899,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS40", 11) == 0) { { -return dev_storage + 632; +return dev_storage + 633; } } @@ -12072,7 +12091,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS39", 11) == 0) { { -return dev_storage + 631; +return dev_storage + 632; } } @@ -12087,7 +12106,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS38", 11) == 0) { { -return dev_storage + 630; +return dev_storage + 631; } } @@ -12102,7 +12121,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS37", 11) == 0) { { -return dev_storage + 629; +return dev_storage + 630; } } @@ -12117,7 +12136,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS36", 11) == 0) { { -return dev_storage + 628; +return dev_storage + 629; } } @@ -12132,7 +12151,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS35", 11) == 0) { { -return dev_storage + 627; +return dev_storage + 628; } } @@ -12147,7 +12166,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS34", 11) == 0) { { -return dev_storage + 626; +return dev_storage + 627; } } @@ -12162,7 +12181,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS33", 11) == 0) { { -return dev_storage + 625; +return dev_storage + 626; } } @@ -12177,7 +12196,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS32", 11) == 0) { { -return dev_storage + 624; +return dev_storage + 625; } } @@ -12192,7 +12211,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS31", 11) == 0) { { -return dev_storage + 623; +return dev_storage + 624; } } @@ -12207,7 +12226,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS30", 11) == 0) { { -return dev_storage + 622; +return dev_storage + 623; } } @@ -12399,7 +12418,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS29", 11) == 0) { { -return dev_storage + 621; +return dev_storage + 622; } } @@ -12414,7 +12433,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS28", 11) == 0) { { -return dev_storage + 620; +return dev_storage + 621; } } @@ -12429,7 +12448,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS27", 11) == 0) { { -return dev_storage + 619; +return dev_storage + 620; } } @@ -12444,7 +12463,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS26", 11) == 0) { { -return dev_storage + 618; +return dev_storage + 619; } } @@ -12459,7 +12478,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS25", 11) == 0) { { -return dev_storage + 617; +return dev_storage + 618; } } @@ -12474,7 +12493,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS24", 11) == 0) { { -return dev_storage + 616; +return dev_storage + 617; } } @@ -12489,7 +12508,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS23", 11) == 0) { { -return dev_storage + 615; +return dev_storage + 616; } } @@ -12504,7 +12523,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS22", 11) == 0) { { -return dev_storage + 614; +return dev_storage + 615; } } @@ -12519,7 +12538,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS21", 11) == 0) { { -return dev_storage + 613; +return dev_storage + 614; } } @@ -12534,7 +12553,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS20", 11) == 0) { { -return dev_storage + 612; +return dev_storage + 613; } } @@ -12558,7 +12577,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty127", 11) == 0) { { -return dev_storage + 426; +return dev_storage + 427; } } @@ -12573,7 +12592,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty126", 11) == 0) { { -return dev_storage + 425; +return dev_storage + 426; } } @@ -12588,7 +12607,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty125", 11) == 0) { { -return dev_storage + 424; +return dev_storage + 425; } } @@ -12603,7 +12622,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty124", 11) == 0) { { -return dev_storage + 423; +return dev_storage + 424; } } @@ -12618,7 +12637,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty123", 11) == 0) { { -return dev_storage + 422; +return dev_storage + 423; } } @@ -12633,7 +12652,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty122", 11) == 0) { { -return dev_storage + 421; +return dev_storage + 422; } } @@ -12648,7 +12667,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty121", 11) == 0) { { -return dev_storage + 420; +return dev_storage + 421; } } @@ -12663,7 +12682,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty120", 11) == 0) { { -return dev_storage + 419; +return dev_storage + 420; } } @@ -12687,7 +12706,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst127", 11) == 0) { { -return dev_storage + 296; +return dev_storage + 297; } } @@ -12702,7 +12721,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst126", 11) == 0) { { -return dev_storage + 295; +return dev_storage + 296; } } @@ -12717,7 +12736,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst125", 11) == 0) { { -return dev_storage + 294; +return dev_storage + 295; } } @@ -12732,7 +12751,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst124", 11) == 0) { { -return dev_storage + 293; +return dev_storage + 294; } } @@ -12747,7 +12766,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst123", 11) == 0) { { -return dev_storage + 292; +return dev_storage + 293; } } @@ -12762,7 +12781,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst122", 11) == 0) { { -return dev_storage + 291; +return dev_storage + 292; } } @@ -12777,7 +12796,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst121", 11) == 0) { { -return dev_storage + 290; +return dev_storage + 291; } } @@ -12792,7 +12811,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst120", 11) == 0) { { -return dev_storage + 289; +return dev_storage + 290; } } @@ -12984,7 +13003,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS19", 11) == 0) { { -return dev_storage + 611; +return dev_storage + 612; } } @@ -12999,7 +13018,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS18", 11) == 0) { { -return dev_storage + 610; +return dev_storage + 611; } } @@ -13014,7 +13033,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS17", 11) == 0) { { -return dev_storage + 609; +return dev_storage + 610; } } @@ -13029,7 +13048,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS16", 11) == 0) { { -return dev_storage + 608; +return dev_storage + 609; } } @@ -13044,7 +13063,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS15", 11) == 0) { { -return dev_storage + 607; +return dev_storage + 608; } } @@ -13059,7 +13078,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS14", 11) == 0) { { -return dev_storage + 606; +return dev_storage + 607; } } @@ -13074,7 +13093,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS13", 11) == 0) { { -return dev_storage + 605; +return dev_storage + 606; } } @@ -13089,7 +13108,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS12", 11) == 0) { { -return dev_storage + 604; +return dev_storage + 605; } } @@ -13104,7 +13123,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS11", 11) == 0) { { -return dev_storage + 603; +return dev_storage + 604; } } @@ -13119,7 +13138,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS10", 11) == 0) { { -return dev_storage + 602; +return dev_storage + 603; } } @@ -13143,7 +13162,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty119", 11) == 0) { { -return dev_storage + 418; +return dev_storage + 419; } } @@ -13158,7 +13177,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty118", 11) == 0) { { -return dev_storage + 417; +return dev_storage + 418; } } @@ -13173,7 +13192,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty117", 11) == 0) { { -return dev_storage + 416; +return dev_storage + 417; } } @@ -13188,7 +13207,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty116", 11) == 0) { { -return dev_storage + 415; +return dev_storage + 416; } } @@ -13203,7 +13222,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty115", 11) == 0) { { -return dev_storage + 414; +return dev_storage + 415; } } @@ -13218,7 +13237,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty114", 11) == 0) { { -return dev_storage + 413; +return dev_storage + 414; } } @@ -13233,7 +13252,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty113", 11) == 0) { { -return dev_storage + 412; +return dev_storage + 413; } } @@ -13248,7 +13267,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty112", 11) == 0) { { -return dev_storage + 411; +return dev_storage + 412; } } @@ -13263,7 +13282,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty111", 11) == 0) { { -return dev_storage + 410; +return dev_storage + 411; } } @@ -13278,7 +13297,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty110", 11) == 0) { { -return dev_storage + 409; +return dev_storage + 410; } } @@ -13302,7 +13321,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst119", 11) == 0) { { -return dev_storage + 288; +return dev_storage + 289; } } @@ -13317,7 +13336,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst118", 11) == 0) { { -return dev_storage + 287; +return dev_storage + 288; } } @@ -13332,7 +13351,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst117", 11) == 0) { { -return dev_storage + 286; +return dev_storage + 287; } } @@ -13347,7 +13366,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst116", 11) == 0) { { -return dev_storage + 285; +return dev_storage + 286; } } @@ -13362,7 +13381,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst115", 11) == 0) { { -return dev_storage + 284; +return dev_storage + 285; } } @@ -13377,7 +13396,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst114", 11) == 0) { { -return dev_storage + 283; +return dev_storage + 284; } } @@ -13392,7 +13411,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst113", 11) == 0) { { -return dev_storage + 282; +return dev_storage + 283; } } @@ -13407,7 +13426,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst112", 11) == 0) { { -return dev_storage + 281; +return dev_storage + 282; } } @@ -13422,7 +13441,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst111", 11) == 0) { { -return dev_storage + 280; +return dev_storage + 281; } } @@ -13437,7 +13456,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst110", 11) == 0) { { -return dev_storage + 279; +return dev_storage + 280; } } @@ -13629,7 +13648,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty109", 11) == 0) { { -return dev_storage + 408; +return dev_storage + 409; } } @@ -13644,7 +13663,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty108", 11) == 0) { { -return dev_storage + 407; +return dev_storage + 408; } } @@ -13659,7 +13678,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty107", 11) == 0) { { -return dev_storage + 406; +return dev_storage + 407; } } @@ -13674,7 +13693,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty106", 11) == 0) { { -return dev_storage + 405; +return dev_storage + 406; } } @@ -13689,7 +13708,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty105", 11) == 0) { { -return dev_storage + 404; +return dev_storage + 405; } } @@ -13704,7 +13723,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty104", 11) == 0) { { -return dev_storage + 403; +return dev_storage + 404; } } @@ -13719,7 +13738,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty103", 11) == 0) { { -return dev_storage + 402; +return dev_storage + 403; } } @@ -13734,7 +13753,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty102", 11) == 0) { { -return dev_storage + 401; +return dev_storage + 402; } } @@ -13749,7 +13768,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty101", 11) == 0) { { -return dev_storage + 400; +return dev_storage + 401; } } @@ -13764,7 +13783,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty100", 11) == 0) { { -return dev_storage + 399; +return dev_storage + 400; } } @@ -13788,7 +13807,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst109", 11) == 0) { { -return dev_storage + 278; +return dev_storage + 279; } } @@ -13803,7 +13822,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst108", 11) == 0) { { -return dev_storage + 277; +return dev_storage + 278; } } @@ -13818,7 +13837,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst107", 11) == 0) { { -return dev_storage + 276; +return dev_storage + 277; } } @@ -13833,7 +13852,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst106", 11) == 0) { { -return dev_storage + 275; +return dev_storage + 276; } } @@ -13848,7 +13867,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst105", 11) == 0) { { -return dev_storage + 274; +return dev_storage + 275; } } @@ -13863,7 +13882,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst104", 11) == 0) { { -return dev_storage + 273; +return dev_storage + 274; } } @@ -13878,7 +13897,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst103", 11) == 0) { { -return dev_storage + 272; +return dev_storage + 273; } } @@ -13893,7 +13912,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst102", 11) == 0) { { -return dev_storage + 271; +return dev_storage + 272; } } @@ -13908,7 +13927,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst101", 11) == 0) { { -return dev_storage + 270; +return dev_storage + 271; } } @@ -13923,7 +13942,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst100", 11) == 0) { { -return dev_storage + 269; +return dev_storage + 270; } } @@ -13959,7 +13978,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/windows", 12) == 0) { { -return dev_storage + 721; +return dev_storage + 722; } } @@ -13974,7 +13993,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/urandom", 12) == 0) { { -return dev_storage + 720; +return dev_storage + 721; } } @@ -14010,7 +14029,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS127", 12) == 0) { { -return dev_storage + 719; +return dev_storage + 720; } } @@ -14025,7 +14044,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS126", 12) == 0) { { -return dev_storage + 718; +return dev_storage + 719; } } @@ -14040,7 +14059,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS125", 12) == 0) { { -return dev_storage + 717; +return dev_storage + 718; } } @@ -14055,7 +14074,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS124", 12) == 0) { { -return dev_storage + 716; +return dev_storage + 717; } } @@ -14070,7 +14089,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS123", 12) == 0) { { -return dev_storage + 715; +return dev_storage + 716; } } @@ -14085,7 +14104,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS122", 12) == 0) { { -return dev_storage + 714; +return dev_storage + 715; } } @@ -14100,7 +14119,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS121", 12) == 0) { { -return dev_storage + 713; +return dev_storage + 714; } } @@ -14115,7 +14134,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS120", 12) == 0) { { -return dev_storage + 712; +return dev_storage + 713; } } @@ -14277,7 +14296,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS119", 12) == 0) { { -return dev_storage + 711; +return dev_storage + 712; } } @@ -14292,7 +14311,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS118", 12) == 0) { { -return dev_storage + 710; +return dev_storage + 711; } } @@ -14307,7 +14326,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS117", 12) == 0) { { -return dev_storage + 709; +return dev_storage + 710; } } @@ -14322,7 +14341,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS116", 12) == 0) { { -return dev_storage + 708; +return dev_storage + 709; } } @@ -14337,7 +14356,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS115", 12) == 0) { { -return dev_storage + 707; +return dev_storage + 708; } } @@ -14352,7 +14371,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS114", 12) == 0) { { -return dev_storage + 706; +return dev_storage + 707; } } @@ -14367,7 +14386,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS113", 12) == 0) { { -return dev_storage + 705; +return dev_storage + 706; } } @@ -14382,7 +14401,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS112", 12) == 0) { { -return dev_storage + 704; +return dev_storage + 705; } } @@ -14397,7 +14416,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS111", 12) == 0) { { -return dev_storage + 703; +return dev_storage + 704; } } @@ -14412,7 +14431,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS110", 12) == 0) { { -return dev_storage + 702; +return dev_storage + 703; } } @@ -14604,7 +14623,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS109", 12) == 0) { { -return dev_storage + 701; +return dev_storage + 702; } } @@ -14619,7 +14638,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS108", 12) == 0) { { -return dev_storage + 700; +return dev_storage + 701; } } @@ -14634,7 +14653,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS107", 12) == 0) { { -return dev_storage + 699; +return dev_storage + 700; } } @@ -14649,7 +14668,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS106", 12) == 0) { { -return dev_storage + 698; +return dev_storage + 699; } } @@ -14664,7 +14683,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS105", 12) == 0) { { -return dev_storage + 697; +return dev_storage + 698; } } @@ -14679,7 +14698,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS104", 12) == 0) { { -return dev_storage + 696; +return dev_storage + 697; } } @@ -14694,7 +14713,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS103", 12) == 0) { { -return dev_storage + 695; +return dev_storage + 696; } } @@ -14709,7 +14728,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS102", 12) == 0) { { -return dev_storage + 694; +return dev_storage + 695; } } @@ -14724,7 +14743,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS101", 12) == 0) { { -return dev_storage + 693; +return dev_storage + 694; } } @@ -14739,7 +14758,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS100", 12) == 0) { { -return dev_storage + 692; +return dev_storage + 693; } } diff --git a/winsup/cygwin/devices.in b/winsup/cygwin/devices.in index 2545dd85e..48d3843fe 100644 --- a/winsup/cygwin/devices.in +++ b/winsup/cygwin/devices.in @@ -115,6 +115,9 @@ const _device dev_cygdrive_storage = const _device dev_fs_storage = {"", {FH_FS}, "", exists}; +const _device dev_dev_disk_storage = + {"", {FH_DEV_DISK}, "", exists}; + const _device dev_proc_storage = {"", {FH_PROC}, "", exists}; @@ -173,6 +176,7 @@ const _device dev_error_storage = the POSIX namespace. */ %% "/dev", BRACK(FH_DEV), "", exists, S_IFDIR +"/dev/disk", BRACK(FH_DEV_DISK), "", exists, S_IFDIR "/dev/tty", BRACK(FH_TTY), "/dev/tty", exists, S_IFCHR "/dev/pty%(0-127)d", BRACK(FHDEV(DEV_PTYS_MAJOR, {$1})), "/dev/pty{$1}", exists_pty, S_IFCHR, =ptys_dev ":ptym%(0-127)d", BRACK(FHDEV(DEV_PTYM_MAJOR, {$1})), "/dev/ptym{$1}", exists_internal, S_IFCHR, =ptym_dev diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc index 21d525389..9508f3e0b 100644 --- a/winsup/cygwin/dtable.cc +++ b/winsup/cygwin/dtable.cc @@ -585,6 +585,9 @@ fh_alloc (path_conv& pc) case FH_DEV: fh = cnew (fhandler_dev); break; + case FH_DEV_DISK: + fh = cnew (fhandler_dev_disk); + break; case FH_DEV_FD: fh = cnew (fhandler_dev_fd); break; diff --git a/winsup/cygwin/fhandler/dev_disk.cc b/winsup/cygwin/fhandler/dev_disk.cc new file mode 100644 index 000000000..9a1cae5eb --- /dev/null +++ b/winsup/cygwin/fhandler/dev_disk.cc @@ -0,0 +1,621 @@ +/* fhandler/dev_disk.cc: fhandler for the /dev/disk/by-id/... symlinks. + +This file is part of Cygwin. + +This software is a copyrighted work licensed under the terms of the +Cygwin license. Please consult the file "CYGWIN_LICENSE" for +details. */ + +#include "winsup.h" +#include "path.h" +#include "fhandler.h" +#include "tls_pbuf.h" +#include +#include +#include + +/* Replace non-printing and unexpected characters, remove trailing spaces, + return remaining string length. */ +static int +sanitize_id_string (char *s) +{ + int lastspace = -1, i; + for (i = 0; s[i]; i++) + { + char c = s[i]; + if (c != ' ') + lastspace = -1; + else if (lastspace < 0) + lastspace = i; + if (('0' <= c && c <= '9') || c == '.' || c == '-' + || ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')) + continue; + s[i] = '_'; + } + if (lastspace >= 0) + s[(i = lastspace)] = '\0'; + return i; +} + +/* Fetch storage properties and create the ID string. + returns: 1: success, 0: device ignored, -1: IoControl error. */ +static int +storprop_to_id_name (HANDLE devhdl, const UNICODE_STRING *upath, + char *ioctl_buf, char (& name)[NAME_MAX + 1]) +{ + DWORD bytes_read; + STORAGE_PROPERTY_QUERY descquery = + { StorageDeviceProperty, PropertyStandardQuery, { 0 } }; + if (!DeviceIoControl (devhdl, IOCTL_STORAGE_QUERY_PROPERTY, + &descquery, sizeof (descquery), + ioctl_buf, NT_MAX_PATH, + &bytes_read, nullptr)) + { + __seterrno_from_win_error (GetLastError ()); + debug_printf ("DeviceIoControl (%S, IOCTL_STORAGE_QUERY_PROPERTY," + " {StorageDeviceProperty}): %E", upath); + return -1; + } + + const STORAGE_DEVICE_DESCRIPTOR *desc = + reinterpret_cast(ioctl_buf); + int vendor_len = 0, product_len = 0, serial_len = 0; + if (desc->VendorIdOffset) + vendor_len = sanitize_id_string (ioctl_buf + desc->VendorIdOffset); + if (desc->ProductIdOffset) + product_len = sanitize_id_string (ioctl_buf + desc->ProductIdOffset); + if (desc->SerialNumberOffset) + serial_len = sanitize_id_string (ioctl_buf + desc->SerialNumberOffset); + + /* Ignore drive if information is empty or too long (should not happen). */ + if (!((vendor_len || product_len) && (20/*bustype*/ + vendor_len + 1 + + product_len + 1 + serial_len + 1 + 34/*hash*/ + 1 + 10/*partN*/ + < (int) sizeof (name)))) + return 0; + + /* Translate bus types. */ + const char *bus; + switch (desc->BusType) + { + case BusTypeAta: bus = "ata-"; break; + case BusTypeFibre: bus = "fibre-"; break; + case BusTypeNvme: bus = "nvme-"; break; + case BusTypeRAID: bus = "raid-"; break; + case BusTypeSas: bus = "sas-"; break; + case BusTypeSata: bus = "sata-"; break; + case BusTypeScsi: bus = "scsi-"; break; + case BusTypeUsb: bus = "usb-"; break; + case BusTypeVirtual: bus = "virtual-"; break; + default: bus = nullptr; break; + } + + /* Create "BUSTYPE-[VENDOR_]PRODUCT[_SERIAL]" string. */ + char * cp = name; + if (bus) + cp = stpcpy (cp, bus); + else + cp += __small_sprintf (cp, "bustype%02_y-", desc->BusType); + + if (vendor_len) + cp = stpcpy (cp, ioctl_buf + desc->VendorIdOffset); + if (product_len) + { + if (vendor_len) + cp = stpcpy (cp, "_"); + cp = stpcpy (cp, ioctl_buf + desc->ProductIdOffset); + } + if (serial_len) + { + cp = stpcpy (cp, "_"); + cp = stpcpy (cp, ioctl_buf + desc->SerialNumberOffset); + } + + /* Add hash if information is too short (e.g. missing serial number). */ + bool add_hash = !(4 <= vendor_len + product_len && 4 <= serial_len); + debug_printf ("%S: bustype: %02_y, add_hash: %d, id: '%s' '%s' '%s' ", + upath, (unsigned) desc->BusType, (int) add_hash, + (vendor_len ? ioctl_buf + desc->VendorIdOffset : ""), + (product_len ? ioctl_buf + desc->ProductIdOffset : ""), + (serial_len ? ioctl_buf + desc->SerialNumberOffset : "")); + if (!add_hash) + return 1; + + /* The call below also returns the STORAGE_DEVICE_DESCRIPTOR used above. + MSDN documentation for STORAGE_DEVICE_UNIQUE_IDENTIFIER says: + "The device descriptor contains IDs that are extracted from non-VPD + inquiry data." This may mean that the serial number (part of + SCSI/SAS VPD data) may not always be provided. Therefore a separate + call to retrieve STORAGE_DEVICE_DESCRIPTOR only is done above. */ + STORAGE_PROPERTY_QUERY idquery = + { StorageDeviceUniqueIdProperty, PropertyStandardQuery, { 0 } }; + if (!DeviceIoControl (devhdl, IOCTL_STORAGE_QUERY_PROPERTY, + &idquery, sizeof (idquery), + ioctl_buf, NT_MAX_PATH, + &bytes_read, nullptr)) + { + __seterrno_from_win_error (GetLastError ()); + debug_printf ("DeviceIoControl (%S, IOCTL_STORAGE_QUERY_PROPERTY," + " {StorageDeviceUniqueIdProperty}): %E", upath); + return -1; + } + + /* Utilize the DUID as defined by MSDN to generate a hash. */ + const STORAGE_DEVICE_UNIQUE_IDENTIFIER *id = + reinterpret_cast(ioctl_buf); + debug_printf ("STORAGE_DEVICE_UNIQUE_IDENTIFIER.Size: %u", id->Size); + + __int128 hash = 0; + for (ULONG i = 0; i < id->Size; i++) + hash = ioctl_buf[i] + (hash << 6) + (hash << 16) - hash; + __small_sprintf (cp, "_%016_Y%016_X", (unsigned long long) (hash >> 64), + (unsigned long long) hash); + return 1; +} + +struct by_id_entry +{ + char name[NAME_MAX + 1]; + u_int8_t drive; + u_int8_t part; +}; + +static int +by_id_compare_name (const void *a, const void *b) +{ + const by_id_entry *ap = reinterpret_cast(a); + const by_id_entry *bp = reinterpret_cast(b); + return strcmp (ap->name, bp->name); +} + +static by_id_entry * +by_id_realloc (by_id_entry *p, size_t n) +{ + void *p2 = realloc (p, n * sizeof (*p)); + if (!p2) + free (p); + return reinterpret_cast(p2); +} + +/* Create sorted name -> drive mapping table. Must be freed by caller. */ +static int +get_by_id_table (by_id_entry * &table) +{ + table = nullptr; + + /* Open \Device object directory. */ + wchar_t wpath[MAX_PATH] = L"\\Device"; + UNICODE_STRING upath = {14, 16, wpath}; + OBJECT_ATTRIBUTES attr; + InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE, nullptr, nullptr); + HANDLE dirhdl; + NTSTATUS status = NtOpenDirectoryObject (&dirhdl, DIRECTORY_QUERY, &attr); + if (!NT_SUCCESS (status)) + { + debug_printf ("NtOpenDirectoryObject, status %y", status); + __seterrno_from_nt_status (status); + return -1; + } + + /* Limit disk and partition numbers like fhandler_dev::readdir (). */ + const unsigned max_drive_num = 127, max_part_num = 63; + + unsigned alloc_size = 0, table_size = 0; + tmp_pathbuf tp; + char *ioctl_buf = tp.c_get (); + DIRECTORY_BASIC_INFORMATION *dbi_buf = + reinterpret_cast(tp.w_get ()); + + /* Traverse \Device directory ... */ + bool errno_set = false; + HANDLE devhdl = nullptr; + BOOLEAN restart = TRUE; + bool last_run = false; + ULONG context = 0; + while (!last_run) + { + if (devhdl) + { + /* Close handle from previous run. */ + NtClose(devhdl); + devhdl = nullptr; + } + + status = NtQueryDirectoryObject (dirhdl, dbi_buf, 65536, FALSE, restart, + &context, nullptr); + if (!NT_SUCCESS (status)) + { + __seterrno_from_nt_status (status); + errno_set = true; + debug_printf ("NtQueryDirectoryObject, status %y", status); + break; + } + if (status != STATUS_MORE_ENTRIES) + last_run = true; + restart = FALSE; + for (const DIRECTORY_BASIC_INFORMATION *dbi = dbi_buf; + dbi->ObjectName.Length > 0; + dbi++) + { + /* ... and check for a "Harddisk[0-9]*" entry. */ + if (dbi->ObjectName.Length < 9 * sizeof (WCHAR) + || wcsncasecmp (dbi->ObjectName.Buffer, L"Harddisk", 8) != 0 + || !iswdigit (dbi->ObjectName.Buffer[8])) + continue; + /* Got it. Now construct the path to the entire disk, which is + "\\Device\\HarddiskX\\Partition0", and open the disk with + minimum permissions. */ + unsigned long drive_num = wcstoul (dbi->ObjectName.Buffer + 8, + nullptr, 10); + if (drive_num > max_drive_num) + continue; + wcscpy (wpath, dbi->ObjectName.Buffer); + PWCHAR wpart = wpath + dbi->ObjectName.Length / sizeof (WCHAR); + wcpcpy (wpart, L"\\Partition0"); + upath.Length = dbi->ObjectName.Length + 22; + upath.MaximumLength = upath.Length + sizeof (WCHAR); + InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE, + dirhdl, nullptr); + /* SYNCHRONIZE access is required for IOCTL_STORAGE_QUERY_PROPERTY + for drives behind some drivers (nvmestor.sys). */ + IO_STATUS_BLOCK io; + status = NtOpenFile (&devhdl, READ_CONTROL | SYNCHRONIZE, &attr, &io, + FILE_SHARE_VALID_FLAGS, 0); + if (!NT_SUCCESS (status)) + { + devhdl = nullptr; + __seterrno_from_nt_status (status); + errno_set = true; + debug_printf ("NtOpenFile(%S), status %y", &upath, status); + continue; + } + + /* Add table space for drive, partitions and end marker. */ + if (alloc_size <= table_size + max_part_num) + { + alloc_size = table_size + max_part_num + 8; + table = by_id_realloc (table, alloc_size); + if (!table) + { + NtClose (devhdl); + NtClose (dirhdl); + return -1; + } + } + + /* Fetch storage properties and create the ID string. */ + int rc = storprop_to_id_name (devhdl, &upath, ioctl_buf, + table[table_size].name); + if (rc <= 0) + { + if (rc < 0) + errno_set = true; + continue; + } + int drive_index = table_size++; + size_t drive_len = strlen(table[drive_index].name); + table[drive_index].drive = drive_num; + table[drive_index].part = 0; + + /* Fetch drive layout info to get size of all partitions on disk. */ + DWORD bytes_read; + if (!DeviceIoControl (devhdl, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, nullptr, 0, + ioctl_buf, NT_MAX_PATH, &bytes_read, nullptr)) + { + debug_printf ("DeviceIoControl(%S, " + "IOCTL_DISK_GET_DRIVE_LAYOUT_EX): %E", &upath); + continue; + } + + /* Loop over partitions. */ + const DRIVE_LAYOUT_INFORMATION_EX *dlix = + reinterpret_cast(ioctl_buf); + for (DWORD i = 0; i < dlix->PartitionCount; i++) + { + DWORD part_num = dlix->PartitionEntry[i].PartitionNumber; + /* A partition number of 0 denotes an extended partition or a + filler entry as described in + fhandler_dev_floppy::lock_partition. Just skip. */ + if (part_num == 0) + continue; + if (part_num > max_part_num) + break; + table[table_size] = table[drive_index]; + __small_sprintf(table[table_size].name + drive_len, "-part%u", + part_num); + table[table_size].part = part_num; + table_size++; + } + } + } + if (devhdl) + NtClose(devhdl); + NtClose (dirhdl); + + if (!table_size && table) + { + free (table); + table = nullptr; + } + if (!table) + return (errno_set ? -1 : 0); + + /* Sort by name and remove duplicates. */ + qsort (table, table_size, sizeof (*table), by_id_compare_name); + for (unsigned i = 0; i < table_size; i++) + { + unsigned j = i + 1; + while (j < table_size && !strcmp (table[i].name, table[j].name)) + j++; + if (j == i + 1) + continue; + /* Duplicate(s) found, remove all entries with this name. */ + debug_printf ("removing duplicates %d-%d: '%s'", i, j - 1, table[i].name); + if (j < table_size) + memmove (table + i, table + j, (table_size - j) * sizeof (*table)); + table_size -= j - i; + i--; + } + + debug_printf ("table_size: %d", table_size); + return table_size; +} + +const char dev_disk[] = "/dev/disk"; +const size_t dev_disk_len = sizeof (dev_disk) - 1; + +fhandler_dev_disk::fhandler_dev_disk (): + fhandler_virtual (), + loc (unknown_loc), + drive_from_id (-1), + part_from_id (0) +{ +} + +void +fhandler_dev_disk::init_dev_disk () +{ + if (loc != unknown_loc) + return; + + static const char by_id[] = "/by-id"; + const size_t by_id_len = sizeof(by_id) - 1; + + /* Determine location. */ + const char *path = get_name (); + if (!path_prefix_p (dev_disk, path, dev_disk_len, false)) + loc = invalid_loc; // should not happen + else if (!path[dev_disk_len]) + loc = disk_dir; // "/dev/disk" + else if (!path_prefix_p (by_id, path + dev_disk_len, by_id_len, false)) + loc = invalid_loc; // "/dev/disk/invalid" + else if (!path[dev_disk_len + by_id_len]) + loc = by_id_dir; // "/dev/disk/by-id" + else if (strchr (path + dev_disk_len + by_id_len + 1, '/')) + loc = invalid_loc; // "/dev/disk/by-id/dir/invalid" + else + loc = by_id_link; // possible "/dev/disk/by-id/LINK" + debug_printf ("'%s': loc %d", path, (int)loc); + + /* Done if "/dev/disk", "/dev/disk/by_id" or invalid. */ + if (loc != by_id_link) + return; + + /* Check whether "/dev/disk/by_id/LINK" exists. */ + by_id_entry *table; + int table_size = get_by_id_table (table); + if (!table) + { + loc = invalid_loc; + return; + } + + by_id_entry key; + strcpy (key.name, path + dev_disk_len + by_id_len + 1); + const void *found = bsearch (&key, table, table_size, sizeof (*table), + by_id_compare_name); + if (found) + { + /* Preserve drive and partition numbers for fillbuf (). */ + const by_id_entry *e = reinterpret_cast(found); + drive_from_id = e->drive; + part_from_id = e->part; + } + else + loc = invalid_loc; + free (table); +} + +virtual_ftype_t +fhandler_dev_disk::exists () +{ + debug_printf ("exists (%s)", get_name ()); + ensure_inited (); + switch (loc) + { + case disk_dir: + case by_id_dir: + return virt_directory; + case by_id_link: + return virt_symlink; + default: + return virt_none; + } +} + +int +fhandler_dev_disk::fstat (struct stat *buf) +{ + debug_printf ("fstat (%s)", get_name ()); + ensure_inited (); + if (loc == invalid_loc) + { + set_errno (ENOENT); + return -1; + } + + fhandler_base::fstat (buf); + buf->st_mode = (loc == by_id_link ? S_IFLNK | S_IWUSR | S_IWGRP | S_IWOTH + : S_IFDIR) | STD_RBITS | STD_XBITS; + buf->st_ino = get_ino (); + return 0; +} + +static inline by_id_entry ** +dir_id_table (DIR *dir) +{ + return reinterpret_cast(&dir->__d_internal); +} + +DIR * +fhandler_dev_disk::opendir (int fd) +{ + ensure_inited (); + if (!(loc == disk_dir || loc == by_id_dir)) + { + set_errno (ENOTDIR); + return nullptr; + } + + by_id_entry *table = nullptr; + if (loc == by_id_dir) + { + int table_size = get_by_id_table (table); + if (table_size < 0) + return nullptr; /* errno is set. */ + if (table) + { + /* Shrink to required table_size. */ + table = by_id_realloc (table, table_size + 1); + if (!table) + return nullptr; /* Should not happen. */ + /* Mark end of table for readdir (). */ + table[table_size].name[0] = '\0'; + } + } + + DIR *dir = fhandler_virtual::opendir (fd); + if (!dir) + { + free (table); + return nullptr; + } + dir->__flags = dirent_saw_dot | dirent_saw_dot_dot; + *dir_id_table (dir) = table; + return dir; +} + +int +fhandler_dev_disk::closedir (DIR *dir) +{ + free (*dir_id_table (dir)); + return fhandler_virtual::closedir (dir); +} + +int +fhandler_dev_disk::readdir (DIR *dir, dirent *de) +{ + int res; + if (dir->__d_position < 2) + { + de->d_name[0] = '.'; + de->d_name[1] = (dir->__d_position ? '.' : '\0'); + de->d_name[2] = '\0'; + de->d_type = DT_DIR; + dir->__d_position++; + res = 0; + } + else if (loc == disk_dir && dir->__d_position == 2) + { + strcpy (de->d_name, "by-id"); + de->d_type = DT_DIR; + dir->__d_position++; + res = 0; + } + else if (loc == by_id_dir && *dir_id_table (dir)) + { + const char *name = (*dir_id_table (dir))[dir->__d_position - 2].name; + if (name[0]) + { + strcpy (de->d_name, name); + de->d_type = DT_LNK; + dir->__d_position++; + res = 0; + } + else + res = ENMFILE; + } + else + res = ENMFILE; + + syscall_printf ("%d = readdir(%p, %p) (%s)", res, dir, de, + (!res ? de->d_name : "")); + return res; +} + +int +fhandler_dev_disk::open (int flags, mode_t mode) +{ + ensure_inited (); + int err = 0; + if (!fhandler_virtual::open (flags, mode)) + err = -1; + else if (loc == disk_dir || loc == by_id_dir) + { + if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL)) + err = EEXIST; + else if (flags & O_WRONLY) + err = EISDIR; + else + diropen = true; + } + /* else if (loc == by_id_link) { } */ /* should not happen */ + else /* (loc == invalid_loc) */ + { + if (flags & O_CREAT) + err = EROFS; + else + err = ENOENT; + } + + int res; + if (!err) + { + nohandle (true); + set_open_status (); + res = 1; + } + else + { + if (err > 0) + set_errno (err); + res = 0; + } + + syscall_printf ("%d = fhandler_dev_disk::open(%y, 0%o)", res, flags, mode); + return res; +} + +bool +fhandler_dev_disk::fill_filebuf () +{ + debug_printf ("fill_filebuf (%s)", get_name ()); + ensure_inited (); + if (!(loc == by_id_link && drive_from_id >= 0)) + return false; + + char buf[32]; + int len; + if (drive_from_id + 'a' <= 'z') + len = __small_sprintf (buf, "../../sd%c", drive_from_id + 'a'); + else + len = __small_sprintf (buf, "../../sd%c%c", + drive_from_id / ('z' - 'a' + 1) - 1 + 'a', + drive_from_id % ('z' - 'a' + 1) + 'a'); + if (part_from_id) + __small_sprintf (buf + len, "%d", part_from_id); + + if (filebuf) + cfree (filebuf); + filebuf = cstrdup (buf); + return true; +} diff --git a/winsup/cygwin/local_includes/devices.h b/winsup/cygwin/local_includes/devices.h index 10035263d..1e035f9d6 100644 --- a/winsup/cygwin/local_includes/devices.h +++ b/winsup/cygwin/local_includes/devices.h @@ -71,6 +71,7 @@ enum fh_devices FH_DEV = FHDEV (DEV_VIRTFS_MAJOR, 193), FH_CYGDRIVE= FHDEV (DEV_VIRTFS_MAJOR, 192), FH_DEV_FD = FHDEV (DEV_VIRTFS_MAJOR, 191), + FH_DEV_DISK= FHDEV (DEV_VIRTFS_MAJOR, 190), FH_SIGNALFD= FHDEV (DEV_VIRTFS_MAJOR, 13), FH_TIMERFD = FHDEV (DEV_VIRTFS_MAJOR, 14), @@ -415,6 +416,8 @@ extern const _device dev_piper_storage; #define piper_dev ((device *) &dev_piper_storage) extern const _device dev_pipew_storage; #define pipew_dev ((device *) &dev_pipew_storage) +extern const _device dev_dev_disk_storage; +#define dev_disk_dev ((device *) &dev_dev_disk_storage) extern const _device dev_proc_storage; #define proc_dev ((device *) &dev_proc_storage) extern const _device dev_dev_storage; @@ -439,7 +442,8 @@ extern const _device dev_fs_storage; #define isprocsys_dev(devn) (devn == FH_PROCSYS) #define isvirtual_dev(devn) \ - (isproc_dev (devn) || devn == FH_CYGDRIVE || devn == FH_NETDRIVE || devn == FH_DEV_FD) + (isproc_dev (devn) || devn == FH_CYGDRIVE || devn == FH_NETDRIVE \ + || devn == FH_DEV_FD || devn == FH_DEV_DISK) #define iscons_dev(n) \ ((device::major ((dev_t) (n)) == DEV_CONS_MAJOR) \ diff --git a/winsup/cygwin/local_includes/fhandler.h b/winsup/cygwin/local_includes/fhandler.h index 212c22344..cd61aadf8 100644 --- a/winsup/cygwin/local_includes/fhandler.h +++ b/winsup/cygwin/local_includes/fhandler.h @@ -40,6 +40,8 @@ details. */ extern const char *windows_device_names[]; extern struct __cygwin_perfile *perfile_table; #define __fmode (*(user_data->fmode_ptr)) +extern const char dev_disk[]; +extern const size_t dev_disk_len; extern const char proc[]; extern const size_t proc_len; extern const char procsys[]; @@ -3190,6 +3192,50 @@ class fhandler_procnet: public fhandler_proc } }; +class fhandler_dev_disk: public fhandler_virtual +{ + enum dev_disk_location { + unknown_loc, invalid_loc, disk_dir, by_id_dir, by_id_link + }; + dev_disk_location loc; + + void init_dev_disk (); + void ensure_inited () + { + if (loc == unknown_loc) + init_dev_disk (); + } + + int drive_from_id; + int part_from_id; + + public: + fhandler_dev_disk (); + fhandler_dev_disk (void *) {} + virtual_ftype_t exists(); + DIR *opendir (int fd); + int closedir (DIR *); + int readdir (DIR *, dirent *); + int open (int flags, mode_t mode = 0); + int fstat (struct stat *buf); + bool fill_filebuf (); + + void copy_from (fhandler_base *x) + { + pc.free_strings (); + *this = *reinterpret_cast (x); + _copy_from_reset_helper (); + } + + fhandler_dev_disk *clone (cygheap_types malloc_type = HEAP_FHANDLER) + { + void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_dev_disk)); + fhandler_dev_disk *fh = new (ptr) fhandler_dev_disk (ptr); + fh->copy_from (this); + return fh; + } +}; + class fhandler_dev_fd: public fhandler_virtual { public: @@ -3416,6 +3462,7 @@ typedef union char __dev_raw[sizeof (fhandler_dev_raw)]; char __dev_tape[sizeof (fhandler_dev_tape)]; char __dev_zero[sizeof (fhandler_dev_zero)]; + char __dev_disk[sizeof (fhandler_dev_disk)]; char __dev_fd[sizeof (fhandler_dev_fd)]; char __disk_file[sizeof (fhandler_disk_file)]; char __fifo[sizeof (fhandler_fifo)]; diff --git a/winsup/cygwin/mount.cc b/winsup/cygwin/mount.cc index 36ab042a7..13ace6250 100644 --- a/winsup/cygwin/mount.cc +++ b/winsup/cygwin/mount.cc @@ -35,6 +35,9 @@ details. */ (path[mount_table->cygdrive_len + 1] == '/' || \ !path[mount_table->cygdrive_len + 1])) +#define isdev_disk(path) \ + (path_prefix_p (dev_disk, (path), dev_disk_len, false)) + #define isproc(path) \ (path_prefix_p (proc, (path), proc_len, false)) @@ -685,6 +688,13 @@ mount_info::conv_to_win32_path (const char *src_path, char *dst, device& dev, /* Go through chroot check */ goto out; } + if (isdev_disk (src_path)) + { + dev = *dev_disk_dev; + *flags = 0; + strcpy (dst, src_path); + goto out; + } if (isproc (src_path)) { dev = *proc_dev;