ladybird/Userland/Libraries/LibCore/DirIterator.h
Liav A 603516e8c0 LibCore: Add new flag for DirIterator to not use fstatat
This will be useful in the upcoming listdir utility (in the next commit)
to get the file type which is obtained in the get_dir_entries syscall,
so it's not changed later by the fstatat syscall.

This will ensure that we get the raw file type value as it's represented
by directory entries from the get_dir_entries syscall.
2024-01-13 19:01:07 -07:00

51 lines
1.0 KiB
C++

/*
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2023, Sam Atkins <atkinssj@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/ByteString.h>
#include <LibCore/DirectoryEntry.h>
#include <dirent.h>
#include <string.h>
namespace Core {
class DirIterator {
public:
enum Flags {
NoFlags = 0x0,
SkipDots = 0x1,
SkipParentAndBaseDir = 0x2,
NoStat = 0x4,
};
explicit DirIterator(ByteString path, Flags = Flags::NoFlags);
~DirIterator();
DirIterator(DirIterator&&);
DirIterator(DirIterator const&) = delete;
bool has_error() const { return m_error.has_value(); }
Error error() const { return Error::copy(m_error.value()); }
bool has_next();
Optional<DirectoryEntry> next();
ByteString next_path();
ByteString next_full_path();
int fd() const;
private:
DIR* m_dir = nullptr;
Optional<Error> m_error;
Optional<DirectoryEntry> m_next;
ByteString m_path;
int m_flags;
bool advance_next();
};
}