77 lines
1.5 KiB
C
77 lines
1.5 KiB
C
|
#pragma once
|
||
|
|
||
|
#include "types.h"
|
||
|
#include "ustring.h"
|
||
|
|
||
|
class Dentry;
|
||
|
class VfsMount;
|
||
|
class Path;
|
||
|
class FileSystemInfo;
|
||
|
|
||
|
/**
|
||
|
* @enum Type of the last component on LOOKUP_PARENT
|
||
|
*/
|
||
|
enum
|
||
|
{
|
||
|
/**
|
||
|
* The last component is a regular filename
|
||
|
*/
|
||
|
LAST_NORM,
|
||
|
|
||
|
/**
|
||
|
* The last component is "."
|
||
|
*/
|
||
|
LAST_DOT,
|
||
|
|
||
|
/**
|
||
|
* The last component is ".."
|
||
|
*/
|
||
|
LAST_DOTDOT,
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* @enum Error Codes for the path walk
|
||
|
*/
|
||
|
enum
|
||
|
{
|
||
|
PW_SUCCESS = 0,
|
||
|
/**
|
||
|
* The path was not found
|
||
|
*/
|
||
|
PW_ENOTFOUND,
|
||
|
/**
|
||
|
* The path to look up is invalid
|
||
|
*/
|
||
|
PW_EINVALID
|
||
|
};
|
||
|
|
||
|
class PathWalker
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
/**
|
||
|
* Perform a file system lookup
|
||
|
* @param pathname File pathname to be resolved
|
||
|
* @param pwd Start directory of the file system walk
|
||
|
* @param root Root directory for the file system walk
|
||
|
* @param out Output parameter: Found file path
|
||
|
* @param parent Optional output parameter: Parent directory
|
||
|
* @return Returns 0 on success, != 0 on error
|
||
|
*/
|
||
|
static int32 pathWalk(const char* pathname, const Path& pwd, const Path& root, Path& out, Path* parent = nullptr);
|
||
|
|
||
|
static int32 pathWalk(const char* pathname, FileSystemInfo* fs_info, Path& out, Path* parent_dir = nullptr);
|
||
|
|
||
|
static ustl::string pathPrefix(const ustl::string& path);
|
||
|
static ustl::string lastPathSegment(const ustl::string& path, bool ignore_separator_at_end = false);
|
||
|
|
||
|
private:
|
||
|
static size_t getNextPartLen(const char* path);
|
||
|
static int pathSegmentType(const char* segment);
|
||
|
|
||
|
PathWalker();
|
||
|
~PathWalker();
|
||
|
};
|
||
|
|
||
|
|