diff --git a/Kernel/API/Device.h b/Kernel/API/Device.h new file mode 100644 index 0000000000..05cba987e4 --- /dev/null +++ b/Kernel/API/Device.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2018-2021, Andreas Kling + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include +#include + +__BEGIN_DECLS + +ALWAYS_INLINE dev_t serenity_dev_makedev(unsigned major, unsigned minor) +{ + return (minor & 0xffu) | (major << 8u) | ((minor & ~0xffu) << 12u); +} + +ALWAYS_INLINE unsigned int serenity_dev_major(dev_t dev) +{ + return (dev & 0xfff00u) >> 8u; +} + +ALWAYS_INLINE unsigned int serenity_dev_minor(dev_t dev) +{ + return (dev & 0xffu) | ((dev >> 12u) & 0xfff00u); +} + +__END_DECLS diff --git a/Kernel/API/POSIX/sys/types.h b/Kernel/API/POSIX/sys/types.h index 2ff467b9c0..e30be11b67 100644 --- a/Kernel/API/POSIX/sys/types.h +++ b/Kernel/API/POSIX/sys/types.h @@ -92,10 +92,6 @@ typedef struct __pthread_condattr_t { int clockid; // clockid_t } pthread_condattr_t; -static inline dev_t makedev(unsigned major, unsigned minor) { return (minor & 0xffu) | (major << 8u) | ((minor & ~0xffu) << 12u); } -static inline unsigned int major(dev_t dev) { return (dev & 0xfff00u) >> 8u; } -static inline unsigned int minor(dev_t dev) { return (dev & 0xffu) | ((dev >> 12u) & 0xfff00u); } - #ifdef __cplusplus } #endif diff --git a/Userland/Libraries/LibC/sys/sysmacros.h b/Userland/Libraries/LibC/sys/sysmacros.h index f9ae0c1ad8..1e43776554 100644 --- a/Userland/Libraries/LibC/sys/sysmacros.h +++ b/Userland/Libraries/LibC/sys/sysmacros.h @@ -5,3 +5,9 @@ */ #pragma once + +#include + +#define makedev(major, minor) serenity_dev_makedev((major), (minor)) +#define major(dev) serenity_dev_major(dev) +#define minor(dev) serenity_dev_minor(dev) diff --git a/Userland/Services/SystemServer/main.cpp b/Userland/Services/SystemServer/main.cpp index 73cd7d69af..75bced43fb 100644 --- a/Userland/Services/SystemServer/main.cpp +++ b/Userland/Services/SystemServer/main.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -117,11 +118,6 @@ static void chown_all_matching_device_nodes(group* group, unsigned major_number) } } -constexpr unsigned encoded_device(unsigned major, unsigned minor) -{ - return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12); -} - inline char offset_character_with_number(char base_char, u8 offset) { char offsetted_char = base_char; @@ -132,7 +128,7 @@ inline char offset_character_with_number(char base_char, u8 offset) static void create_devfs_block_device(String name, mode_t mode, unsigned major, unsigned minor) { - if (auto rc = mknod(name.characters(), mode | S_IFBLK, encoded_device(major, minor)); rc < 0) + if (auto rc = mknod(name.characters(), mode | S_IFBLK, makedev(major, minor)); rc < 0) VERIFY_NOT_REACHED(); } @@ -170,7 +166,7 @@ static void populate_devfs_block_devices() static void create_devfs_char_device(String name, mode_t mode, unsigned major, unsigned minor) { - if (auto rc = mknod(name.characters(), mode | S_IFCHR, encoded_device(major, minor)); rc < 0) + if (auto rc = mknod(name.characters(), mode | S_IFCHR, makedev(major, minor)); rc < 0) VERIFY_NOT_REACHED(); } diff --git a/Userland/Utilities/ls.cpp b/Userland/Utilities/ls.cpp index 9ded3b0904..4fe2289ce0 100644 --- a/Userland/Utilities/ls.cpp +++ b/Userland/Utilities/ls.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include diff --git a/Userland/Utilities/mknod.cpp b/Userland/Utilities/mknod.cpp index b0317f3fc6..6d9c8f8c1c 100644 --- a/Userland/Utilities/mknod.cpp +++ b/Userland/Utilities/mknod.cpp @@ -8,13 +8,9 @@ #include #include #include +#include #include -constexpr unsigned encoded_device(unsigned major, unsigned minor) -{ - return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12); -} - static int usage() { warnln("usage: mknod [ ]"); @@ -63,7 +59,7 @@ int main(int argc, char** argv) minor = atoi(argv[4]); } - int rc = mknod(name, mode, encoded_device(major, minor)); + int rc = mknod(name, mode, makedev(major, minor)); if (rc < 0) { perror("mknod"); return 1; diff --git a/Userland/Utilities/stat.cpp b/Userland/Utilities/stat.cpp index b34a893284..0a0c9d03ff 100644 --- a/Userland/Utilities/stat.cpp +++ b/Userland/Utilities/stat.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include static ErrorOr stat(StringView file, bool should_follow_links)