From d58bb9c9bc7eec74e9b0d36f2cd8e457182715a5 Mon Sep 17 00:00:00 2001 From: Darcy Shen Date: Thu, 8 Aug 2024 16:36:38 +0800 Subject: [PATCH] (getcwd) in (liii os) --- goldfish/liii/os.scm | 5 ++++- src/goldfish.hpp | 12 ++++++++++++ tests/liii/os-test.scm | 2 ++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/goldfish/liii/os.scm b/goldfish/liii/os.scm index b641eac1..b25fdf28 100644 --- a/goldfish/liii/os.scm +++ b/goldfish/liii/os.scm @@ -17,7 +17,7 @@ (define-library (liii os) (export os-call os-arch os-type os-windows? os-linux? os-macos? os-temp-dir - mkdir getenv) + mkdir getenv getcwd) (import (scheme process-context)) (begin @@ -51,5 +51,8 @@ (define (getenv key) (get-environment-variable key)) +(define (getcwd) + (g_getcwd)) + ) ; end of begin ) ; end of define-library diff --git a/src/goldfish.hpp b/src/goldfish.hpp index 1aa615a7..e733f242 100644 --- a/src/goldfish.hpp +++ b/src/goldfish.hpp @@ -42,6 +42,7 @@ const std::string goldfish_version= namespace goldfish { using std::filesystem::create_directory; +using std::filesystem::current_path; using std::filesystem::exists; using std::filesystem::filesystem_error; using std::filesystem::path; @@ -256,6 +257,12 @@ f_mkdir (s7_scheme* sc, s7_pointer args) { return s7_make_boolean (sc, ret); } +static s7_pointer +f_getcwd (s7_scheme* sc, s7_pointer args) { + path cwd= current_path (); + return s7_make_string (sc, cwd.string ().c_str ()); +} + inline void glue_liii_os (s7_scheme* sc) { s7_pointer cur_env= s7_curlet (sc); @@ -270,6 +277,8 @@ glue_liii_os (s7_scheme* sc) { const char* d_os_temp_dir= "(g_os-temp-dir) => string"; const char* s_mkdir = "g_mkdir"; const char* d_mkdir = "(g_mkdir string) => boolean"; + const char* s_getcwd = "g_getcwd"; + const char* d_getcwd = "(g_getcwd) => string"; s7_define (sc, cur_env, s7_make_symbol (sc, s_os_type), s7_make_typed_function (sc, s_os_type, f_os_type, 0, 0, false, @@ -286,6 +295,9 @@ glue_liii_os (s7_scheme* sc) { s7_define (sc, cur_env, s7_make_symbol (sc, s_mkdir), s7_make_typed_function (sc, s_mkdir, f_mkdir, 1, 0, false, d_mkdir, NULL)); + s7_define (sc, cur_env, s7_make_symbol (sc, s_getcwd), + s7_make_typed_function (sc, s_getcwd, f_getcwd, 0, 0, false, + d_getcwd, NULL)); } static s7_pointer diff --git a/tests/liii/os-test.scm b/tests/liii/os-test.scm index 7e72b493..1c9c0a44 100644 --- a/tests/liii/os-test.scm +++ b/tests/liii/os-test.scm @@ -47,5 +47,7 @@ (check (mkdir "/tmp") => #f) (check (mkdir "/tmp/test_124") => #t)) +(check (string-null? (string-length (getcwd))) => #f) + (check-report) (if (check-failed?) (exit -1)) -- Gitee