authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-02-12 21:49:09-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-02-12 21:49:09-07:00
logae107cf71bd7bb79ed25ce76999b70936ee2a5ec
tree92577fc8bb76b736d28f7e1bfe08482ee379f9af
parenta280ff2767cbb8da1a10d70eaddb0d6c0730443f

std.os.speed_t: add type safety

and collect the missing flag bits from all the operating systems.

4 files changed, 341 insertions(+), 107 deletions(-)

lib/std/c.zig+271-9
......@@ -1287,15 +1287,277 @@ pub const tc_lflag_t = switch (native_os) {
12871287
12881288pub const speed_t = switch (native_os) {
12891289 .linux => std.os.linux.speed_t,
1290 .macos, .ios, .tvos, .watchos => u64,
1291 .freebsd, .kfreebsd => c_uint,
1292 .netbsd => c_uint,
1293 .dragonfly => c_uint,
1294 .openbsd => c_uint,
1295 .haiku => u8,
1296 .solaris, .illumos => c_uint,
1297 .emscripten => u32,
1298 .wasi => c_uint,
1290 .macos, .ios, .tvos, .watchos => enum(u64) {
1291 B0 = 0,
1292 B50 = 50,
1293 B75 = 75,
1294 B110 = 110,
1295 B134 = 134,
1296 B150 = 150,
1297 B200 = 200,
1298 B300 = 300,
1299 B600 = 600,
1300 B1200 = 1200,
1301 B1800 = 1800,
1302 B2400 = 2400,
1303 B4800 = 4800,
1304 B9600 = 9600,
1305 B19200 = 19200,
1306 B38400 = 38400,
1307 B7200 = 7200,
1308 B14400 = 14400,
1309 B28800 = 28800,
1310 B57600 = 57600,
1311 B76800 = 76800,
1312 B115200 = 115200,
1313 B230400 = 230400,
1314 },
1315 .freebsd, .kfreebsd => enum(c_uint) {
1316 B0 = 0,
1317 B50 = 50,
1318 B75 = 75,
1319 B110 = 110,
1320 B134 = 134,
1321 B150 = 150,
1322 B200 = 200,
1323 B300 = 300,
1324 B600 = 600,
1325 B1200 = 1200,
1326 B1800 = 1800,
1327 B2400 = 2400,
1328 B4800 = 4800,
1329 B9600 = 9600,
1330 B19200 = 19200,
1331 B38400 = 38400,
1332 B7200 = 7200,
1333 B14400 = 14400,
1334 B28800 = 28800,
1335 B57600 = 57600,
1336 B76800 = 76800,
1337 B115200 = 115200,
1338 B230400 = 230400,
1339 B460800 = 460800,
1340 B500000 = 500000,
1341 B921600 = 921600,
1342 B1000000 = 1000000,
1343 B1500000 = 1500000,
1344 B2000000 = 2000000,
1345 B2500000 = 2500000,
1346 B3000000 = 3000000,
1347 B3500000 = 3500000,
1348 B4000000 = 4000000,
1349 },
1350 .netbsd => enum(c_uint) {
1351 B0 = 0,
1352 B50 = 50,
1353 B75 = 75,
1354 B110 = 110,
1355 B134 = 134,
1356 B150 = 150,
1357 B200 = 200,
1358 B300 = 300,
1359 B600 = 600,
1360 B1200 = 1200,
1361 B1800 = 1800,
1362 B2400 = 2400,
1363 B4800 = 4800,
1364 B9600 = 9600,
1365 B19200 = 19200,
1366 B38400 = 38400,
1367 B7200 = 7200,
1368 B14400 = 14400,
1369 B28800 = 28800,
1370 B57600 = 57600,
1371 B76800 = 76800,
1372 B115200 = 115200,
1373 B230400 = 230400,
1374 B460800 = 460800,
1375 B500000 = 500000,
1376 B921600 = 921600,
1377 B1000000 = 1000000,
1378 B1500000 = 1500000,
1379 B2000000 = 2000000,
1380 B2500000 = 2500000,
1381 B3000000 = 3000000,
1382 B3500000 = 3500000,
1383 B4000000 = 4000000,
1384 },
1385 .dragonfly => enum(c_uint) {
1386 B0 = 0,
1387 B50 = 50,
1388 B75 = 75,
1389 B110 = 110,
1390 B134 = 134,
1391 B150 = 150,
1392 B200 = 200,
1393 B300 = 300,
1394 B600 = 600,
1395 B1200 = 1200,
1396 B1800 = 1800,
1397 B2400 = 2400,
1398 B4800 = 4800,
1399 B9600 = 9600,
1400 B19200 = 19200,
1401 B38400 = 38400,
1402 B7200 = 7200,
1403 B14400 = 14400,
1404 B28800 = 28800,
1405 B57600 = 57600,
1406 B76800 = 76800,
1407 B115200 = 115200,
1408 B230400 = 230400,
1409 B460800 = 460800,
1410 B921600 = 921600,
1411 },
1412 .openbsd => enum(c_uint) {
1413 B0 = 0,
1414 B50 = 50,
1415 B75 = 75,
1416 B110 = 110,
1417 B134 = 134,
1418 B150 = 150,
1419 B200 = 200,
1420 B300 = 300,
1421 B600 = 600,
1422 B1200 = 1200,
1423 B1800 = 1800,
1424 B2400 = 2400,
1425 B4800 = 4800,
1426 B9600 = 9600,
1427 B19200 = 19200,
1428 B38400 = 38400,
1429 B7200 = 7200,
1430 B14400 = 14400,
1431 B28800 = 28800,
1432 B57600 = 57600,
1433 B76800 = 76800,
1434 B115200 = 115200,
1435 B230400 = 230400,
1436 },
1437 .haiku => enum(u8) {
1438 B0 = 0x00,
1439 B50 = 0x01,
1440 B75 = 0x02,
1441 B110 = 0x03,
1442 B134 = 0x04,
1443 B150 = 0x05,
1444 B200 = 0x06,
1445 B300 = 0x07,
1446 B600 = 0x08,
1447 B1200 = 0x09,
1448 B1800 = 0x0A,
1449 B2400 = 0x0B,
1450 B4800 = 0x0C,
1451 B9600 = 0x0D,
1452 B19200 = 0x0E,
1453 B38400 = 0x0F,
1454 B57600 = 0x10,
1455 B115200 = 0x11,
1456 B230400 = 0x12,
1457 B31250 = 0x13,
1458 },
1459 .solaris, .illumos => enum(c_uint) {
1460 B0 = 0,
1461 B50 = 1,
1462 B75 = 2,
1463 B110 = 3,
1464 B134 = 4,
1465 B150 = 5,
1466 B200 = 6,
1467 B300 = 7,
1468 B600 = 8,
1469 B1200 = 9,
1470 B1800 = 10,
1471 B2400 = 11,
1472 B4800 = 12,
1473 B9600 = 13,
1474 B19200 = 14,
1475 B38400 = 15,
1476 B57600 = 16,
1477 B76800 = 17,
1478 B115200 = 18,
1479 B153600 = 19,
1480 B230400 = 20,
1481 B307200 = 21,
1482 B460800 = 22,
1483 B921600 = 23,
1484 B1000000 = 24,
1485 B1152000 = 25,
1486 B1500000 = 26,
1487 B2000000 = 27,
1488 B2500000 = 28,
1489 B3000000 = 29,
1490 B3500000 = 30,
1491 B4000000 = 31,
1492 },
1493 .emscripten => enum(u32) {
1494 B0 = 0o0000000,
1495 B50 = 0o0000001,
1496 B75 = 0o0000002,
1497 B110 = 0o0000003,
1498 B134 = 0o0000004,
1499 B150 = 0o0000005,
1500 B200 = 0o0000006,
1501 B300 = 0o0000007,
1502 B600 = 0o0000010,
1503 B1200 = 0o0000011,
1504 B1800 = 0o0000012,
1505 B2400 = 0o0000013,
1506 B4800 = 0o0000014,
1507 B9600 = 0o0000015,
1508 B19200 = 0o0000016,
1509 B38400 = 0o0000017,
1510
1511 B57600 = 0o0010001,
1512 B115200 = 0o0010002,
1513 B230400 = 0o0010003,
1514 B460800 = 0o0010004,
1515 B500000 = 0o0010005,
1516 B576000 = 0o0010006,
1517 B921600 = 0o0010007,
1518 B1000000 = 0o0010010,
1519 B1152000 = 0o0010011,
1520 B1500000 = 0o0010012,
1521 B2000000 = 0o0010013,
1522 B2500000 = 0o0010014,
1523 B3000000 = 0o0010015,
1524 B3500000 = 0o0010016,
1525 B4000000 = 0o0010017,
1526 },
1527 .wasi => enum(u32) {
1528 B0 = 0o0000000,
1529 B50 = 0o0000001,
1530 B75 = 0o0000002,
1531 B110 = 0o0000003,
1532 B134 = 0o0000004,
1533 B150 = 0o0000005,
1534 B200 = 0o0000006,
1535 B300 = 0o0000007,
1536 B600 = 0o0000010,
1537 B1200 = 0o0000011,
1538 B1800 = 0o0000012,
1539 B2400 = 0o0000013,
1540 B4800 = 0o0000014,
1541 B9600 = 0o0000015,
1542 B19200 = 0o0000016,
1543 B38400 = 0o0000017,
1544
1545 B57600 = 0o0010001,
1546 B115200 = 0o0010002,
1547 B230400 = 0o0010003,
1548 B460800 = 0o0010004,
1549 B500000 = 0o0010005,
1550 B576000 = 0o0010006,
1551 B921600 = 0o0010007,
1552 B1000000 = 0o0010010,
1553 B1152000 = 0o0010011,
1554 B1500000 = 0o0010012,
1555 B2000000 = 0o0010013,
1556 B2500000 = 0o0010014,
1557 B3000000 = 0o0010015,
1558 B3500000 = 0o0010016,
1559 B4000000 = 0o0010017,
1560 },
12991561 else => @compileError("target libc does not have speed_t"),
13001562};
13011563
lib/std/c/netbsd.zig-37
......@@ -814,43 +814,6 @@ pub const TCSA = struct {
814814 pub const SOFT = 0x10; // flag - don't alter h.w. state
815815};
816816
817// Standard speeds
818pub const B0: c_uint = 0;
819pub const B50: c_uint = 50;
820pub const B75: c_uint = 75;
821pub const B110: c_uint = 110;
822pub const B134: c_uint = 134;
823pub const B150: c_uint = 150;
824pub const B200: c_uint = 200;
825pub const B300: c_uint = 300;
826pub const B600: c_uint = 600;
827pub const B1200: c_uint = 1200;
828pub const B1800: c_uint = 1800;
829pub const B2400: c_uint = 2400;
830pub const B4800: c_uint = 4800;
831pub const B9600: c_uint = 9600;
832pub const B19200: c_uint = 19200;
833pub const B38400: c_uint = 38400;
834pub const B7200: c_uint = 7200;
835pub const B14400: c_uint = 14400;
836pub const B28800: c_uint = 28800;
837pub const B57600: c_uint = 57600;
838pub const B76800: c_uint = 76800;
839pub const B115200: c_uint = 115200;
840pub const B230400: c_uint = 230400;
841pub const B460800: c_uint = 460800;
842pub const B500000: c_uint = 500000;
843pub const B921600: c_uint = 921600;
844pub const B1000000: c_uint = 1000000;
845pub const B1500000: c_uint = 1500000;
846pub const B2000000: c_uint = 2000000;
847pub const B2500000: c_uint = 2500000;
848pub const B3000000: c_uint = 3000000;
849pub const B3500000: c_uint = 3500000;
850pub const B4000000: c_uint = 4000000;
851pub const EXTA: c_uint = 19200;
852pub const EXTB: c_uint = 38400;
853
854817pub const TCIFLUSH = 1;
855818pub const TCOFLUSH = 2;
856819pub const TCIOFLUSH = 3;
lib/std/c/openbsd.zig-27
......@@ -776,33 +776,6 @@ pub const TCSA = struct {
776776 pub const SOFT = 0x10; // flag - don't alter h.w. state
777777};
778778
779// Standard speeds
780pub const B0 = 0;
781pub const B50 = 50;
782pub const B75 = 75;
783pub const B110 = 110;
784pub const B134 = 134;
785pub const B150 = 150;
786pub const B200 = 200;
787pub const B300 = 300;
788pub const B600 = 600;
789pub const B1200 = 1200;
790pub const B1800 = 1800;
791pub const B2400 = 2400;
792pub const B4800 = 4800;
793pub const B9600 = 9600;
794pub const B19200 = 19200;
795pub const B38400 = 38400;
796pub const B7200 = 7200;
797pub const B14400 = 14400;
798pub const B28800 = 28800;
799pub const B57600 = 57600;
800pub const B76800 = 76800;
801pub const B115200 = 115200;
802pub const B230400 = 230400;
803pub const EXTA = 19200;
804pub const EXTB = 38400;
805
806779pub const TCIFLUSH = 1;
807780pub const TCOFLUSH = 2;
808781pub const TCIOFLUSH = 3;
lib/std/os/linux.zig+70-34
......@@ -5004,45 +5004,81 @@ pub const rusage = extern struct {
50045004 pub const THREAD = 1;
50055005};
50065006
5007pub const speed_t = u32;
5008
50095007pub const NCCS = switch (native_arch) {
50105008 .powerpc, .powerpcle, .powerpc64, .powerpc64le => 19,
50115009 else => 32,
50125010};
50135011
5014pub const B0 = 0o0000000;
5015pub const B50 = 0o0000001;
5016pub const B75 = 0o0000002;
5017pub const B110 = 0o0000003;
5018pub const B134 = 0o0000004;
5019pub const B150 = 0o0000005;
5020pub const B200 = 0o0000006;
5021pub const B300 = 0o0000007;
5022pub const B600 = 0o0000010;
5023pub const B1200 = 0o0000011;
5024pub const B1800 = 0o0000012;
5025pub const B2400 = 0o0000013;
5026pub const B4800 = 0o0000014;
5027pub const B9600 = 0o0000015;
5028pub const B19200 = 0o0000016;
5029pub const B38400 = 0o0000017;
5030pub const BOTHER = 0o0010000;
5031pub const B57600 = 0o0010001;
5032pub const B115200 = 0o0010002;
5033pub const B230400 = 0o0010003;
5034pub const B460800 = 0o0010004;
5035pub const B500000 = 0o0010005;
5036pub const B576000 = 0o0010006;
5037pub const B921600 = 0o0010007;
5038pub const B1000000 = 0o0010010;
5039pub const B1152000 = 0o0010011;
5040pub const B1500000 = 0o0010012;
5041pub const B2000000 = 0o0010013;
5042pub const B2500000 = 0o0010014;
5043pub const B3000000 = 0o0010015;
5044pub const B3500000 = 0o0010016;
5045pub const B4000000 = 0o0010017;
5012pub const speed_t = switch (native_arch) {
5013 .powerpc, .powerpcle, .powerpc64, .powerpc64le => enum(u32) {
5014 B0 = 0o0000000,
5015 B50 = 0o0000001,
5016 B75 = 0o0000002,
5017 B110 = 0o0000003,
5018 B134 = 0o0000004,
5019 B150 = 0o0000005,
5020 B200 = 0o0000006,
5021 B300 = 0o0000007,
5022 B600 = 0o0000010,
5023 B1200 = 0o0000011,
5024 B1800 = 0o0000012,
5025 B2400 = 0o0000013,
5026 B4800 = 0o0000014,
5027 B9600 = 0o0000015,
5028 B19200 = 0o0000016,
5029 B38400 = 0o0000017,
5030
5031 B57600 = 0o00020,
5032 B115200 = 0o00021,
5033 B230400 = 0o00022,
5034 B460800 = 0o00023,
5035 B500000 = 0o00024,
5036 B576000 = 0o00025,
5037 B921600 = 0o00026,
5038 B1000000 = 0o00027,
5039 B1152000 = 0o00030,
5040 B1500000 = 0o00031,
5041 B2000000 = 0o00032,
5042 B2500000 = 0o00033,
5043 B3000000 = 0o00034,
5044 B3500000 = 0o00035,
5045 B4000000 = 0o00036,
5046 },
5047 else => enum(u32) {
5048 B0 = 0o0000000,
5049 B50 = 0o0000001,
5050 B75 = 0o0000002,
5051 B110 = 0o0000003,
5052 B134 = 0o0000004,
5053 B150 = 0o0000005,
5054 B200 = 0o0000006,
5055 B300 = 0o0000007,
5056 B600 = 0o0000010,
5057 B1200 = 0o0000011,
5058 B1800 = 0o0000012,
5059 B2400 = 0o0000013,
5060 B4800 = 0o0000014,
5061 B9600 = 0o0000015,
5062 B19200 = 0o0000016,
5063 B38400 = 0o0000017,
5064
5065 B57600 = 0o0010001,
5066 B115200 = 0o0010002,
5067 B230400 = 0o0010003,
5068 B460800 = 0o0010004,
5069 B500000 = 0o0010005,
5070 B576000 = 0o0010006,
5071 B921600 = 0o0010007,
5072 B1000000 = 0o0010010,
5073 B1152000 = 0o0010011,
5074 B1500000 = 0o0010012,
5075 B2000000 = 0o0010013,
5076 B2500000 = 0o0010014,
5077 B3000000 = 0o0010015,
5078 B3500000 = 0o0010016,
5079 B4000000 = 0o0010017,
5080 },
5081};
50465082
50475083pub const tc_iflag_t = switch (native_arch) {
50485084 .powerpc, .powerpcle, .powerpc64, .powerpc64le => packed struct(u32) {