From 1949ea7d787ccc3663483f89ec51d23760733ae2 Mon Sep 17 00:00:00 2001 From: chn Date: Sun, 9 Jun 2024 18:12:23 +0800 Subject: [PATCH] localPackages.biu: add env --- local/pkgs/biu/.clangd | 2 +- local/pkgs/biu/CMakeLists.txt | 2 +- local/pkgs/biu/README.md | 7 +++++++ local/pkgs/biu/include/biu.hpp | 1 + local/pkgs/biu/include/biu/env.hpp | 8 ++++++++ local/pkgs/biu/src/common.cpp | 9 +++++---- local/pkgs/biu/src/env.cpp | 12 ++++++++++++ 7 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 local/pkgs/biu/include/biu/env.hpp create mode 100644 local/pkgs/biu/src/env.cpp diff --git a/local/pkgs/biu/.clangd b/local/pkgs/biu/.clangd index 527de5ae..9ebe20dd 100644 --- a/local/pkgs/biu/.clangd +++ b/local/pkgs/biu/.clangd @@ -1,3 +1,3 @@ CompileFlags: Add: [ -Wall, -Wextra, -std=c++23 ] - Compiler: gcc \ No newline at end of file + Compiler: g++ \ No newline at end of file diff --git a/local/pkgs/biu/CMakeLists.txt b/local/pkgs/biu/CMakeLists.txt index fa6e1163..78f66268 100644 --- a/local/pkgs/biu/CMakeLists.txt +++ b/local/pkgs/biu/CMakeLists.txt @@ -22,7 +22,7 @@ find_path(NAMEOF_INCLUDE_DIR nameof.hpp REQUIRED) # find_library(BACKTRACE_LIB backtrace REQUIRED) # add_library(biu SHARED src/common.cpp src/logger.cpp src/string.cpp) -add_library(biu SHARED src/common.cpp) +add_library(biu SHARED src/common.cpp src/env.cpp) target_include_directories(biu PUBLIC $ $ diff --git a/local/pkgs/biu/README.md b/local/pkgs/biu/README.md index f435ac5e..0395075e 100644 --- a/local/pkgs/biu/README.md +++ b/local/pkgs/biu/README.md @@ -40,3 +40,10 @@ std::regex operator""_re(const char* str, std::size_t len); inline namespace stream_operators { using namespace magic_enum::iostream_operators; } ``` +# `env` + +```c++ +bool is_interactive(); +std::optional env(std::string name); +std::map env(); +``` diff --git a/local/pkgs/biu/include/biu.hpp b/local/pkgs/biu/include/biu.hpp index 55862e77..a57a3de5 100644 --- a/local/pkgs/biu/include/biu.hpp +++ b/local/pkgs/biu/include/biu.hpp @@ -2,6 +2,7 @@ // # include // # include # include +# include // # include // # include // # include diff --git a/local/pkgs/biu/include/biu/env.hpp b/local/pkgs/biu/include/biu/env.hpp new file mode 100644 index 00000000..a4099bb7 --- /dev/null +++ b/local/pkgs/biu/include/biu/env.hpp @@ -0,0 +1,8 @@ +# pragma once +# include + +namespace biu::env +{ + bool is_interactive(); + std::optional env(std::string name); +} diff --git a/local/pkgs/biu/src/common.cpp b/local/pkgs/biu/src/common.cpp index dee8e44e..d9904c19 100644 --- a/local/pkgs/biu/src/common.cpp +++ b/local/pkgs/biu/src/common.cpp @@ -5,8 +5,7 @@ namespace biu { - std::regex literals::operator""_re(const char* str, std::size_t len) - { return std::regex{str, len}; } + std::regex literals::operator""_re(const char* str, std::size_t len) { return std::regex{str, len}; } namespace common { void block_forever() { std::promise().get_future().wait(); std::unreachable(); } @@ -25,12 +24,14 @@ namespace biu if (stdin) { process = std::make_unique - (program.string(), bp::args(args), bp::std_out > stdout, bp::std_err > stderr, bp::std_in < input, env); + (program.string(), bp::args(args), bp::std_out > stdout, bp::std_err > stderr, + bp::std_in < input, env); input << *stdin; input.pipe().close(); } else process = std::make_unique - (program.string(), bp::args(args), bp::std_out > stdout, bp::std_err > stderr, bp::std_in < bp::null, env); + (program.string(), bp::args(args), bp::std_out > stdout, bp::std_err > stderr, + bp::std_in < bp::null, env); process->wait(); return { diff --git a/local/pkgs/biu/src/env.cpp b/local/pkgs/biu/src/env.cpp new file mode 100644 index 00000000..49d6b16d --- /dev/null +++ b/local/pkgs/biu/src/env.cpp @@ -0,0 +1,12 @@ +# include +# include + +namespace biu::env +{ + bool is_interactive() { return isatty(fileno(stdin)); } + std::optional env(std::string name) + { + if (auto value = std::getenv(name.c_str()); !value) return std::nullopt; + else return value; + } +}