aboutsummaryrefslogtreecommitdiff
path: root/std
diff options
context:
space:
mode:
authorCody <cody@codyq.dev>2023-06-28 14:28:54 -0500
committerCody <cody@codyq.dev>2023-06-28 14:28:54 -0500
commit9c915d3bf79078a2afd9c70ed8bbf606c3250f84 (patch)
treea7702cfa7b35e270b8be44b3566bcbf7a24d3cc2 /std
parentda89b3f6cdf17dbaeba9aa25e22f1b8313f97536 (diff)
parent42b509365ce43e2f83475cbbc0f01bcd7b34fcd3 (diff)
downloadsloth-9c915d3bf79078a2afd9c70ed8bbf606c3250f84.tar.gz
Merge branch 'master' of github.com:slothlang/slothlang
Diffstat (limited to 'std')
-rw-r--r--std/stdlib.c23
-rw-r--r--std/stdlib.sloth2
2 files changed, 21 insertions, 4 deletions
diff --git a/std/stdlib.c b/std/stdlib.c
index b70f5b7..dcb7ec3 100644
--- a/std/stdlib.c
+++ b/std/stdlib.c
@@ -1,9 +1,26 @@
-#include <unistd.h>
+#include <errno.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
-void wait(float x) {
- sleep(x);
+int wait(int msec) {
+ struct timespec ts;
+ int res;
+
+ if (msec < 0)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+
+ ts.tv_sec = msec / 1000;
+ ts.tv_nsec = (msec % 1000) * 1000000;
+
+ do {
+ res = nanosleep(&ts, &ts);
+ } while (res && errno == EINTR);
+
+ return res;
}
int slen(char *str) {
diff --git a/std/stdlib.sloth b/std/stdlib.sloth
index eb6000d..ea57e45 100644
--- a/std/stdlib.sloth
+++ b/std/stdlib.sloth
@@ -1,4 +1,4 @@
-foreign fn wait(x: Float) Void;
+foreign fn wait(x: Int) Int;
foreign fn print(str: String) Void;
foreign fn slen(str: String) Int;
# foreign fn charAt(str: String) Char;