mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-09 12:28:13 -04:00
fix: support more than 65536 uids/gids/modes (see gh #173)
This commit is contained in:
parent
b8d8246801
commit
928fdc257f
@ -921,3 +921,44 @@ TEST(filesystem, uid_gid_32bit) {
|
|||||||
EXPECT_EQ(65536, st32.uid);
|
EXPECT_EQ(65536, st32.uid);
|
||||||
EXPECT_EQ(4294967295, st32.gid);
|
EXPECT_EQ(4294967295, st32.gid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(filesystem, uid_gid_count) {
|
||||||
|
test::test_logger lgr;
|
||||||
|
|
||||||
|
auto input = std::make_shared<test::os_access_mock>();
|
||||||
|
|
||||||
|
input->add("", {1, 040755, 1, 0, 0, 10, 42, 0, 0, 0});
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < 100000; ++i) {
|
||||||
|
input->add(fmt::format("foo{:05d}.txt", i),
|
||||||
|
{2 + i, 0100644, 1, 50000 + i, 250000 + i, 10, 42, 0, 0, 0},
|
||||||
|
fmt::format("hello{:05d}", i));
|
||||||
|
}
|
||||||
|
|
||||||
|
auto fsimage = build_dwarfs(lgr, input, "null");
|
||||||
|
|
||||||
|
auto mm = std::make_shared<test::mmap_mock>(std::move(fsimage));
|
||||||
|
|
||||||
|
filesystem_v2 fs(lgr, mm);
|
||||||
|
|
||||||
|
auto iv00000 = fs.find("/foo00000.txt");
|
||||||
|
auto iv50000 = fs.find("/foo50000.txt");
|
||||||
|
auto iv99999 = fs.find("/foo99999.txt");
|
||||||
|
|
||||||
|
EXPECT_TRUE(iv00000);
|
||||||
|
EXPECT_TRUE(iv50000);
|
||||||
|
EXPECT_TRUE(iv99999);
|
||||||
|
|
||||||
|
file_stat st00000, st50000, st99999;
|
||||||
|
|
||||||
|
EXPECT_EQ(0, fs.getattr(*iv00000, &st00000));
|
||||||
|
EXPECT_EQ(0, fs.getattr(*iv50000, &st50000));
|
||||||
|
EXPECT_EQ(0, fs.getattr(*iv99999, &st99999));
|
||||||
|
|
||||||
|
EXPECT_EQ(50000, st00000.uid);
|
||||||
|
EXPECT_EQ(250000, st00000.gid);
|
||||||
|
EXPECT_EQ(100000, st50000.uid);
|
||||||
|
EXPECT_EQ(300000, st50000.gid);
|
||||||
|
EXPECT_EQ(149999, st99999.uid);
|
||||||
|
EXPECT_EQ(349999, st99999.gid);
|
||||||
|
}
|
||||||
|
@ -77,13 +77,13 @@ struct directory {
|
|||||||
*/
|
*/
|
||||||
struct inode_data {
|
struct inode_data {
|
||||||
// index into `metadata.modes[]`
|
// index into `metadata.modes[]`
|
||||||
2: UInt16 mode_index
|
2: UInt32 mode_index
|
||||||
|
|
||||||
// index into `metadata.uids[]`
|
// index into `metadata.uids[]`
|
||||||
4: UInt16 owner_index
|
4: UInt32 owner_index
|
||||||
|
|
||||||
// index into `metadata.gids[]`
|
// index into `metadata.gids[]`
|
||||||
5: UInt16 group_index
|
5: UInt32 group_index
|
||||||
|
|
||||||
// atime relative to `metadata.timestamp_base`
|
// atime relative to `metadata.timestamp_base`
|
||||||
6: UInt64 atime_offset
|
6: UInt64 atime_offset
|
||||||
|
Loading…
x
Reference in New Issue
Block a user