From d026c4e9b5eeb885c5b6fced59358c57978d4c8c Mon Sep 17 00:00:00 2001 From: doofin <8177dph@gmail.com> Date: Wed, 25 Jul 2018 14:42:21 +0800 Subject: [PATCH 1/4] add currentDir --- libs/prelude/Prelude/File.idr | 4 ++++ rts/idris_stdfgn.c | 8 ++++++++ rts/idris_stdfgn.h | 2 ++ 3 files changed, 14 insertions(+) diff --git a/libs/prelude/Prelude/File.idr b/libs/prelude/Prelude/File.idr index 13b5f2e5b..ec3592c70 100644 --- a/libs/prelude/Prelude/File.idr +++ b/libs/prelude/Prelude/File.idr @@ -375,3 +375,7 @@ changeDir : String -> IO Bool changeDir dir = do ok <- foreign FFI_C "idris_chdir" (String -> IO Int) dir pure (ok == 0) + +export +currentDir : IO String +currentDir = foreign FFI_C "idris_currentDir" (IO String) diff --git a/rts/idris_stdfgn.c b/rts/idris_stdfgn.c index 6b9437ac6..7e6bd05b4 100644 --- a/rts/idris_stdfgn.c +++ b/rts/idris_stdfgn.c @@ -259,3 +259,11 @@ VAL idris_getString(VM* vm, void* buffer) { free(sb); return str; } + +char* idris_currentDir() { + char cwd[1024]; + if (getcwd(cwd, sizeof(cwd)) != NULL) + return cwd + else + return "getcwd() error" +} diff --git a/rts/idris_stdfgn.h b/rts/idris_stdfgn.h index 133a96f19..72d70ef78 100644 --- a/rts/idris_stdfgn.h +++ b/rts/idris_stdfgn.h @@ -55,4 +55,6 @@ VAL idris_time(); void idris_forceGC(); +char* idris_currentDir(); + #endif From c0360f6eba76ffaed97878ba2f6dec05e9ecd92b Mon Sep 17 00:00:00 2001 From: doofin <8177dph@gmail.com> Date: Wed, 25 Jul 2018 15:06:16 +0800 Subject: [PATCH 2/4] fix --- rts/idris_stdfgn.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rts/idris_stdfgn.c b/rts/idris_stdfgn.c index 7e6bd05b4..235e2c914 100644 --- a/rts/idris_stdfgn.c +++ b/rts/idris_stdfgn.c @@ -263,7 +263,7 @@ VAL idris_getString(VM* vm, void* buffer) { char* idris_currentDir() { char cwd[1024]; if (getcwd(cwd, sizeof(cwd)) != NULL) - return cwd + return cwd; else - return "getcwd() error" + return "getcwd() error"; } From c9e8cf924da59619a7010f833dbb8b2bbb6856bf Mon Sep 17 00:00:00 2001 From: doofin <8177dph@gmail.com> Date: Wed, 25 Jul 2018 17:25:21 +0800 Subject: [PATCH 3/4] fix with MKSTR --- libs/prelude/Prelude/File.idr | 6 ++++-- rts/idris_stdfgn.c | 6 +++--- rts/idris_stdfgn.h | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/libs/prelude/Prelude/File.idr b/libs/prelude/Prelude/File.idr index ec3592c70..e79aea777 100644 --- a/libs/prelude/Prelude/File.idr +++ b/libs/prelude/Prelude/File.idr @@ -377,5 +377,7 @@ changeDir dir pure (ok == 0) export -currentDir : IO String -currentDir = foreign FFI_C "idris_currentDir" (IO String) +currentDir : IO String +currentDir = do + MkRaw s <- foreign FFI_C "idris_currentDir" (IO (Raw String)) + pure s diff --git a/rts/idris_stdfgn.c b/rts/idris_stdfgn.c index 235e2c914..ecafbe44e 100644 --- a/rts/idris_stdfgn.c +++ b/rts/idris_stdfgn.c @@ -260,10 +260,10 @@ VAL idris_getString(VM* vm, void* buffer) { return str; } -char* idris_currentDir() { +VAL idris_currentDir() { char cwd[1024]; if (getcwd(cwd, sizeof(cwd)) != NULL) - return cwd; + return MKSTRlen(get_vm(),cwd,1024); else - return "getcwd() error"; + return MKSTR(get_vm(),"getcwd() error"); } diff --git a/rts/idris_stdfgn.h b/rts/idris_stdfgn.h index 72d70ef78..5fd4b90bf 100644 --- a/rts/idris_stdfgn.h +++ b/rts/idris_stdfgn.h @@ -55,6 +55,6 @@ VAL idris_time(); void idris_forceGC(); -char* idris_currentDir(); +VAL idris_currentDir(); #endif From 6a55558a7186cc73569a52470f629ee0c5c03c5c Mon Sep 17 00:00:00 2001 From: doofin <8177dph@gmail.com> Date: Thu, 26 Jul 2018 03:49:30 +0800 Subject: [PATCH 4/4] Update idris_stdfgn.c --- rts/idris_stdfgn.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rts/idris_stdfgn.c b/rts/idris_stdfgn.c index ecafbe44e..ce72dfa16 100644 --- a/rts/idris_stdfgn.c +++ b/rts/idris_stdfgn.c @@ -263,7 +263,7 @@ VAL idris_getString(VM* vm, void* buffer) { VAL idris_currentDir() { char cwd[1024]; if (getcwd(cwd, sizeof(cwd)) != NULL) - return MKSTRlen(get_vm(),cwd,1024); + return MKSTR(get_vm(),cwd); else - return MKSTR(get_vm(),"getcwd() error"); + return MKSTR(get_vm(),""); }