diff options
author | Dominick Allen <djallen@librehumanitas.org> | 2024-09-25 11:25:25 -0500 |
---|---|---|
committer | Dominick Allen <djallen@librehumanitas.org> | 2024-09-25 11:25:25 -0500 |
commit | 255fa256b106506e0c951f704314c5c633217468 (patch) | |
tree | acda2292f4ef315a64de763d4ee8e9a82f587a8c /source | |
parent | 204dad55119df079ca54309bc4b740280fa54c31 (diff) |
Further expansion of string api.
Diffstat (limited to 'source')
-rw-r--r-- | source/fud_string.cpp | 14 | ||||
-rw-r--r-- | source/libfud.cpp | 21 |
2 files changed, 34 insertions, 1 deletions
diff --git a/source/fud_string.cpp b/source/fud_string.cpp index 27496ff..57bf1e0 100644 --- a/source/fud_string.cpp +++ b/source/fud_string.cpp @@ -157,6 +157,20 @@ FudStatus String::nullTerminate() return FudStatus::StringInvalid; } +[[nodiscard]] std::optional<utf8> String::back() +{ + if (!valid()) { + return std::nullopt; + } + + utf8 backChar = data()[m_length - 1]; + if (Ascii::valid(backChar)) { + return backChar; + } + + return std::nullopt; +} + std::optional<utf8> String::pop() { if (m_length < 1) { diff --git a/source/libfud.cpp b/source/libfud.cpp index 834082e..e1dad1d 100644 --- a/source/libfud.cpp +++ b/source/libfud.cpp @@ -17,10 +17,29 @@ #include "libfud.hpp" +#include <cstdlib> + namespace fud { -void fud() +Result<String, FudStatus> getEnv(const char* name) { + using RetType = Result<String, FudStatus>; + + if (name == nullptr) { + return RetType::error(FudStatus::NullPointer); + } + + const char* resultString = getenv(name); + if (resultString == nullptr) { + return RetType::error(FudStatus::NotFound); + } + + String envVar{resultString}; + if (!envVar.valid()) { + return RetType::error(FudStatus::Failure); + } + + return RetType::okay(std::move(envVar)); } } // namespace fud |