diff --git a/kernel/src/Api/BuildNo.hpp b/kernel/src/Api/BuildNo.hpp index 39cdee0..676bf2f 100644 --- a/kernel/src/Api/BuildNo.hpp +++ b/kernel/src/Api/BuildNo.hpp @@ -12,4 +12,4 @@ #pragma once -#define MONTAUK_BUILD_NUMBER 25 +#define MONTAUK_BUILD_NUMBER 26 diff --git a/programs/lib/libc/libc.c b/programs/lib/libc/libc.c index f763c1d..42541c6 100644 --- a/programs/lib/libc/libc.c +++ b/programs/lib/libc/libc.c @@ -2305,6 +2305,16 @@ int stat(const char *path, struct stat *buf) { if (_path_is_directory(path)) { buf->st_mode = S_IFDIR; buf->st_size = 0; + /* Directories need distinct fake inodes too: GCC's include + path setup deduplicates directories by (st_dev, st_ino), so + leaving 0 here made every directory "the same" and all but + one include dir was silently dropped. */ + unsigned long ino = 5381; + for (const char *p = path; *p; p++) { + ino = ino * 33 + (unsigned char)*p; + } + buf->st_ino = ino | 1; + buf->st_nlink = 1; return 0; } diff --git a/programs/lib/libc/obj/libc.o b/programs/lib/libc/obj/libc.o index 821c9fb..98948f1 100644 Binary files a/programs/lib/libc/obj/libc.o and b/programs/lib/libc/obj/libc.o differ