Serenity Operating System
1/*
2 * Copyright (c) 2023, Sam Atkins <atkinssj@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include "DirectoryEntry.h"
8#include <dirent.h>
9
10namespace Core {
11
12static DirectoryEntry::Type directory_entry_type_from_posix(unsigned char dt_constant)
13{
14 switch (dt_constant) {
15 case DT_UNKNOWN:
16 return DirectoryEntry::Type::Unknown;
17 case DT_FIFO:
18 return DirectoryEntry::Type::NamedPipe;
19 case DT_CHR:
20 return DirectoryEntry::Type::CharacterDevice;
21 case DT_DIR:
22 return DirectoryEntry::Type::Directory;
23 case DT_BLK:
24 return DirectoryEntry::Type::BlockDevice;
25 case DT_REG:
26 return DirectoryEntry::Type::File;
27 case DT_LNK:
28 return DirectoryEntry::Type::SymbolicLink;
29 case DT_SOCK:
30 return DirectoryEntry::Type::Socket;
31#ifndef AK_OS_OPENBSD
32 case DT_WHT:
33 return DirectoryEntry::Type::Whiteout;
34#endif
35 }
36 VERIFY_NOT_REACHED();
37}
38
39DirectoryEntry DirectoryEntry::from_dirent(dirent const& de)
40{
41 return DirectoryEntry {
42 .type = directory_entry_type_from_posix(de.d_type),
43 .name = de.d_name,
44 };
45};
46
47}