@zigc/lib 0.15.0-dev.0 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -5
- package/build-web/fuzz.zig +6 -6
- package/build-web/time_report.zig +13 -14
- package/compiler/reduce/Walk.zig +9 -10
- package/compiler/reduce.zig +20 -19
- package/compiler/resinator/compile.zig +1 -1
- package/compiler_rt/arm.zig +1 -1
- package/init/build.zig +1 -1
- package/libc/freebsd/lib/csu/aarch64/crt.h +1 -0
- package/libc/freebsd/lib/csu/aarch64/crt1_c.c +33 -0
- package/libc/freebsd/lib/csu/aarch64/crt1_s.S +68 -0
- package/libc/freebsd/lib/csu/amd64/crt.h +30 -0
- package/libc/freebsd/lib/csu/amd64/crt1_c.c +30 -0
- package/libc/freebsd/lib/csu/amd64/crt1_s.S +89 -0
- package/libc/freebsd/lib/csu/arm/crt.h +1 -0
- package/libc/freebsd/lib/csu/arm/crt1_c.c +80 -0
- package/libc/freebsd/lib/csu/arm/crt1_s.S +77 -0
- package/libc/freebsd/lib/csu/common/crtbegin.c +95 -0
- package/libc/freebsd/lib/csu/common/crtbrand.S +55 -0
- package/libc/freebsd/lib/csu/common/crtend.c +65 -0
- package/libc/freebsd/lib/csu/common/csu_common.h +50 -0
- package/libc/freebsd/lib/csu/common/feature_note.S +47 -0
- package/libc/freebsd/lib/csu/common/ignore_init_note.S +48 -0
- package/libc/freebsd/lib/csu/common/notes.h +32 -0
- package/libc/freebsd/lib/csu/i386/crt.h +30 -0
- package/libc/freebsd/lib/csu/i386/crt1_c.c +30 -0
- package/libc/freebsd/lib/csu/i386/crt1_s.S +91 -0
- package/libc/freebsd/lib/csu/powerpc/crt.h +31 -0
- package/libc/freebsd/lib/csu/powerpc/crt1_c.c +89 -0
- package/libc/freebsd/lib/csu/powerpc/crtsavres.S +189 -0
- package/libc/freebsd/lib/csu/powerpc64/crt.h +31 -0
- package/libc/freebsd/lib/csu/powerpc64/crt1_c.c +83 -0
- package/libc/freebsd/lib/csu/riscv/crt.h +8 -0
- package/libc/freebsd/lib/csu/riscv/crt1_c.c +51 -0
- package/libc/freebsd/lib/csu/riscv/crt1_s.S +51 -0
- package/libc/freebsd/lib/libc/include/libc_private.h +450 -0
- package/libc/include/generic-glibc/arpa/inet.h +0 -3
- package/libc/netbsd/lib/csu/arch/aarch64/crt0.S +45 -0
- package/libc/netbsd/lib/csu/arch/earm/crt0.S +61 -0
- package/libc/netbsd/lib/csu/arch/i386/crt0.S +48 -0
- package/libc/netbsd/lib/csu/arch/m68k/crt0.S +47 -0
- package/libc/netbsd/lib/csu/arch/mips/crt0.S +59 -0
- package/libc/netbsd/lib/csu/arch/powerpc/crt0.S +56 -0
- package/libc/netbsd/lib/csu/arch/sparc/crt0.S +55 -0
- package/libc/netbsd/lib/csu/arch/sparc64/crt0.S +59 -0
- package/libc/netbsd/lib/csu/arch/x86_64/crt0.S +48 -0
- package/libc/netbsd/lib/csu/common/crt0-common.c +351 -0
- package/libc/netbsd/lib/csu/common/crtbegin.c +135 -0
- package/libc/netbsd/lib/csu/common/csu-common.h +38 -0
- package/libc/netbsd/lib/csu/common/sysident.S +89 -0
- package/libc/netbsd/lib/csu/common/sysident_assym.h +17 -0
- package/package.json +2 -2
- package/std/Build/Step/Compile.zig +1 -20
- package/std/Build/Step/TranslateC.zig +0 -6
- package/std/Build/WebServer.zig +1 -1
- package/std/Build.zig +1 -4
- package/std/Io/Reader/Limited.zig +0 -44
- package/std/Io/Reader.zig +28 -128
- package/std/Io/Writer.zig +6 -31
- package/std/Target.zig +0 -8
- package/std/Thread.zig +4 -3
- package/std/c.zig +26 -87
- package/std/crypto/aes_ocb.zig +3 -32
- package/std/crypto/tls/Client.zig +8 -19
- package/std/debug.zig +1 -1
- package/std/fs/Dir.zig +1 -2
- package/std/fs/File.zig +104 -105
- package/std/http/Client.zig +2 -3
- package/std/json/static.zig +3 -3
- package/std/math/big/int.zig +4 -3
- package/std/math/powi.zig +0 -1
- package/std/mem/Allocator.zig +1 -3
- package/std/mem.zig +1 -3
- package/std/net.zig +2 -3
- package/std/os/linux/bpf.zig +2 -2
- package/std/os/linux/powerpc.zig +12 -74
- package/std/os/linux/powerpc64.zig +12 -74
- package/std/os/linux.zig +2 -7
- package/std/os/uefi/protocol/service_binding.zig +1 -1
- package/std/os/uefi/tables.zig +1 -1
- package/std/pie.zig +1 -1
- package/std/posix.zig +4 -6
- package/std/process/Child.zig +1 -5
- package/std/process.zig +2 -16
- package/std/sort/pdq.zig +1 -48
- package/std/testing.zig +0 -60
- package/std/zig/llvm/BitcodeReader.zig +1 -5
- package/std/zig/system/linux.zig +4 -1
- package/std/zig/system.zig +2 -3
- package/std/zon/parse.zig +0 -1
- package/ubsan_rt.zig +3 -3
- package/libc/musl/src/fenv/loongarch64/fenv-sf.c +0 -3
package/std/fs/File.zig
CHANGED
|
@@ -1242,7 +1242,7 @@ pub const Reader = struct {
|
|
|
1242
1242
|
pub fn seekBy(r: *Reader, offset: i64) Reader.SeekError!void {
|
|
1243
1243
|
switch (r.mode) {
|
|
1244
1244
|
.positional, .positional_reading => {
|
|
1245
|
-
|
|
1245
|
+
setPosAdjustingBuffer(r, @intCast(@as(i64, @intCast(r.pos)) + offset));
|
|
1246
1246
|
},
|
|
1247
1247
|
.streaming, .streaming_reading => {
|
|
1248
1248
|
if (posix.SEEK == void) {
|
|
@@ -1251,7 +1251,7 @@ pub const Reader = struct {
|
|
|
1251
1251
|
}
|
|
1252
1252
|
const seek_err = r.seek_err orelse e: {
|
|
1253
1253
|
if (posix.lseek_CUR(r.file.handle, offset)) |_| {
|
|
1254
|
-
|
|
1254
|
+
setPosAdjustingBuffer(r, @intCast(@as(i64, @intCast(r.pos)) + offset));
|
|
1255
1255
|
return;
|
|
1256
1256
|
} else |err| {
|
|
1257
1257
|
r.seek_err = err;
|
|
@@ -1275,17 +1275,16 @@ pub const Reader = struct {
|
|
|
1275
1275
|
pub fn seekTo(r: *Reader, offset: u64) Reader.SeekError!void {
|
|
1276
1276
|
switch (r.mode) {
|
|
1277
1277
|
.positional, .positional_reading => {
|
|
1278
|
-
|
|
1278
|
+
setPosAdjustingBuffer(r, offset);
|
|
1279
1279
|
},
|
|
1280
1280
|
.streaming, .streaming_reading => {
|
|
1281
|
-
|
|
1282
|
-
if (offset >= logical_pos) return Reader.seekBy(r, @intCast(offset - logical_pos));
|
|
1281
|
+
if (offset >= r.pos) return Reader.seekBy(r, @intCast(offset - r.pos));
|
|
1283
1282
|
if (r.seek_err) |err| return err;
|
|
1284
1283
|
posix.lseek_SET(r.file.handle, offset) catch |err| {
|
|
1285
1284
|
r.seek_err = err;
|
|
1286
1285
|
return err;
|
|
1287
1286
|
};
|
|
1288
|
-
|
|
1287
|
+
setPosAdjustingBuffer(r, offset);
|
|
1289
1288
|
},
|
|
1290
1289
|
.failure => return r.seek_err.?,
|
|
1291
1290
|
}
|
|
@@ -1295,7 +1294,7 @@ pub const Reader = struct {
|
|
|
1295
1294
|
return r.pos - r.interface.bufferedLen();
|
|
1296
1295
|
}
|
|
1297
1296
|
|
|
1298
|
-
fn
|
|
1297
|
+
fn setPosAdjustingBuffer(r: *Reader, offset: u64) void {
|
|
1299
1298
|
const logical_pos = logicalPos(r);
|
|
1300
1299
|
if (offset < logical_pos or offset >= r.pos) {
|
|
1301
1300
|
r.interface.seek = 0;
|
|
@@ -1323,15 +1322,13 @@ pub const Reader = struct {
|
|
|
1323
1322
|
},
|
|
1324
1323
|
.positional_reading => {
|
|
1325
1324
|
const dest = limit.slice(try w.writableSliceGreedy(1));
|
|
1326
|
-
|
|
1327
|
-
const n = try readVecPositional(r, &data);
|
|
1325
|
+
const n = try readPositional(r, dest);
|
|
1328
1326
|
w.advance(n);
|
|
1329
1327
|
return n;
|
|
1330
1328
|
},
|
|
1331
1329
|
.streaming_reading => {
|
|
1332
1330
|
const dest = limit.slice(try w.writableSliceGreedy(1));
|
|
1333
|
-
|
|
1334
|
-
const n = try readVecStreaming(r, &data);
|
|
1331
|
+
const n = try readStreaming(r, dest);
|
|
1335
1332
|
w.advance(n);
|
|
1336
1333
|
return n;
|
|
1337
1334
|
},
|
|
@@ -1342,98 +1339,92 @@ pub const Reader = struct {
|
|
|
1342
1339
|
fn readVec(io_reader: *std.Io.Reader, data: [][]u8) std.Io.Reader.Error!usize {
|
|
1343
1340
|
const r: *Reader = @alignCast(@fieldParentPtr("interface", io_reader));
|
|
1344
1341
|
switch (r.mode) {
|
|
1345
|
-
.positional, .positional_reading =>
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
r.
|
|
1342
|
+
.positional, .positional_reading => {
|
|
1343
|
+
if (is_windows) {
|
|
1344
|
+
// Unfortunately, `ReadFileScatter` cannot be used since it
|
|
1345
|
+
// requires page alignment.
|
|
1346
|
+
if (io_reader.seek == io_reader.end) {
|
|
1347
|
+
io_reader.seek = 0;
|
|
1348
|
+
io_reader.end = 0;
|
|
1349
|
+
}
|
|
1350
|
+
const first = data[0];
|
|
1351
|
+
if (first.len >= io_reader.buffer.len - io_reader.end) {
|
|
1352
|
+
return readPositional(r, first);
|
|
1353
|
+
} else {
|
|
1354
|
+
io_reader.end += try readPositional(r, io_reader.buffer[io_reader.end..]);
|
|
1355
|
+
return 0;
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
var iovecs_buffer: [max_buffers_len]posix.iovec = undefined;
|
|
1359
|
+
const dest_n, const data_size = try io_reader.writableVectorPosix(&iovecs_buffer, data);
|
|
1360
|
+
const dest = iovecs_buffer[0..dest_n];
|
|
1361
|
+
assert(dest[0].len > 0);
|
|
1362
|
+
const n = posix.preadv(r.file.handle, dest, r.pos) catch |err| switch (err) {
|
|
1363
|
+
error.Unseekable => {
|
|
1364
|
+
r.mode = r.mode.toStreaming();
|
|
1365
|
+
const pos = r.pos;
|
|
1366
|
+
if (pos != 0) {
|
|
1367
|
+
r.pos = 0;
|
|
1368
|
+
r.seekBy(@intCast(pos)) catch {
|
|
1369
|
+
r.mode = .failure;
|
|
1370
|
+
return error.ReadFailed;
|
|
1371
|
+
};
|
|
1372
|
+
}
|
|
1373
|
+
return 0;
|
|
1374
|
+
},
|
|
1375
|
+
else => |e| {
|
|
1376
|
+
r.err = e;
|
|
1380
1377
|
return error.ReadFailed;
|
|
1381
|
-
}
|
|
1378
|
+
},
|
|
1379
|
+
};
|
|
1380
|
+
if (n == 0) {
|
|
1381
|
+
r.size = r.pos;
|
|
1382
|
+
return error.EndOfStream;
|
|
1382
1383
|
}
|
|
1383
|
-
|
|
1384
|
+
r.pos += n;
|
|
1385
|
+
if (n > data_size) {
|
|
1386
|
+
io_reader.end += n - data_size;
|
|
1387
|
+
return data_size;
|
|
1388
|
+
}
|
|
1389
|
+
return n;
|
|
1384
1390
|
},
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1391
|
+
.streaming, .streaming_reading => {
|
|
1392
|
+
if (is_windows) {
|
|
1393
|
+
// Unfortunately, `ReadFileScatter` cannot be used since it
|
|
1394
|
+
// requires page alignment.
|
|
1395
|
+
if (io_reader.seek == io_reader.end) {
|
|
1396
|
+
io_reader.seek = 0;
|
|
1397
|
+
io_reader.end = 0;
|
|
1398
|
+
}
|
|
1399
|
+
const first = data[0];
|
|
1400
|
+
if (first.len >= io_reader.buffer.len - io_reader.end) {
|
|
1401
|
+
return readPositional(r, first);
|
|
1402
|
+
} else {
|
|
1403
|
+
io_reader.end += try readPositional(r, io_reader.buffer[io_reader.end..]);
|
|
1404
|
+
return 0;
|
|
1405
|
+
}
|
|
1406
|
+
}
|
|
1407
|
+
var iovecs_buffer: [max_buffers_len]posix.iovec = undefined;
|
|
1408
|
+
const dest_n, const data_size = try io_reader.writableVectorPosix(&iovecs_buffer, data);
|
|
1409
|
+
const dest = iovecs_buffer[0..dest_n];
|
|
1410
|
+
assert(dest[0].len > 0);
|
|
1411
|
+
const n = posix.readv(r.file.handle, dest) catch |err| {
|
|
1412
|
+
r.err = err;
|
|
1413
|
+
return error.ReadFailed;
|
|
1414
|
+
};
|
|
1415
|
+
if (n == 0) {
|
|
1416
|
+
r.size = r.pos;
|
|
1417
|
+
return error.EndOfStream;
|
|
1418
|
+
}
|
|
1419
|
+
r.pos += n;
|
|
1420
|
+
if (n > data_size) {
|
|
1421
|
+
io_reader.end += n - data_size;
|
|
1422
|
+
return data_size;
|
|
1423
|
+
}
|
|
1424
|
+
return n;
|
|
1388
1425
|
},
|
|
1389
|
-
|
|
1390
|
-
if (n == 0) {
|
|
1391
|
-
r.size = r.pos;
|
|
1392
|
-
return error.EndOfStream;
|
|
1393
|
-
}
|
|
1394
|
-
r.pos += n;
|
|
1395
|
-
if (n > data_size) {
|
|
1396
|
-
io_reader.end += n - data_size;
|
|
1397
|
-
return data_size;
|
|
1398
|
-
}
|
|
1399
|
-
return n;
|
|
1400
|
-
}
|
|
1401
|
-
|
|
1402
|
-
fn readVecStreaming(r: *Reader, data: [][]u8) std.Io.Reader.Error!usize {
|
|
1403
|
-
const io_reader = &r.interface;
|
|
1404
|
-
if (is_windows) {
|
|
1405
|
-
// Unfortunately, `ReadFileScatter` cannot be used since it
|
|
1406
|
-
// requires page alignment.
|
|
1407
|
-
if (io_reader.seek == io_reader.end) {
|
|
1408
|
-
io_reader.seek = 0;
|
|
1409
|
-
io_reader.end = 0;
|
|
1410
|
-
}
|
|
1411
|
-
const first = data[0];
|
|
1412
|
-
if (first.len >= io_reader.buffer.len - io_reader.end) {
|
|
1413
|
-
return readStreaming(r, first);
|
|
1414
|
-
} else {
|
|
1415
|
-
io_reader.end += try readStreaming(r, io_reader.buffer[io_reader.end..]);
|
|
1416
|
-
return 0;
|
|
1417
|
-
}
|
|
1418
|
-
}
|
|
1419
|
-
var iovecs_buffer: [max_buffers_len]posix.iovec = undefined;
|
|
1420
|
-
const dest_n, const data_size = try io_reader.writableVectorPosix(&iovecs_buffer, data);
|
|
1421
|
-
const dest = iovecs_buffer[0..dest_n];
|
|
1422
|
-
assert(dest[0].len > 0);
|
|
1423
|
-
const n = posix.readv(r.file.handle, dest) catch |err| {
|
|
1424
|
-
r.err = err;
|
|
1425
|
-
return error.ReadFailed;
|
|
1426
|
-
};
|
|
1427
|
-
if (n == 0) {
|
|
1428
|
-
r.size = r.pos;
|
|
1429
|
-
return error.EndOfStream;
|
|
1430
|
-
}
|
|
1431
|
-
r.pos += n;
|
|
1432
|
-
if (n > data_size) {
|
|
1433
|
-
io_reader.end += n - data_size;
|
|
1434
|
-
return data_size;
|
|
1426
|
+
.failure => return error.ReadFailed,
|
|
1435
1427
|
}
|
|
1436
|
-
return n;
|
|
1437
1428
|
}
|
|
1438
1429
|
|
|
1439
1430
|
fn discard(io_reader: *std.Io.Reader, limit: std.Io.Limit) std.Io.Reader.Error!usize {
|
|
@@ -1502,7 +1493,7 @@ pub const Reader = struct {
|
|
|
1502
1493
|
}
|
|
1503
1494
|
}
|
|
1504
1495
|
|
|
1505
|
-
fn readPositional(r: *Reader, dest: []u8) std.Io.Reader.Error!usize {
|
|
1496
|
+
pub fn readPositional(r: *Reader, dest: []u8) std.Io.Reader.Error!usize {
|
|
1506
1497
|
const n = r.file.pread(dest, r.pos) catch |err| switch (err) {
|
|
1507
1498
|
error.Unseekable => {
|
|
1508
1499
|
r.mode = r.mode.toStreaming();
|
|
@@ -1529,7 +1520,7 @@ pub const Reader = struct {
|
|
|
1529
1520
|
return n;
|
|
1530
1521
|
}
|
|
1531
1522
|
|
|
1532
|
-
fn readStreaming(r: *Reader, dest: []u8) std.Io.Reader.Error!usize {
|
|
1523
|
+
pub fn readStreaming(r: *Reader, dest: []u8) std.Io.Reader.Error!usize {
|
|
1533
1524
|
const n = r.file.read(dest) catch |err| {
|
|
1534
1525
|
r.err = err;
|
|
1535
1526
|
return error.ReadFailed;
|
|
@@ -1542,6 +1533,14 @@ pub const Reader = struct {
|
|
|
1542
1533
|
return n;
|
|
1543
1534
|
}
|
|
1544
1535
|
|
|
1536
|
+
pub fn read(r: *Reader, dest: []u8) std.Io.Reader.Error!usize {
|
|
1537
|
+
switch (r.mode) {
|
|
1538
|
+
.positional, .positional_reading => return readPositional(r, dest),
|
|
1539
|
+
.streaming, .streaming_reading => return readStreaming(r, dest),
|
|
1540
|
+
.failure => return error.ReadFailed,
|
|
1541
|
+
}
|
|
1542
|
+
}
|
|
1543
|
+
|
|
1545
1544
|
pub fn atEnd(r: *Reader) bool {
|
|
1546
1545
|
// Even if stat fails, size is set when end is encountered.
|
|
1547
1546
|
const size = r.size orelse return false;
|
|
@@ -1784,7 +1783,7 @@ pub const Writer = struct {
|
|
|
1784
1783
|
) std.Io.Writer.FileError!usize {
|
|
1785
1784
|
const reader_buffered = file_reader.interface.buffered();
|
|
1786
1785
|
if (reader_buffered.len >= @intFromEnum(limit))
|
|
1787
|
-
return sendFileBuffered(io_w, file_reader,
|
|
1786
|
+
return sendFileBuffered(io_w, file_reader, reader_buffered);
|
|
1788
1787
|
const writer_buffered = io_w.buffered();
|
|
1789
1788
|
const file_limit = @intFromEnum(limit) - reader_buffered.len;
|
|
1790
1789
|
const w: *Writer = @alignCast(@fieldParentPtr("interface", io_w));
|
|
@@ -1856,7 +1855,7 @@ pub const Writer = struct {
|
|
|
1856
1855
|
return error.EndOfStream;
|
|
1857
1856
|
}
|
|
1858
1857
|
const consumed = io_w.consume(@intCast(sbytes));
|
|
1859
|
-
file_reader.
|
|
1858
|
+
file_reader.seekTo(file_reader.pos + consumed) catch return error.ReadFailed;
|
|
1860
1859
|
return consumed;
|
|
1861
1860
|
}
|
|
1862
1861
|
|
|
@@ -1917,7 +1916,7 @@ pub const Writer = struct {
|
|
|
1917
1916
|
return error.EndOfStream;
|
|
1918
1917
|
}
|
|
1919
1918
|
const consumed = io_w.consume(@bitCast(len));
|
|
1920
|
-
file_reader.
|
|
1919
|
+
file_reader.seekTo(file_reader.pos + consumed) catch return error.ReadFailed;
|
|
1921
1920
|
return consumed;
|
|
1922
1921
|
}
|
|
1923
1922
|
|
|
@@ -1968,7 +1967,7 @@ pub const Writer = struct {
|
|
|
1968
1967
|
|
|
1969
1968
|
const copy_file_range = switch (native_os) {
|
|
1970
1969
|
.freebsd => std.os.freebsd.copy_file_range,
|
|
1971
|
-
.linux => std.os.linux.wrapped.copy_file_range,
|
|
1970
|
+
.linux => if (std.c.versionCheck(if (builtin.abi.isAndroid()) .{ .major = 34, .minor = 0, .patch = 0 } else .{ .major = 2, .minor = 27, .patch = 0 })) std.os.linux.wrapped.copy_file_range else {},
|
|
1972
1971
|
else => {},
|
|
1973
1972
|
};
|
|
1974
1973
|
if (@TypeOf(copy_file_range) != void) cfr: {
|
|
@@ -2050,7 +2049,7 @@ pub const Writer = struct {
|
|
|
2050
2049
|
reader_buffered: []const u8,
|
|
2051
2050
|
) std.Io.Writer.FileError!usize {
|
|
2052
2051
|
const n = try drain(io_w, &.{reader_buffered}, 1);
|
|
2053
|
-
file_reader.
|
|
2052
|
+
file_reader.seekTo(file_reader.pos + n) catch return error.ReadFailed;
|
|
2054
2053
|
return n;
|
|
2055
2054
|
}
|
|
2056
2055
|
|
package/std/http/Client.zig
CHANGED
|
@@ -1375,7 +1375,7 @@ pub const basic_authorization = struct {
|
|
|
1375
1375
|
var buf: [max_user_len + 1 + max_password_len]u8 = undefined;
|
|
1376
1376
|
var w: Writer = .fixed(&buf);
|
|
1377
1377
|
const user: Uri.Component = uri.user orelse .empty;
|
|
1378
|
-
const password: Uri.Component = uri.
|
|
1378
|
+
const password: Uri.Component = uri.user orelse .empty;
|
|
1379
1379
|
user.formatUser(&w) catch unreachable;
|
|
1380
1380
|
w.writeByte(':') catch unreachable;
|
|
1381
1381
|
password.formatPassword(&w) catch unreachable;
|
|
@@ -1797,10 +1797,9 @@ pub fn fetch(client: *Client, options: FetchOptions) FetchError!FetchResult {
|
|
|
1797
1797
|
|
|
1798
1798
|
if (options.payload) |payload| {
|
|
1799
1799
|
req.transfer_encoding = .{ .content_length = payload.len };
|
|
1800
|
-
var body = try req.
|
|
1800
|
+
var body = try req.sendBody(&.{});
|
|
1801
1801
|
try body.writer.writeAll(payload);
|
|
1802
1802
|
try body.end();
|
|
1803
|
-
try req.connection.?.flush();
|
|
1804
1803
|
} else {
|
|
1805
1804
|
try req.sendBodiless();
|
|
1806
1805
|
}
|
package/std/json/static.zig
CHANGED
|
@@ -567,8 +567,8 @@ pub fn innerParseFromValue(
|
|
|
567
567
|
switch (source) {
|
|
568
568
|
.float => |f| {
|
|
569
569
|
if (@round(f) != f) return error.InvalidNumber;
|
|
570
|
-
if (f >
|
|
571
|
-
if (f <
|
|
570
|
+
if (f > std.math.maxInt(T)) return error.Overflow;
|
|
571
|
+
if (f < std.math.minInt(T)) return error.Overflow;
|
|
572
572
|
return @as(T, @intFromFloat(f));
|
|
573
573
|
},
|
|
574
574
|
.integer => |i| {
|
|
@@ -770,7 +770,7 @@ fn sliceToInt(comptime T: type, slice: []const u8) !T {
|
|
|
770
770
|
// Try to coerce a float to an integer.
|
|
771
771
|
const float = try std.fmt.parseFloat(f128, slice);
|
|
772
772
|
if (@round(float) != float) return error.InvalidNumber;
|
|
773
|
-
if (float >
|
|
773
|
+
if (float > std.math.maxInt(T) or float < std.math.minInt(T)) return error.Overflow;
|
|
774
774
|
return @as(T, @intCast(@as(i128, @intFromFloat(float))));
|
|
775
775
|
}
|
|
776
776
|
|
package/std/math/big/int.zig
CHANGED
|
@@ -786,10 +786,11 @@ pub const Mutable = struct {
|
|
|
786
786
|
assert(rma.limbs.ptr != b.limbs.ptr); // illegal aliasing
|
|
787
787
|
|
|
788
788
|
if (a.limbs.len == 1 and b.limbs.len == 1) {
|
|
789
|
-
|
|
790
|
-
|
|
789
|
+
const ov = @mulWithOverflow(a.limbs[0], b.limbs[0]);
|
|
790
|
+
rma.limbs[0] = ov[0];
|
|
791
|
+
if (ov[1] == 0) {
|
|
791
792
|
rma.len = 1;
|
|
792
|
-
rma.positive = (a.positive == b.positive)
|
|
793
|
+
rma.positive = (a.positive == b.positive);
|
|
793
794
|
return;
|
|
794
795
|
}
|
|
795
796
|
}
|
package/std/math/powi.zig
CHANGED
|
@@ -13,7 +13,6 @@ const testing = std.testing;
|
|
|
13
13
|
/// Errors:
|
|
14
14
|
/// - Overflow: Integer overflow or Infinity
|
|
15
15
|
/// - Underflow: Absolute value of result smaller than 1
|
|
16
|
-
///
|
|
17
16
|
/// Edge case rules ordered by precedence:
|
|
18
17
|
/// - powi(T, x, 0) = 1 unless T is i1, i0, u0
|
|
19
18
|
/// - powi(T, 0, x) = 0 when x > 0
|
package/std/mem/Allocator.zig
CHANGED
|
@@ -358,10 +358,8 @@ pub fn remap(self: Allocator, allocation: anytype, new_len: usize) t: {
|
|
|
358
358
|
return mem.bytesAsSlice(T, new_memory);
|
|
359
359
|
}
|
|
360
360
|
|
|
361
|
-
/// This function requests a new size for an existing allocation, which
|
|
361
|
+
/// This function requests a new byte size for an existing allocation, which
|
|
362
362
|
/// can be larger, smaller, or the same size as the old memory allocation.
|
|
363
|
-
/// The result is an array of `new_n` items of the same type as the existing
|
|
364
|
-
/// allocation.
|
|
365
363
|
///
|
|
366
364
|
/// If `new_n` is 0, this is the same as `free` and it always succeeds.
|
|
367
365
|
///
|
package/std/mem.zig
CHANGED
|
@@ -3785,7 +3785,6 @@ test rotate {
|
|
|
3785
3785
|
|
|
3786
3786
|
/// Replace needle with replacement as many times as possible, writing to an output buffer which is assumed to be of
|
|
3787
3787
|
/// appropriate size. Use replacementSize to calculate an appropriate buffer size.
|
|
3788
|
-
/// The `input` and `output` slices must not overlap.
|
|
3789
3788
|
/// The needle must not be empty.
|
|
3790
3789
|
/// Returns the number of replacements made.
|
|
3791
3790
|
pub fn replace(comptime T: type, input: []const T, needle: []const T, replacement: []const T, output: []T) usize {
|
|
@@ -4485,8 +4484,7 @@ pub fn doNotOptimizeAway(val: anytype) void {
|
|
|
4485
4484
|
} else doNotOptimizeAway(&val);
|
|
4486
4485
|
},
|
|
4487
4486
|
.float => {
|
|
4488
|
-
|
|
4489
|
-
if ((t.float.bits == 32 or t.float.bits == 64) and builtin.zig_backend != .stage2_c and !builtin.cpu.arch.isLoongArch()) {
|
|
4487
|
+
if ((t.float.bits == 32 or t.float.bits == 64) and builtin.zig_backend != .stage2_c) {
|
|
4490
4488
|
asm volatile (""
|
|
4491
4489
|
:
|
|
4492
4490
|
: [_] "rm" (val),
|
package/std/net.zig
CHANGED
|
@@ -1393,7 +1393,7 @@ fn parseHosts(
|
|
|
1393
1393
|
br: *Io.Reader,
|
|
1394
1394
|
) error{ OutOfMemory, ReadFailed }!void {
|
|
1395
1395
|
while (true) {
|
|
1396
|
-
const line = br.
|
|
1396
|
+
const line = br.takeDelimiterExclusive('\n') catch |err| switch (err) {
|
|
1397
1397
|
error.StreamTooLong => {
|
|
1398
1398
|
// Skip lines that are too long.
|
|
1399
1399
|
_ = br.discardDelimiterInclusive('\n') catch |e| switch (e) {
|
|
@@ -1403,8 +1403,7 @@ fn parseHosts(
|
|
|
1403
1403
|
continue;
|
|
1404
1404
|
},
|
|
1405
1405
|
error.ReadFailed => return error.ReadFailed,
|
|
1406
|
-
|
|
1407
|
-
break; // end of stream
|
|
1406
|
+
error.EndOfStream => break,
|
|
1408
1407
|
};
|
|
1409
1408
|
var split_it = mem.splitScalar(u8, line, '#');
|
|
1410
1409
|
const no_comment_line = split_it.first();
|
package/std/os/linux/bpf.zig
CHANGED
|
@@ -642,7 +642,7 @@ pub const Insn = packed struct {
|
|
|
642
642
|
.dst = @intFromEnum(dst),
|
|
643
643
|
.src = @intFromEnum(src),
|
|
644
644
|
.off = 0,
|
|
645
|
-
.imm = @as(i32, @
|
|
645
|
+
.imm = @as(i32, @intCast(@as(u32, @truncate(imm)))),
|
|
646
646
|
};
|
|
647
647
|
}
|
|
648
648
|
|
|
@@ -652,7 +652,7 @@ pub const Insn = packed struct {
|
|
|
652
652
|
.dst = 0,
|
|
653
653
|
.src = 0,
|
|
654
654
|
.off = 0,
|
|
655
|
-
.imm = @as(i32, @
|
|
655
|
+
.imm = @as(i32, @intCast(@as(u32, @truncate(imm >> 32)))),
|
|
656
656
|
};
|
|
657
657
|
}
|
|
658
658
|
|
package/std/os/linux/powerpc.zig
CHANGED
|
@@ -15,125 +15,84 @@ const sockaddr = linux.sockaddr;
|
|
|
15
15
|
const timespec = linux.timespec;
|
|
16
16
|
|
|
17
17
|
pub fn syscall0(number: SYS) usize {
|
|
18
|
-
// r0 is both an input register and a clobber. musl and glibc achieve this with
|
|
19
|
-
// a "+" constraint, which isn't supported in Zig, so instead we separately list
|
|
20
|
-
// r0 as both an input and an output. (Listing it as an input and a clobber would
|
|
21
|
-
// cause the C backend to emit invalid code; see #25209.)
|
|
22
|
-
var r0_out: usize = undefined;
|
|
23
18
|
return asm volatile (
|
|
24
19
|
\\ sc
|
|
25
20
|
\\ bns+ 1f
|
|
26
21
|
\\ neg 3, 3
|
|
27
22
|
\\ 1:
|
|
28
23
|
: [ret] "={r3}" (-> usize),
|
|
29
|
-
[r0_out] "={r0}" (r0_out),
|
|
30
24
|
: [number] "{r0}" (@intFromEnum(number)),
|
|
31
|
-
: .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true
|
|
25
|
+
: .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
32
26
|
}
|
|
33
27
|
|
|
34
28
|
pub fn syscall1(number: SYS, arg1: usize) usize {
|
|
35
|
-
// r0 is both an input and a clobber.
|
|
36
|
-
var r0_out: usize = undefined;
|
|
37
29
|
return asm volatile (
|
|
38
30
|
\\ sc
|
|
39
31
|
\\ bns+ 1f
|
|
40
32
|
\\ neg 3, 3
|
|
41
33
|
\\ 1:
|
|
42
34
|
: [ret] "={r3}" (-> usize),
|
|
43
|
-
[r0_out] "={r0}" (r0_out),
|
|
44
35
|
: [number] "{r0}" (@intFromEnum(number)),
|
|
45
36
|
[arg1] "{r3}" (arg1),
|
|
46
|
-
: .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true
|
|
37
|
+
: .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
47
38
|
}
|
|
48
39
|
|
|
49
40
|
pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
|
|
50
|
-
// These registers are both inputs and clobbers.
|
|
51
|
-
var r0_out: usize = undefined;
|
|
52
|
-
var r4_out: usize = undefined;
|
|
53
41
|
return asm volatile (
|
|
54
42
|
\\ sc
|
|
55
43
|
\\ bns+ 1f
|
|
56
44
|
\\ neg 3, 3
|
|
57
45
|
\\ 1:
|
|
58
46
|
: [ret] "={r3}" (-> usize),
|
|
59
|
-
[r0_out] "={r0}" (r0_out),
|
|
60
|
-
[r4_out] "={r4}" (r4_out),
|
|
61
47
|
: [number] "{r0}" (@intFromEnum(number)),
|
|
62
48
|
[arg1] "{r3}" (arg1),
|
|
63
49
|
[arg2] "{r4}" (arg2),
|
|
64
|
-
: .{ .memory = true, .cr0 = true, .
|
|
50
|
+
: .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
65
51
|
}
|
|
66
52
|
|
|
67
53
|
pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
|
|
68
|
-
// These registers are both inputs and clobbers.
|
|
69
|
-
var r0_out: usize = undefined;
|
|
70
|
-
var r4_out: usize = undefined;
|
|
71
|
-
var r5_out: usize = undefined;
|
|
72
54
|
return asm volatile (
|
|
73
55
|
\\ sc
|
|
74
56
|
\\ bns+ 1f
|
|
75
57
|
\\ neg 3, 3
|
|
76
58
|
\\ 1:
|
|
77
59
|
: [ret] "={r3}" (-> usize),
|
|
78
|
-
[r0_out] "={r0}" (r0_out),
|
|
79
|
-
[r4_out] "={r4}" (r4_out),
|
|
80
|
-
[r5_out] "={r5}" (r5_out),
|
|
81
60
|
: [number] "{r0}" (@intFromEnum(number)),
|
|
82
61
|
[arg1] "{r3}" (arg1),
|
|
83
62
|
[arg2] "{r4}" (arg2),
|
|
84
63
|
[arg3] "{r5}" (arg3),
|
|
85
|
-
: .{ .memory = true, .cr0 = true, .
|
|
64
|
+
: .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
86
65
|
}
|
|
87
66
|
|
|
88
67
|
pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
|
|
89
|
-
// These registers are both inputs and clobbers.
|
|
90
|
-
var r0_out: usize = undefined;
|
|
91
|
-
var r4_out: usize = undefined;
|
|
92
|
-
var r5_out: usize = undefined;
|
|
93
|
-
var r6_out: usize = undefined;
|
|
94
68
|
return asm volatile (
|
|
95
69
|
\\ sc
|
|
96
70
|
\\ bns+ 1f
|
|
97
71
|
\\ neg 3, 3
|
|
98
72
|
\\ 1:
|
|
99
73
|
: [ret] "={r3}" (-> usize),
|
|
100
|
-
[r0_out] "={r0}" (r0_out),
|
|
101
|
-
[r4_out] "={r4}" (r4_out),
|
|
102
|
-
[r5_out] "={r5}" (r5_out),
|
|
103
|
-
[r6_out] "={r6}" (r6_out),
|
|
104
74
|
: [number] "{r0}" (@intFromEnum(number)),
|
|
105
75
|
[arg1] "{r3}" (arg1),
|
|
106
76
|
[arg2] "{r4}" (arg2),
|
|
107
77
|
[arg3] "{r5}" (arg3),
|
|
108
78
|
[arg4] "{r6}" (arg4),
|
|
109
|
-
: .{ .memory = true, .cr0 = true, .
|
|
79
|
+
: .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
110
80
|
}
|
|
111
81
|
|
|
112
82
|
pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
|
|
113
|
-
// These registers are both inputs and clobbers.
|
|
114
|
-
var r0_out: usize = undefined;
|
|
115
|
-
var r4_out: usize = undefined;
|
|
116
|
-
var r5_out: usize = undefined;
|
|
117
|
-
var r6_out: usize = undefined;
|
|
118
|
-
var r7_out: usize = undefined;
|
|
119
83
|
return asm volatile (
|
|
120
84
|
\\ sc
|
|
121
85
|
\\ bns+ 1f
|
|
122
86
|
\\ neg 3, 3
|
|
123
87
|
\\ 1:
|
|
124
88
|
: [ret] "={r3}" (-> usize),
|
|
125
|
-
[r0_out] "={r0}" (r0_out),
|
|
126
|
-
[r4_out] "={r4}" (r4_out),
|
|
127
|
-
[r5_out] "={r5}" (r5_out),
|
|
128
|
-
[r6_out] "={r6}" (r6_out),
|
|
129
|
-
[r7_out] "={r7}" (r7_out),
|
|
130
89
|
: [number] "{r0}" (@intFromEnum(number)),
|
|
131
90
|
[arg1] "{r3}" (arg1),
|
|
132
91
|
[arg2] "{r4}" (arg2),
|
|
133
92
|
[arg3] "{r5}" (arg3),
|
|
134
93
|
[arg4] "{r6}" (arg4),
|
|
135
94
|
[arg5] "{r7}" (arg5),
|
|
136
|
-
: .{ .memory = true, .cr0 = true, .
|
|
95
|
+
: .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
137
96
|
}
|
|
138
97
|
|
|
139
98
|
pub fn syscall6(
|
|
@@ -145,25 +104,12 @@ pub fn syscall6(
|
|
|
145
104
|
arg5: usize,
|
|
146
105
|
arg6: usize,
|
|
147
106
|
) usize {
|
|
148
|
-
// These registers are both inputs and clobbers.
|
|
149
|
-
var r0_out: usize = undefined;
|
|
150
|
-
var r4_out: usize = undefined;
|
|
151
|
-
var r5_out: usize = undefined;
|
|
152
|
-
var r6_out: usize = undefined;
|
|
153
|
-
var r7_out: usize = undefined;
|
|
154
|
-
var r8_out: usize = undefined;
|
|
155
107
|
return asm volatile (
|
|
156
108
|
\\ sc
|
|
157
109
|
\\ bns+ 1f
|
|
158
110
|
\\ neg 3, 3
|
|
159
111
|
\\ 1:
|
|
160
112
|
: [ret] "={r3}" (-> usize),
|
|
161
|
-
[r0_out] "={r0}" (r0_out),
|
|
162
|
-
[r4_out] "={r4}" (r4_out),
|
|
163
|
-
[r5_out] "={r5}" (r5_out),
|
|
164
|
-
[r6_out] "={r6}" (r6_out),
|
|
165
|
-
[r7_out] "={r7}" (r7_out),
|
|
166
|
-
[r8_out] "={r8}" (r8_out),
|
|
167
113
|
: [number] "{r0}" (@intFromEnum(number)),
|
|
168
114
|
[arg1] "{r3}" (arg1),
|
|
169
115
|
[arg2] "{r4}" (arg2),
|
|
@@ -171,7 +117,7 @@ pub fn syscall6(
|
|
|
171
117
|
[arg4] "{r6}" (arg4),
|
|
172
118
|
[arg5] "{r7}" (arg5),
|
|
173
119
|
[arg6] "{r8}" (arg6),
|
|
174
|
-
: .{ .memory = true, .cr0 = true, .
|
|
120
|
+
: .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
175
121
|
}
|
|
176
122
|
|
|
177
123
|
pub fn clone() callconv(.naked) usize {
|
|
@@ -247,19 +193,11 @@ pub fn clone() callconv(.naked) usize {
|
|
|
247
193
|
pub const restore = restore_rt;
|
|
248
194
|
|
|
249
195
|
pub fn restore_rt() callconv(.naked) noreturn {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
: [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
|
|
256
|
-
: .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true }),
|
|
257
|
-
else => _ = asm volatile (
|
|
258
|
-
\\ sc
|
|
259
|
-
:
|
|
260
|
-
: [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
|
|
261
|
-
: .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true }),
|
|
262
|
-
}
|
|
196
|
+
asm volatile (
|
|
197
|
+
\\ sc
|
|
198
|
+
:
|
|
199
|
+
: [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
|
|
200
|
+
: .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
263
201
|
}
|
|
264
202
|
|
|
265
203
|
pub const F = struct {
|