Explorar el Código

LibCore: Add File::is_{block,char}_device() helpers

The existing File::is_device() helpers don't distinguish between
block and char devices. This commit adds File::is_block_device() and
File::is_char_device() helpers which are more specific.
Samuel Bowman hace 3 años
padre
commit
7b8088c78d
Se han modificado 2 ficheros con 36 adiciones y 0 borrados
  1. 32 0
      Userland/Libraries/LibCore/File.cpp
  2. 4 0
      Userland/Libraries/LibCore/File.h

+ 32 - 0
Userland/Libraries/LibCore/File.cpp

@@ -115,6 +115,38 @@ bool File::is_device(String const& filename)
     return S_ISBLK(st.st_mode) || S_ISCHR(st.st_mode);
 }
 
+bool File::is_block_device() const
+{
+    struct stat stat;
+    if (fstat(fd(), &stat) < 0)
+        return false;
+    return S_ISBLK(stat.st_mode);
+}
+
+bool File::is_block_device(String const& filename)
+{
+    struct stat st;
+    if (stat(filename.characters(), &st) < 0)
+        return false;
+    return S_ISBLK(st.st_mode);
+}
+
+bool File::is_char_device() const
+{
+    struct stat stat;
+    if (fstat(fd(), &stat) < 0)
+        return false;
+    return S_ISCHR(stat.st_mode);
+}
+
+bool File::is_char_device(String const& filename)
+{
+    struct stat st;
+    if (stat(filename.characters(), &st) < 0)
+        return false;
+    return S_ISCHR(st.st_mode);
+}
+
 bool File::is_directory() const
 {
     struct stat stat;

+ 4 - 0
Userland/Libraries/LibCore/File.h

@@ -28,6 +28,10 @@ public:
 
     bool is_device() const;
     static bool is_device(String const& filename);
+    bool is_block_device() const;
+    static bool is_block_device(String const& filename);
+    bool is_char_device() const;
+    static bool is_char_device(String const& filename);
 
     bool is_link() const;
     static bool is_link(String const& filename);