authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-03-09 13:01:26-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2020-03-09 13:01:26-04:00
log6ab156ce7dd781875db4965361418d8cdf4b3771
tree996ac31b68a5f1663231143d81957c717327b90d
parent9b1b44b41c2b1efe272985af44eaae84b9c4af1c
parent25d9ab95dd8a691963453c4507d519051eaebb0c
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #4695 from leroycep/feature-inode-stat

Expose file inode number on posix and file index on windows

8 files changed, 25 insertions(+), 5 deletions(-)

lib/std/fs/file.zig+12
......@@ -145,6 +145,16 @@ pub const File = struct {
145145 }
146146
147147 pub const Stat = struct {
148 /// A number that the system uses to point to the file metadata. This number is not guaranteed to be
149 /// unique across time, as some file systems may reuse an inode after it's file has been deleted.
150 /// Some systems may change the inode of a file over time.
151 ///
152 /// On Linux, the inode _is_ structure that stores the metadata, and the inode _number_ is what
153 /// you see here: the index number of the inode.
154 ///
155 /// The FileIndex on Windows is similar. It is a number for a file that is unique to each filesystem.
156 inode: os.ino_t,
157
148158 size: u64,
149159 mode: Mode,
150160
......@@ -174,6 +184,7 @@ pub const File = struct {
174184 else => return windows.unexpectedStatus(rc),
175185 }
176186 return Stat{
187 .inode = info.InternalInformation.IndexNumber,
177188 .size = @bitCast(u64, info.StandardInformation.EndOfFile),
178189 .mode = 0,
179190 .atime = windows.fromSysTime(info.BasicInformation.LastAccessTime),
......@@ -187,6 +198,7 @@ pub const File = struct {
187198 const mtime = st.mtime();
188199 const ctime = st.ctime();
189200 return Stat{
201 .inode = st.ino,
190202 .size = @bitCast(u64, st.size),
191203 .mode = st.mode,
192204 .atime = @as(i64, atime.tv_sec) * std.time.ns_per_s + atime.tv_nsec,
lib/std/os/bits/darwin.zig+2-1
......@@ -53,6 +53,7 @@ pub const mach_timebase_info_data = extern struct {
5353};
5454
5555pub const off_t = i64;
56pub const ino_t = u64;
5657
5758/// Renamed to Stat to not conflict with the stat function.
5859/// atime, mtime, and ctime have functions to return `timespec`,
......@@ -64,7 +65,7 @@ pub const Stat = extern struct {
6465 dev: i32,
6566 mode: u16,
6667 nlink: u16,
67 ino: u64,
68 ino: ino_t,
6869 uid: u32,
6970 gid: u32,
7071 rdev: i32,
lib/std/os/bits/dragonfly.zig+3-1
......@@ -138,8 +138,10 @@ pub const MAP_SIZEALIGN = 262144;
138138
139139pub const PATH_MAX = 1024;
140140
141pub const ino_t = c_ulong;
142
141143pub const Stat = extern struct {
142 ino: c_ulong,
144 ino: ino_t,
143145 nlink: c_uint,
144146 dev: c_uint,
145147 mode: c_ushort,
lib/std/os/bits/freebsd.zig+2-1
......@@ -98,6 +98,7 @@ pub const msghdr_const = extern struct {
9898};
9999
100100pub const off_t = i64;
101pub const ino_t = u64;
101102
102103/// Renamed to Stat to not conflict with the stat function.
103104/// atime, mtime, and ctime have functions to return `timespec`,
......@@ -107,7 +108,7 @@ pub const off_t = i64;
107108/// methods to accomplish this.
108109pub const Stat = extern struct {
109110 dev: u64,
110 ino: u64,
111 ino: ino_t,
111112 nlink: usize,
112113
113114 mode: u16,
lib/std/os/bits/linux/x86_64.zig+2-1
......@@ -481,6 +481,7 @@ pub const msghdr_const = extern struct {
481481};
482482
483483pub const off_t = i64;
484pub const ino_t = u64;
484485
485486/// Renamed to Stat to not conflict with the stat function.
486487/// atime, mtime, and ctime have functions to return `timespec`,
......@@ -490,7 +491,7 @@ pub const off_t = i64;
490491/// methods to accomplish this.
491492pub const Stat = extern struct {
492493 dev: u64,
493 ino: u64,
494 ino: ino_t,
494495 nlink: usize,
495496
496497 mode: u32,
lib/std/os/bits/netbsd.zig+2-1
......@@ -69,6 +69,7 @@ pub const msghdr_const = extern struct {
6969};
7070
7171pub const off_t = i64;
72pub const ino_t = u64;
7273
7374/// Renamed to Stat to not conflict with the stat function.
7475/// atime, mtime, and ctime have functions to return `timespec`,
......@@ -79,7 +80,7 @@ pub const off_t = i64;
7980pub const Stat = extern struct {
8081 dev: u64,
8182 mode: u32,
82 ino: u64,
83 ino: ino_t,
8384 nlink: usize,
8485
8586 uid: u32,
lib/std/os/bits/wasi.zig+1
......@@ -178,6 +178,7 @@ pub const FILESTAT_SET_MTIM: fstflags_t = 0x0004;
178178pub const FILESTAT_SET_MTIM_NOW: fstflags_t = 0x0008;
179179
180180pub const inode_t = u64;
181pub const ino_t = inode_t;
181182
182183pub const linkcount_t = u32;
183184
lib/std/os/bits/windows.zig+1
......@@ -4,6 +4,7 @@ usingnamespace @import("../windows/bits.zig");
44const ws2_32 = @import("../windows/ws2_32.zig");
55
66pub const fd_t = HANDLE;
7pub const ino_t = LARGE_INTEGER;
78pub const pid_t = HANDLE;
89pub const mode_t = u0;
910