aboutsummaryrefslogtreecommitdiff
path: root/src/lib9
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib9')
-rw-r--r--src/lib9/await.c21
-rw-r--r--src/lib9/mkfile71
-rw-r--r--src/lib9/nan.c2
-rw-r--r--src/lib9/wait.c20
4 files changed, 105 insertions, 9 deletions
diff --git a/src/lib9/await.c b/src/lib9/await.c
index 5f2d58ba..a97c6d18 100644
--- a/src/lib9/await.c
+++ b/src/lib9/await.c
@@ -71,8 +71,8 @@ _p9strsig(char *s)
return 0;
}
-int
-await(char *str, int n)
+static int
+_await(char *str, int n, int opt)
{
int pid, status, cd;
struct rusage ru;
@@ -80,8 +80,8 @@ await(char *str, int n)
ulong u, s;
for(;;){
- pid = wait3(&status, 0, &ru);
- if(pid < 0)
+ pid = wait3(&status, opt, &ru);
+ if(pid <= 0)
return -1;
u = ru.ru_utime.tv_sec*1000+((ru.ru_utime.tv_usec+500)/1000);
s = ru.ru_stime.tv_sec*1000+((ru.ru_stime.tv_usec+500)/1000);
@@ -103,3 +103,16 @@ await(char *str, int n)
}
}
}
+
+int
+await(char *str, int n)
+{
+ return _await(str, n, 0);
+}
+
+int
+awaitnohang(char *str, int n)
+{
+ return _await(str, n, WNOHANG);
+}
+
diff --git a/src/lib9/mkfile b/src/lib9/mkfile
index a0e75fc3..70b06a25 100644
--- a/src/lib9/mkfile
+++ b/src/lib9/mkfile
@@ -3,7 +3,71 @@ PLAN9=../..
LIB=lib9.a
+NUM=\
+ charstod.$O\
+ pow10.$O\
+
+# Could add errfmt, but we want to pick it up from lib9 instead.
+FMTOFILES=\
+ dofmt.$O\
+ errfmt.$O\
+ fltfmt.$O\
+ fmt.$O\
+ fmtfd.$O\
+ fmtfdflush.$O\
+ fmtlock.$O\
+ fmtprint.$O\
+ fmtquote.$O\
+ fmtrune.$O\
+ fmtstr.$O\
+ fmtvprint.$O\
+ fprint.$O\
+ nan64.$O\
+ print.$O\
+ runefmtstr.$O\
+ runeseprint.$O\
+ runesmprint.$O\
+ runesnprint.$O\
+ runesprint.$O\
+ runevseprint.$O\
+ runevsmprint.$O\
+ runevsnprint.$O\
+ seprint.$O\
+ smprint.$O\
+ snprint.$O\
+ sprint.$O\
+ strtod.$O\
+ vfprint.$O\
+ vseprint.$O\
+ vsmprint.$O\
+ vsnprint.$O\
+ $NUM\
+
+UTFOFILES=\
+ rune.$O\
+ runestrcat.$O\
+ runestrchr.$O\
+ runestrcmp.$O\
+ runestrcpy.$O\
+ runestrdup.$O\
+ runestrlen.$O\
+ runestrecpy.$O\
+ runestrncat.$O\
+ runestrncmp.$O\
+ runestrncpy.$O\
+ runestrrchr.$O\
+ runestrstr.$O\
+ runetype.$O\
+ utfecpy.$O\
+ utflen.$O\
+ utfnlen.$O\
+ utfrrune.$O\
+ utfrune.$O\
+ utfutf.$O\
+
OFILES=\
+ $FMTOFILES\
+ $UTFOFILES\
_exits.$O\
_p9dialparse.$O\
_p9dir.$O\
@@ -85,3 +149,10 @@ HFILES=\
$PLAN9/include/lib9.h\
<$PLAN9/src/mksyslib
+
+%.$O: fmt/%.c
+ $CC $CFLAGS -Ifmt fmt/$stem.c
+
+%.$O: utf/%.c
+ $CC $CFLAGS utf/$stem.c
+
diff --git a/src/lib9/nan.c b/src/lib9/nan.c
index d9f69655..34feb153 100644
--- a/src/lib9/nan.c
+++ b/src/lib9/nan.c
@@ -1,6 +1,6 @@
#include <u.h>
#include <libc.h>
-#include "../libfmt/nan.h"
+#include "fmt/nan.h"
double
NaN(void)
diff --git a/src/lib9/wait.c b/src/lib9/wait.c
index 6dc137b1..856f85c0 100644
--- a/src/lib9/wait.c
+++ b/src/lib9/wait.c
@@ -1,15 +1,15 @@
#include <u.h>
#include <libc.h>
-Waitmsg*
-wait(void)
+static Waitmsg*
+_wait(int nohang)
{
int n, l;
char buf[512], *fld[5];
Waitmsg *w;
- n = await(buf, sizeof buf-1);
- if(n < 0)
+ n = (nohang ? awaitnohang : await)(buf, sizeof buf-1);
+ if(n <= 0)
return nil;
buf[n] = '\0';
if(tokenize(buf, fld, nelem(fld)) != nelem(fld)){
@@ -29,3 +29,15 @@ wait(void)
return w;
}
+Waitmsg*
+wait(void)
+{
+ return _wait(0);
+}
+
+Waitmsg*
+waitnohang(void)
+{
+ return _wait(1);
+}
+