Webserv
Loading...
Searching...
No Matches
filesystem.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "http/HttpStatus.hpp"
4#include <ctime>
5#include <string>
6#include <sys/stat.h>
7#include <vector>
8
9namespace utils {
10
11bool writeFile(const std::string &content, const char *path);
12
13bool isDir(const std::string &p);
14
15const char *validateDirectoryPath(const char *path);
16
17std::string getFileExtension(const std::string &fpath);
18
19http::HttpStatus checkFileAccess(const std::string &path, int modeMask,
20 bool allowDirectory = false);
21
22std::string joinPaths(const std::string &p1, const std::string &p2);
23
24class TempFile {
25public:
26 TempFile();
27 ~TempFile();
28
29 bool open();
30 void close();
31 operator int() const;
32 int fd() const;
33 std::string const &path() const;
34 bool isOpen() const;
35
42
56 MoveStatus moveTo(const std::string &destPath);
57
58private:
59 int fd_;
60 std::string filePath_;
61
64};
65
66struct FileEntry {
67 std::string name;
68 bool isDir;
69 time_t mtime;
70 off_t size;
71};
72
77bool getDirectoryEntries(std::string const &path, std::vector<FileEntry> &entries);
78
82bool getFileStatus(std::string const &path, struct stat &buf);
83
84} // namespace utils
void close()
Definition filesystem.cpp:111
MoveStatus
Definition filesystem.hpp:36
@ MOVE_IO_ERR
Disk Full, Permission on dest, or other IO error.
Definition filesystem.hpp:38
@ MOVE_SUCCESS
File moved successfully (atomic or copy)
Definition filesystem.hpp:37
@ MOVE_SYS_ERR
Permission on src, rename() failed for system reasons.
Definition filesystem.hpp:39
@ MOVE_INVALID_STATE
File is not open or already moved.
Definition filesystem.hpp:40
std::string filePath_
Definition filesystem.hpp:60
TempFile()
Definition filesystem.cpp:94
int fd() const
Definition filesystem.cpp:124
~TempFile()
Definition filesystem.cpp:95
bool isOpen() const
Definition filesystem.cpp:126
TempFile(TempFile const &TempFile)
bool open()
Definition filesystem.cpp:97
int fd_
Definition filesystem.hpp:59
std::string const & path() const
Definition filesystem.cpp:125
TempFile & operator=(TempFile const &rhs)
MoveStatus moveTo(const std::string &destPath)
Moves the temporary file to a new permanent location.
Definition filesystem.cpp:128
HttpStatus
Definition HttpStatus.hpp:11
Definition filesystem.hpp:9
bool getFileStatus(std::string const &path, struct stat &buf)
Simple wrapper for stat to check existence and get details.
Definition filesystem.cpp:242
bool writeFile(const std::string &content, const char *path)
Definition filesystem.cpp:28
std::string joinPaths(const std::string &p1, const std::string &p2)
Definition filesystem.cpp:224
const char * validateDirectoryPath(const char *path)
Definition filesystem.cpp:58
bool getDirectoryEntries(std::string const &path, std::vector< FileEntry > &entries)
Reads a directory, stats all files, and returns them sorted by name. Uses only opendir/readdir/closed...
Definition filesystem.cpp:246
http::HttpStatus checkFileAccess(const std::string &path, int modeMask, bool allowDirectory=false)
Definition filesystem.cpp:198
std::string getFileExtension(const std::string &fpath)
Definition filesystem.cpp:86
bool isDir(const std::string &p)
Definition filesystem.cpp:81
Definition filesystem.hpp:66
bool isDir
Definition filesystem.hpp:68
off_t size
Definition filesystem.hpp:70
time_t mtime
Definition filesystem.hpp:69
std::string name
Definition filesystem.hpp:67