Ver código fonte

Kernel+LibC: Use 64 bit values for ino_t

Since the InodeIndex encapsulates a 64 bit value, it is correct to
ensure that the Kernel is exposing the entire value and the LibC is
aware of it.

This commit requires an entire re-compile because it's essentially a
change in the Kernel ABI, together with a corresponding change in LibC.
Liav A 3 anos atrás
pai
commit
bf1adc2d5d

+ 1 - 1
Kernel/FileSystem/FileDescription.cpp

@@ -261,7 +261,7 @@ KResultOr<size_t> FileDescription::get_dir_entries(UserOrKernelBuffer& output_bu
                 return false;
             }
         }
-        stream << (u32)entry.inode.index().value();
+        stream << (u64)entry.inode.index().value();
         stream << m_inode->fs().internal_file_type_to_directory_entry_type(entry);
         stream << (u32)entry.name.length();
         stream << entry.name.bytes();

+ 1 - 1
Kernel/UnixTypes.h

@@ -357,7 +357,7 @@ enum {
 #define TCSAFLUSH 2
 
 typedef u32 dev_t;
-typedef u32 ino_t;
+typedef u64 ino_t;
 typedef u16 mode_t;
 typedef u32 nlink_t;
 typedef u32 uid_t;

+ 1 - 0
Userland/Libraries/LibC/dirent.cpp

@@ -5,6 +5,7 @@
  */
 
 #include <AK/Assertions.h>
+#include <AK/Format.h>
 #include <AK/ScopeGuard.h>
 #include <AK/StdLibExtras.h>
 #include <AK/Vector.h>

+ 1 - 1
Userland/Libraries/LibC/sys/types.h

@@ -32,7 +32,7 @@ typedef char* caddr_t;
 
 typedef int id_t;
 
-typedef uint32_t ino_t;
+typedef uint64_t ino_t;
 typedef int64_t off_t;
 
 typedef uint32_t blkcnt_t;

+ 2 - 2
Userland/Utilities/ls.cpp

@@ -279,7 +279,7 @@ static size_t print_name(const struct stat& st, const String& name, const char*
 static bool print_filesystem_object(const String& path, const String& name, const struct stat& st)
 {
     if (flag_show_inode)
-        printf("%08u ", st.st_ino);
+        printf("%s ", String::formatted("{}", st.st_ino).characters());
 
     if (S_ISDIR(st.st_mode))
         printf("d");
@@ -445,7 +445,7 @@ static bool print_filesystem_object_short(const char* path, const char* name, si
     }
 
     if (flag_show_inode)
-        printf("%08u ", st.st_ino);
+        printf("%s ", String::formatted("{}", st.st_ino).characters());
 
     *nprinted = print_name(st, name, nullptr, path);
     return true;

+ 1 - 1
Userland/Utilities/stat.cpp

@@ -26,7 +26,7 @@ static int stat(const char* file, bool should_follow_links)
         return 1;
     }
     printf("    File: %s\n", file);
-    printf("   Inode: %u\n", st.st_ino);
+    printf("   Inode: %s\n", String::formatted("{}", st.st_ino).characters());
     if (S_ISCHR(st.st_mode) || S_ISBLK(st.st_mode))
         printf("  Device: %u,%u\n", major(st.st_rdev), minor(st.st_rdev));
     else