libc: refactoring

This commit is contained in:
Giacomo Tesio 2019-11-28 02:35:52 +01:00
parent f104c46858
commit 4067cb45cb
75 changed files with 596 additions and 355 deletions

View File

@ -1,7 +1,6 @@
{ {
"buildflags": { "buildflags": {
"Cflags": [ "Cflags": [
"--sysroot=$JEHANNE",
"-fno-builtin", "-fno-builtin",
"-fno-omit-frame-pointer", "-fno-omit-frame-pointer",
"-fplan9-extensions", "-fplan9-extensions",

102
arch/amd64/include/limits.h Normal file
View File

@ -0,0 +1,102 @@
/*
* This file is part of Jehanne.
*
* Copyright (C) 2016-2019 Giacomo Tesio <giacomo@tesio.it>
*
* Jehanne is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* Jehanne is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Jehanne. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _JEHANNE_LIMITS_H
#define _JEHANNE_LIMITS_H
#undef CHAR_BIT
#define CHAR_BIT __CHAR_BIT__
#ifndef MB_LEN_MAX
#define MB_LEN_MAX 4 /* UTFmax in libc.h */
#endif
#define SCHAR_MAX 127
#define SCHAR_MIN (-128)
#define UCHAR_MAX (SCHAR_MAX * 2 + 1)
/* Jehanne's chars are signed */
#define CHAR_MIN SCHAR_MIN
#define CHAR_MAX SCHAR_MAX
#define SHRT_MIN (-32768)
#define SHRT_MAX 32767
#define USHRT_MAX 65535
#define INT_MIN (-INT_MAX - 1)
#define INT_MAX 2147483647
#define UINT_MAX 4294967295U
#define LONG_MAX 9223372036854775807L
#define LONG_MIN (-LONG_MAX - 1L)
#define ULONG_MAX 18446744073709551615UL
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
/* Minimum and maximum values a `signed long long int' can hold. */
#define LLONG_MAX 9223372036854775807LL
#define LLONG_MIN (-LLONG_MAX - 1LL)
/* Maximum value an `unsigned long long int' can hold. (Minimum is 0.) */
# define ULLONG_MAX 18446744073709551615ULL
# endif /* ISO C99 */
#if defined (__GNU_LIBRARY__) ? defined (__USE_GNU) : !defined (__STRICT_ANSI__)
/* Minimum and maximum values a `signed long long int' can hold. */
# undef LONG_LONG_MIN
# define LONG_LONG_MIN (-LONG_LONG_MAX - 1LL)
# undef LONG_LONG_MAX
# define LONG_LONG_MAX 9223372036854775807L
/* Maximum value an `unsigned long long int' can hold. (Minimum is 0). */
# undef ULONG_LONG_MAX
# define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1ULL)
#endif
#ifdef __STDC_WANT_IEC_60559_BFP_EXT__
/* TS 18661-1 widths of integer types. */
# undef CHAR_WIDTH
# define CHAR_WIDTH 8
# undef SCHAR_WIDTH
# define SCHAR_WIDTH 8
# undef UCHAR_WIDTH
# define UCHAR_WIDTH 8
# undef SHRT_WIDTH
# define SHRT_WIDTH 16
# undef USHRT_WIDTH
# define USHRT_WIDTH 16
# undef INT_WIDTH
# define INT_WIDTH 32
# undef UINT_WIDTH
# define UINT_WIDTH 32
# undef LONG_WIDTH
# define LONG_WIDTH 64
# undef ULONG_WIDTH
# define ULONG_WIDTH 64
# undef LLONG_WIDTH
# define LLONG_WIDTH 64
# undef ULLONG_WIDTH
# define ULLONG_WIDTH 64
#endif
#endif /* _LIMITS_H___ */

View File

@ -32,20 +32,20 @@ main(void)
print("FAIL: open: %r\n"); print("FAIL: open: %r\n");
exits("FAIL"); exits("FAIL");
} }
if(write(fd, r, sizeof(r)) < 0){ if(jehanne_write(fd, r, sizeof(r)) < 0){
print("FAIL: fprint: %r\n"); print("FAIL: fprint: %r\n");
exits("FAIL"); exits("FAIL");
} }
close(fd); sys_close(fd);
if((fd = open("/tmp/runetest.txt", OREAD)) < 0) { if((fd = sys_open("/tmp/runetest.txt", OREAD)) < 0) {
print("FAIL: open: %r\n"); print("FAIL: open: %r\n");
exits("FAIL"); exits("FAIL");
} }
if(read(fd, (char*)buf, sizeof(buf)) < 0){ if(jehanne_read(fd, (char*)buf, sizeof(buf)) < 0){
print("FAIL: read: %r\n"); print("FAIL: read: %r\n");
exits("FAIL"); exits("FAIL");
} }
close(fd); sys_close(fd);
if (runestrcmp(r, buf) != 0){ if (runestrcmp(r, buf) != 0){
print("FAIL: got '%S' instead of '%S'.\n", buf, r); print("FAIL: got '%S' instead of '%S'.\n", buf, r);
exits("FAIL"); exits("FAIL");

View File

@ -68,12 +68,12 @@ main(void)
exits("atnotify fails"); exits("atnotify fails");
} }
alarm(2000); sys_alarm(2000);
a2000 = nsec(); a2000 = nsec();
alarm(500); sys_alarm(500);
a500 = nsec(); a500 = nsec();
rendezvous(&a500, (void*)0x123); sys_rendezvous(&a500, (void*)0x123);
if(verbose) if(verbose)
fprint(2, "%d: set alarm(2000)@%lld then alarm(500)@%lld; received after %lld nanosecond\n", getpid(), a2000, a500, alarmReceived-a500); fprint(2, "%d: set alarm(2000)@%lld then alarm(500)@%lld; received after %lld nanosecond\n", getpid(), a2000, a500, alarmReceived-a500);

View File

@ -40,7 +40,7 @@ writeTillBlock(int fd)
memset(buf, 1, sizeof(buf)); memset(buf, 1, sizeof(buf));
while(i < 300) /* pipes should block after at most 256kb */ while(i < 300) /* pipes should block after at most 256kb */
{ {
if(write(fd, buf, sizeof(buf)) < 0){ if(jehanne_write(fd, buf, sizeof(buf)) < 0){
break; break;
} }
++i; ++i;
@ -56,21 +56,21 @@ main(void)
int fds[2]; int fds[2];
char buf[1]; char buf[1];
semacquire(&sem, 0); sys_semacquire(&sem, 0);
alarm(40000); /* global timeout, FAIL if reached */ sys_alarm(40000); /* global timeout, FAIL if reached */
if (!atnotify(failOnTimeout, 1)){ if (!atnotify(failOnTimeout, 1)){
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("atnotify fails"); exits("atnotify fails");
} }
awake(100000); /* this will be handled by the kernel, see pexit */ sys_awake(100000); /* this will be handled by the kernel, see pexit */
/* verify that rendezvous are interrupted */ /* verify that rendezvous are interrupted */
fprint(2, "verify that rendezvous are interrupted\n", elapsed); fprint(2, "verify that rendezvous are interrupted\n", elapsed);
wkup = awake(1000); wkup = sys_awake(1000);
start = nsec(); start = nsec();
res = (int64_t)rendezvous(&elapsed, (void*)0x12345); res = (int64_t)sys_rendezvous(&elapsed, (void*)0x12345);
elapsed = (nsec() - start) / (1000 * 1000); elapsed = (nsec() - start) / (1000 * 1000);
if(verbose) if(verbose)
fprint(2, "rendezvous interrupted, returned %#p, elapsed = %d ms\n", res, elapsed); fprint(2, "rendezvous interrupted, returned %#p, elapsed = %d ms\n", res, elapsed);
@ -82,7 +82,7 @@ main(void)
/* verify that sleeps are NOT interrupted */ /* verify that sleeps are NOT interrupted */
fprint(2, "verify that sleeps are NOT interrupted\n", elapsed); fprint(2, "verify that sleeps are NOT interrupted\n", elapsed);
wkup = awake(700); wkup = sys_awake(700);
start = nsec(); start = nsec();
sleep(1500); sleep(1500);
elapsed = (nsec() - start) / (1000 * 1000); elapsed = (nsec() - start) / (1000 * 1000);
@ -97,11 +97,11 @@ main(void)
/* verify that semacquires are interrupted */ /* verify that semacquires are interrupted */
fprint(2, "verify that semacquires are interrupted\n", elapsed); fprint(2, "verify that semacquires are interrupted\n", elapsed);
pipe(fds); pipe(fds);
wkup = awake(1000); wkup = sys_awake(1000);
start = nsec(); start = nsec();
if(verbose) if(verbose)
print("semacquire(&sem, 1)...\n"); print("semacquire(&sem, 1)...\n");
res = semacquire(&sem, 1); res = sys_semacquire(&sem, 1);
elapsed = (nsec() - start) / (1000 * 1000); elapsed = (nsec() - start) / (1000 * 1000);
if(verbose) if(verbose)
print("semacquire(&sem, 1): returned %lld, elapsed = %d ms\n", res, elapsed); print("semacquire(&sem, 1): returned %lld, elapsed = %d ms\n", res, elapsed);
@ -114,7 +114,7 @@ main(void)
/* verify that tsemacquire are NOT interrupted */ /* verify that tsemacquire are NOT interrupted */
fprint(2, "verify that tsemacquire are NOT interrupted\n", elapsed); fprint(2, "verify that tsemacquire are NOT interrupted\n", elapsed);
start = nsec(); start = nsec();
wkup = awake(500); wkup = sys_awake(500);
res = tsemacquire(&sem, 1500); res = tsemacquire(&sem, 1500);
elapsed = (nsec() - start) / (1000 * 1000); elapsed = (nsec() - start) / (1000 * 1000);
if(verbose) if(verbose)
@ -131,9 +131,9 @@ main(void)
print("FAIL: pipe\n"); print("FAIL: pipe\n");
exits("FAIL"); exits("FAIL");
} }
wkup = awake(1000); wkup = sys_awake(1000);
start = nsec(); start = nsec();
res = read(fds[0], buf, 1); res = jehanne_read(fds[0], buf, 1);
elapsed = (nsec() - start) / (1000 * 1000); elapsed = (nsec() - start) / (1000 * 1000);
if(verbose) if(verbose)
fprint(2, "read(fds[0], buf, 1) returned %lld, elapsed = %d ms\n", res, elapsed); fprint(2, "read(fds[0], buf, 1) returned %lld, elapsed = %d ms\n", res, elapsed);
@ -149,7 +149,7 @@ main(void)
print("FAIL: pipe\n"); print("FAIL: pipe\n");
exits("FAIL"); exits("FAIL");
} }
wkup = awake(1000); wkup = sys_awake(1000);
start = nsec(); start = nsec();
res = writeTillBlock(fds[0]); res = writeTillBlock(fds[0]);
elapsed = (nsec() - start) / (1000 * 1000); elapsed = (nsec() - start) / (1000 * 1000);

View File

@ -22,8 +22,8 @@ void
handler(void *v, char *s) handler(void *v, char *s)
{ {
int64_t wakeup; int64_t wakeup;
wakeup = awake(1000); wakeup = sys_awake(1000);
while(rendezvous(&wakeup, (void*)1) == (void*)~0) while(sys_rendezvous(&wakeup, (void*)1) == (void*)~0)
if(jehanne_awakened(wakeup)){ if(jehanne_awakened(wakeup)){
print("PASS\n"); print("PASS\n");
exits(nil); exits(nil);
@ -39,12 +39,12 @@ main(int argc, char**argv)
if(argc > 1){ if(argc > 1){
fd = ocreate(argv[1], OWRITE, 0666); fd = ocreate(argv[1], OWRITE, 0666);
dup(fd, 1); dup(fd, 1);
close(fd); sys_close(fd);
} }
if (notify(handler)){ if (sys_notify(handler)){
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("notify fails"); exits("sys_notify fails");
} }
print("%s %d: waiting for note", argv[0], getpid()); print("%s %d: waiting for note", argv[0], getpid());

View File

@ -22,8 +22,8 @@ void
handler(void *v, char *s) handler(void *v, char *s)
{ {
int64_t wakeup; int64_t wakeup;
wakeup = awake(1000); wakeup = sys_awake(1000);
while(rendezvous(&wakeup, (void*)1) == (void*)~0) while(sys_rendezvous(&wakeup, (void*)1) == (void*)~0)
if(jehanne_awakened(wakeup)){ if(jehanne_awakened(wakeup)){
print("PASS\n"); print("PASS\n");
exits(nil); exits(nil);
@ -40,12 +40,12 @@ main(int argc, char**argv)
if(argc > 1){ if(argc > 1){
fd = ocreate(argv[1], OWRITE, 0666); fd = ocreate(argv[1], OWRITE, 0666);
dup(fd, 1); dup(fd, 1);
close(fd); sys_close(fd);
} }
if (notify(handler)){ if (sys_notify(handler)){
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("notify fails"); exits("sys_notify fails");
} }
print("%s %d: waiting for note", argv[0], getpid()); print("%s %d: waiting for note", argv[0], getpid());

View File

@ -23,7 +23,7 @@ main(void)
{ {
long b, b1; long b, b1;
b = create("#0/brk/set", -1, 16*1024*1024); b = sys_create("#0/brk/set", -1, 16*1024*1024);
if(b >= 0){ if(b >= 0){
print("FAIL: create returned fd %d.\n", b); print("FAIL: create returned fd %d.\n", b);
exits("FAIL"); exits("FAIL");

View File

@ -1,8 +1,8 @@
#!/cmd/rc #!/cmd/rc
rfork sys_rfork
@{rfork n; mkdir '#σc'/testshr; ramfs -S testshr; echo 3 > '#σc'/testshr/ramfs <>[3]/srv/testshr; echo PASS > '#σ'/testshr/file } @{sys_rfork n; mkdir '#σc'/testshr; ramfs -S testshr; echo 3 > '#σc'/testshr/ramfs <>[3]/srv/testshr; echo PASS > '#σ'/testshr/file }
bind '#σ' /shr bind '#σ' /shr

View File

@ -27,41 +27,41 @@ main(void)
char buf[256]; char buf[256];
int fd, r; int fd, r;
fd = open("/fd/0ctl", OREAD|OCEXEC); fd = sys_open("/fd/0ctl", OREAD|OCEXEC);
if(fd < 0) if(fd < 0)
goto Fail; goto Fail;
r = read(fd, buf, sizeof(buf)); r = jehanne_read(fd, buf, sizeof(buf));
if(r < 0) if(r < 0)
goto Fail; goto Fail;
close(fd); sys_close(fd);
print("Got 0ctl: %s\n", buf); print("Got 0ctl: %s\n", buf);
fd = open("/fd/1ctl", OREAD|OCEXEC); fd = sys_open("/fd/1ctl", OREAD|OCEXEC);
if(fd < 0) if(fd < 0)
goto Fail; goto Fail;
r = read(fd, buf, sizeof(buf)); r = jehanne_read(fd, buf, sizeof(buf));
if(r < 0) if(r < 0)
goto Fail; goto Fail;
close(fd); sys_close(fd);
print("Got 1ctl: %s\n", buf); print("Got 1ctl: %s\n", buf);
fd = open("/fd/2ctl", OREAD|OCEXEC); fd = sys_open("/fd/2ctl", OREAD|OCEXEC);
if(fd < 0) if(fd < 0)
goto Fail; goto Fail;
r = read(fd, buf, sizeof(buf)); r = jehanne_read(fd, buf, sizeof(buf));
if(r < 0) if(r < 0)
goto Fail; goto Fail;
print("Got 2ctl: %s\n", buf); print("Got 2ctl: %s\n", buf);
snprint(buf, sizeof(buf), "/fd/%dctl", fd); snprint(buf, sizeof(buf), "/fd/%dctl", fd);
fd = open(buf, OREAD); fd = sys_open(buf, OREAD);
if(fd < 0) if(fd < 0)
goto Fail; goto Fail;
r = read(fd, buf, sizeof(buf)); r = jehanne_read(fd, buf, sizeof(buf));
if(r < 0) if(r < 0)
goto Fail; goto Fail;
print("Got: %s\n", buf); print("Got: %s\n", buf);
close(fd); sys_close(fd);
exits(nil); exits(nil);
Fail: Fail:

View File

@ -17,7 +17,7 @@ catcher(void *u, char *s)
err = s; err = s;
notejmp(u, errj, 0); notejmp(u, errj, 0);
} }
noted(NDFLT); sys_noted(NDFLT);
} }
void void
@ -56,7 +56,7 @@ main(void)
q = d2l.l; q = d2l.l;
err = 0; err = 0;
notify(catcher); sys_notify(catcher);
setjmp(errj); setjmp(errj);
if(err){ if(err){
fprint(2, "FAIL: %s\n", err); fprint(2, "FAIL: %s\n", err);

View File

@ -15,9 +15,9 @@ main(void)
{ {
static int c; static int c;
int pid; int pid;
pid = rfork(RFMEM|RFPROC); pid = sys_rfork(RFMEM|RFPROC);
if (pid < 0) { if (pid < 0) {
print("FAIL: rfork\n"); print("FAIL: sys_rfork\n");
exits("FAIL"); exits("FAIL");
} }
if (pid > 0) { if (pid > 0) {

View File

@ -21,8 +21,8 @@
int r1; int r1;
int r2; int r2;
#define CHILD_READY(pid) ((long)rendezvous(&r1, (void*)(~(pid)))) #define CHILD_READY(pid) ((long)sys_rendezvous(&r1, (void*)(~(pid))))
//#define C2P_READY(pid) ((long)rendezvous(&r2, (void*)(~(pid)))) //#define C2P_READY(pid) ((long)sys_rendezvous(&r2, (void*)(~(pid))))
int *__target_pid; int *__target_pid;
@ -30,7 +30,7 @@ static void
forwarding_note_handler(void *ureg, char *note) forwarding_note_handler(void *ureg, char *note)
{ {
postnote(PNPROC, *__target_pid, note); postnote(PNPROC, *__target_pid, note);
noted(NDFLT); sys_noted(NDFLT);
} }
static void static void
@ -49,24 +49,24 @@ crazy_fork(void)
int p2c; int p2c;
long c2p = -1, child = -1; long c2p = -1, child = -1;
switch(p2c = rfork(RFPROC|RFMEM)){ switch(p2c = sys_rfork(RFPROC|RFMEM)){
case -1: case -1:
return -1; return -1;
case 0: case 0:
switch(c2p = rfork(RFPROC|RFMEM)){ switch(c2p = sys_rfork(RFPROC|RFMEM)){
case -1: case -1:
exits("rfork (c2p)"); exits("sys_rfork (c2p)");
case 0: case 0:
switch(child = fork()){ switch(child = fork()){
case -1: case -1:
exits("rfork (child)"); exits("sys_rfork (child)");
case 0: case 0:
return 0; return 0;
default: default:
while(CHILD_READY(child) == -1) while(CHILD_READY(child) == -1)
; ;
*__target_pid = father; *__target_pid = father;
notify(forwarding_note_handler); sys_notify(forwarding_note_handler);
donothing(); donothing();
} }
default: default:
@ -74,7 +74,7 @@ crazy_fork(void)
; ;
child = ~child; child = ~child;
*__target_pid = child; *__target_pid = child;
notify(forwarding_note_handler); sys_notify(forwarding_note_handler);
donothing(); donothing();
} }
default: default:
@ -113,13 +113,13 @@ main(void)
case 0: case 0:
print("child is %d; child's parent is %d\n", getpid(), getppid()); print("child is %d; child's parent is %d\n", getpid(), getppid());
*__target_pid = getppid(); *__target_pid = getppid();
notify(forwarding_note_handler); sys_notify(forwarding_note_handler);
/* wait to be killed */ /* wait to be killed */
donothing(); donothing();
break; break;
default: default:
print("father is %d; forked child is %d\n", getpid(), c); print("father is %d; forked child is %d\n", getpid(), c);
sleep(1000); /* give children time to notify() */ sleep(1000); /* give children time to sys_notify() */
print("starting note chain\n"); print("starting note chain\n");
postnote(PNPROC, c, "die"); postnote(PNPROC, c, "die");
/* wait to be killed by the chain */ /* wait to be killed by the chain */

View File

@ -18,7 +18,7 @@ catcher(void *u, char *s)
err = s; err = s;
notejmp(u, errj, 0); notejmp(u, errj, 0);
} }
noted(NDFLT); sys_noted(NDFLT);
} }
void void
@ -51,7 +51,7 @@ main(void)
int exp; int exp;
err = 0; err = 0;
notify(catcher); sys_notify(catcher);
setjmp(errj); setjmp(errj);
if(err){ if(err){
print("FAIL: %s\n", err); print("FAIL: %s\n", err);

View File

@ -23,21 +23,21 @@ main(void)
{ {
int pid; int pid;
rfork(RFNAMEG); sys_rfork(RFNAMEG);
pid = getmainpid(); // this comes from exec() syscall pid = getmainpid(); // this comes from exec() syscall
if(getpid() != pid){ if(getpid() != pid){
print("FAIL: getpid() != getmainpid()\n"); print("FAIL: getpid() != getmainpid()\n");
exits("FAIL"); exits("FAIL");
} }
rfork(RFNOMNT); sys_rfork(RFNOMNT);
if(getpid() != pid){ if(getpid() != pid){
print("FAIL: rfork(RFNOMNT); getpid() != getmainpid()\n"); print("FAIL: sys_rfork(RFNOMNT); getpid() != getmainpid()\n");
exits("FAIL"); exits("FAIL");
} }
rfork(RFNOMNT|RFCNAMEG); sys_rfork(RFNOMNT|RFCNAMEG);
if(getpid() != pid){ if(getpid() != pid){
print("FAIL: rfork(RFNOMNT|RFCNAMEG)); getpid() != getmainpid()\n"); print("FAIL: sys_rfork(RFNOMNT|RFCNAMEG)); getpid() != getmainpid()\n");
exits("FAIL"); exits("FAIL");
} }

View File

@ -24,22 +24,22 @@ main(void)
int ppid; int ppid;
Waitmsg *w; Waitmsg *w;
rfork(RFNAMEG); sys_rfork(RFNAMEG);
if(rfork(RFPROC) == 0){ if(sys_rfork(RFPROC) == 0){
ppid = getmainpid(); // this comes from exec() syscall ppid = getmainpid(); // this comes from exec() syscall
if(getppid() != ppid){ if(getppid() != ppid){
print("FAIL: getppid() != getmainpid()\n"); print("FAIL: getppid() != getmainpid()\n");
exits("FAIL"); exits("FAIL");
} }
rfork(RFNOMNT); sys_rfork(RFNOMNT);
if(getppid() != ppid){ if(getppid() != ppid){
print("FAIL: rfork(RFNOMNT); getppid() != getmainpid()\n"); print("FAIL: sys_rfork(RFNOMNT); getppid() != getmainpid()\n");
exits("FAIL"); exits("FAIL");
} }
rfork(RFNOMNT|RFCNAMEG); sys_rfork(RFNOMNT|RFCNAMEG);
if(getppid() != ppid){ if(getppid() != ppid){
print("FAIL: rfork(RFNOMNT|RFCNAMEG)); getppid() != getmainpid()\n"); print("FAIL: sys_rfork(RFNOMNT|RFCNAMEG)); getppid() != getmainpid()\n");
exits("FAIL"); exits("FAIL");
} }
exits(nil); exits(nil);

View File

@ -48,9 +48,9 @@ main(void)
pipe(p); pipe(p);
memset(buf, 0, sizeof buf); memset(buf, 0, sizeof buf);
switch((pid = rfork(RFPROC))){ switch((pid = sys_rfork(RFPROC))){
case -1: case -1:
fprint(2, "FAIL: rfork: %r\n"); fprint(2, "FAIL: sys_rfork: %r\n");
exits("FAIL"); exits("FAIL");
break; break;
case 0: case 0:
@ -60,7 +60,7 @@ main(void)
fprint(2, "address %p, msg %s\n", msg, msg); fprint(2, "address %p, msg %s\n", msg, msg);
fprint(2, "sending %s\n", buf); fprint(2, "sending %s\n", buf);
} }
if(write(p[0], buf, i) < 0){ if(jehanne_write(p[0], buf, i) < 0){
fprint(2, "FAIL: write: %r\n"); fprint(2, "FAIL: write: %r\n");
exits("FAIL"); exits("FAIL");
} }
@ -69,7 +69,7 @@ main(void)
default: default:
buf[0] = '0'; buf[0] = '0';
buf[1] = 'x'; buf[1] = 'x';
if((i = read(p[1], buf+2, (sizeof buf) - 2)) <= 0){ if((i = jehanne_read(p[1], buf+2, (sizeof buf) - 2)) <= 0){
fprint(2, "FAIL: read: %r\n"); fprint(2, "FAIL: read: %r\n");
exits("FAIL"); exits("FAIL");
} }

View File

@ -48,9 +48,9 @@ main(void)
pipe(p); pipe(p);
memset(buf, 0, sizeof buf); memset(buf, 0, sizeof buf);
switch((pid = rfork(RFPROC|RFMEM))){ switch((pid = sys_rfork(RFPROC|RFMEM))){
case -1: case -1:
fprint(2, "FAIL: rfork: %r\n"); fprint(2, "FAIL: sys_rfork: %r\n");
exits("FAIL"); exits("FAIL");
break; break;
case 0: case 0:
@ -60,7 +60,7 @@ main(void)
fprint(2, "address %p, msg %s\n", msg, msg); fprint(2, "address %p, msg %s\n", msg, msg);
fprint(2, "sending %s\n", buf); fprint(2, "sending %s\n", buf);
} }
if(write(p[0], buf, i) < 0){ if(jehanne_write(p[0], buf, i) < 0){
fprint(2, "FAIL: write: %r\n"); fprint(2, "FAIL: write: %r\n");
exits("FAIL"); exits("FAIL");
} }
@ -69,7 +69,7 @@ main(void)
default: default:
buf[0] = '0'; buf[0] = '0';
buf[1] = 'x'; buf[1] = 'x';
if((i = read(p[1], buf+2, (sizeof buf) - 2)) <= 0){ if((i = jehanne_read(p[1], buf+2, (sizeof buf) - 2)) <= 0){
fprint(2, "FAIL: read: %r\n"); fprint(2, "FAIL: read: %r\n");
exits("FAIL"); exits("FAIL");
} }

View File

@ -37,7 +37,7 @@ handler(void *v, char *s)
print("wait after %s terminated\n", s); print("wait after %s terminated\n", s);
waited++; waited++;
} }
noted(NCONT); sys_noted(NCONT);
} }
void void
@ -47,12 +47,12 @@ main(int argc, char**argv)
if(argc > 1){ if(argc > 1){
fd = ocreate(argv[1], OWRITE, 0666); fd = ocreate(argv[1], OWRITE, 0666);
dup(fd, 1); dup(fd, 1);
close(fd); sys_close(fd);
} }
if (notify(handler)){ if (sys_notify(handler)){
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("notify fails"); exits("sys_notify fails");
} }
print("note handler installed\n"); print("note handler installed\n");

View File

@ -16,9 +16,9 @@ void
callinsn(char *name, char *buf) callinsn(char *name, char *buf)
{ {
void (*f)(void); void (*f)(void);
if (notify(handler)){ if (sys_notify(handler)){
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("notify fails"); exits("sys_notify fails");
} }
@ -31,9 +31,9 @@ callinsn(char *name, char *buf)
void void
writeptr(char *name, void *ptr) writeptr(char *name, void *ptr)
{ {
if (notify(handler)){ if (sys_notify(handler)){
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("notify fails"); exits("sys_notify fails");
} }
*(uintptr_t*)ptr = 0xdeadbeef; *(uintptr_t*)ptr = 0xdeadbeef;
@ -48,9 +48,9 @@ main(void)
char stk[128]; char stk[128];
char *mem; char *mem;
switch(rfork(RFMEM|RFPROC)){ switch(sys_rfork(RFMEM|RFPROC)){
case -1: case -1:
sysfatal("rfork"); sysfatal("sys_rfork");
case 0: case 0:
stk[0] = RET; stk[0] = RET;
callinsn("exec stack", stk); callinsn("exec stack", stk);
@ -59,9 +59,9 @@ main(void)
waitpid(); waitpid();
} }
switch(rfork(RFMEM|RFPROC)){ switch(sys_rfork(RFMEM|RFPROC)){
case -1: case -1:
sysfatal("rfork"); sysfatal("sys_rfork");
case 0: case 0:
mem = malloc(128); mem = malloc(128);
mem[0] = RET; mem[0] = RET;
@ -71,9 +71,9 @@ main(void)
waitpid(); waitpid();
} }
switch(rfork(RFMEM|RFPROC)){ switch(sys_rfork(RFMEM|RFPROC)){
case -1: case -1:
sysfatal("rfork"); sysfatal("sys_rfork");
case 0: case 0:
writeptr("write code", (void*)&main); writeptr("write code", (void*)&main);
default: default:
@ -81,9 +81,9 @@ main(void)
waitpid(); waitpid();
} }
switch(rfork(RFMEM|RFPROC)){ switch(sys_rfork(RFMEM|RFPROC)){
case -1: case -1:
sysfatal("rfork"); sysfatal("sys_rfork");
case 0: case 0:
writeptr("write rodata", (void*)str); writeptr("write rodata", (void*)str);
default: default:

View File

@ -13,9 +13,9 @@ void
main(void) main(void)
{ {
void (*f)(void) = nil; void (*f)(void) = nil;
if (notify(handler)){ if (sys_notify(handler)){
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("notify fails"); exits("sys_notify fails");
} }
f(); f();

View File

@ -24,20 +24,20 @@ void
setup_ns(void) setup_ns(void)
{ {
int fd; int fd;
if(bind("#|", "/", MREPL) < 0){ if(sys_bind("#|", "/", MREPL) < 0){
print("FAIL: rfork\n"); print("FAIL: sys_rfork\n");
write(sync[0], "FAIL", 5); jehanne_write(sync[0], "FAIL", 5);
return; return;
} }
fd = open("/data", OWRITE); fd = sys_open("/data", OWRITE);
if(fd < 0){ if(fd < 0){
print("FAIL: open(/data)\n"); print("FAIL: sys_open(/data)\n");
write(sync[0], "FAIL", 5); jehanne_write(sync[0], "FAIL", 5);
return; return;
} }
write(fd, "hi!", 4); jehanne_write(fd, "hi!", 4);
close(fd); sys_close(fd);
write(sync[0], "DONE", 5); jehanne_write(sync[0], "DONE", 5);
sleep(10); sleep(10);
} }
@ -47,12 +47,12 @@ main(void)
int child, fd; int child, fd;
char buf[64]; char buf[64];
rfork(RFNOTEG|RFNAMEG); sys_rfork(RFNOTEG|RFNAMEG);
pipe(sync); pipe(sync);
switch(child = rfork(RFPROC|RFCNAMEG|RFNOWAIT)){ switch(child = sys_rfork(RFPROC|RFCNAMEG|RFNOWAIT)){
case -1: case -1:
print("FAIL: rfork\n"); print("FAIL: sys_rfork\n");
exits("FAIL"); exits("FAIL");
case 0: case 0:
setup_ns(); setup_ns();
@ -61,27 +61,27 @@ main(void)
break; break;
} }
read(sync[1], buf, sizeof(buf)); jehanne_read(sync[1], buf, sizeof(buf));
if(strcmp("DONE", buf) != 0) if(strcmp("DONE", buf) != 0)
exits("FAIL"); exits("FAIL");
snprint(buf, sizeof(buf), "/proc/%d/ns", child); snprint(buf, sizeof(buf), "/proc/%d/ns", child);
fd = open(buf, OWRITE); fd = sys_open(buf, OWRITE);
if(fd < 0){ if(fd < 0){
print("FAIL: open(%s)\n", buf); print("FAIL: sys_open(%s)\n", buf);
exits("FAIL"); exits("FAIL");
} }
write(fd, "clone", 6); jehanne_write(fd, "clone", 6);
close(fd); sys_close(fd);
memset(buf, 0, sizeof(buf)); memset(buf, 0, sizeof(buf));
fd = open("/data1", OREAD); fd = sys_open("/data1", OREAD);
if(fd < 0){ if(fd < 0){
print("FAIL: open(/data1)\n"); print("FAIL: sys_open(/data1)\n");
exits("FAIL"); exits("FAIL");
} }
read(fd, buf, sizeof(buf)); jehanne_read(fd, buf, sizeof(buf));
close(fd); sys_close(fd);
if(strcmp("hi!", buf) == 0){ if(strcmp("hi!", buf) == 0){
print("PASS: read '%s' from /data1\n", buf); print("PASS: read '%s' from /data1\n", buf);

View File

@ -14,7 +14,7 @@ handler(void *v, char *s)
{ {
print("%d: %d iterations\n", id, i); print("%d: %d iterations\n", id, i);
if (intr++ < 16) if (intr++ < 16)
noted(NCONT); sys_noted(NCONT);
exits("too many interrupts"); exits("too many interrupts");
} }
@ -23,8 +23,8 @@ main(int argc, char *argv[])
{ {
int pid; int pid;
if (notify(handler)){ if (sys_notify(handler)){
sysfatal("notify: %r"); sysfatal("sys_notify: %r");
} }
if (argc > 1) if (argc > 1)
@ -57,11 +57,11 @@ main(int argc, char *argv[])
for(i = 0; debug && i < nring; i++ ) fprint(2, "pfd[%d,%d]\n", pfd[i*2],pfd[i*2+1]); for(i = 0; debug && i < nring; i++ ) fprint(2, "pfd[%d,%d]\n", pfd[i*2],pfd[i*2+1]);
for(i = 0; i < niter; i++) { for(i = 0; i < niter; i++) {
if (debug) fprint(2, "%d: write %d\n", id, pfd[(id%nring)*2+1]); if (debug) fprint(2, "%d: write %d\n", id, pfd[(id%nring)*2+1]);
int amt = write(pfd[(id%nring)*2+1], data, sizeof(data)); int amt = jehanne_write(pfd[(id%nring)*2+1], data, sizeof(data));
if (amt < sizeof(data)) if (amt < sizeof(data))
sysfatal(smprint("%d: write only got %d of %d: %r", id, amt, sizeof(data))); sysfatal(smprint("%d: write only got %d of %d: %r", id, amt, sizeof(data)));
if (debug) print("%d: read %d\n", id, pfd[(id%nring)*2]); if (debug) print("%d: read %d\n", id, pfd[(id%nring)*2]);
amt = read(pfd[(id%nring)*2], data, sizeof(data)); amt = jehanne_read(pfd[(id%nring)*2], data, sizeof(data));
if (amt < sizeof(data)) if (amt < sizeof(data))
sysfatal(smprint("%d: read only got %d of %d: %r", id, amt, sizeof(data))); sysfatal(smprint("%d: read only got %d of %d: %r", id, amt, sizeof(data)));
} }

View File

@ -73,19 +73,19 @@ main(void)
exits("atnotify fails"); exits("atnotify fails");
} }
rfork(RFNOTEG|RFNAMEG); sys_rfork(RFNOTEG|RFNAMEG);
if(rfork(RFPROC) == 0){ if(sys_rfork(RFPROC) == 0){
ppid = getppid(); // this comes from exec() syscall ppid = getppid(); // this comes from exec() syscall
postnote(PNPROC, ppid, "proc"); postnote(PNPROC, ppid, "proc");
postnote(PNGROUP, getpid(), "group"); postnote(PNGROUP, getpid(), "group");
rfork(RFNOMNT); sys_rfork(RFNOMNT);
postnote(PNPROC, ppid, "proc"); postnote(PNPROC, ppid, "proc");
postnote(PNGROUP, getpid(), "group"); postnote(PNGROUP, getpid(), "group");
rfork(RFNOMNT|RFCNAMEG); sys_rfork(RFNOMNT|RFCNAMEG);
if(postnote(PNPROC, ppid, "proc") != -1 || if(postnote(PNPROC, ppid, "proc") != -1 ||
postnote(PNGROUP, getpid(), "group") != -1){ postnote(PNGROUP, getpid(), "group") != -1){
exits("FAIL"); exits("FAIL");

View File

@ -27,7 +27,7 @@ main(int argc, char *argv[])
} }
if (pid == 0) { if (pid == 0) {
char *args[] = {"ps", nil}; char *args[] = {"ps", nil};
exec("/arch/amd64/cmd/ps", args); sys_exec("/arch/amd64/cmd/ps", (const char **)args);
fprint(2,"Exec fails: %r\n"); fprint(2,"Exec fails: %r\n");
print("FAIL\n"); print("FAIL\n");
exits("FAIL"); exits("FAIL");

View File

@ -27,10 +27,10 @@ int spin;
void void
main(void) main(void)
{ {
rfork(RFNOTEG); sys_rfork(RFNOTEG);
switch(rfork(RFPROC|RFMEM)){ switch(sys_rfork(RFPROC|RFMEM)){
case -1: case -1:
exits("rfork"); exits("sys_rfork");
case 0: case 0:
spin = 1; spin = 1;
while(spin) while(spin)
@ -40,9 +40,9 @@ main(void)
while(spin == 0) while(spin == 0)
; ;
} }
switch(rfork(RFPROC|RFMEM)){ switch(sys_rfork(RFPROC|RFMEM)){
case -1: case -1:
exits("rfork"); exits("sys_rfork");
case 0: case 0:
spin = 2; spin = 2;
while(spin) while(spin)

View File

@ -25,17 +25,17 @@ main(int argc, char**argv)
char *path; char *path;
path = smprint("/proc/%d/ctl", getpid()); path = smprint("/proc/%d/ctl", getpid());
fd = open(path, OWRITE); fd = sys_open(path, OWRITE);
if(fd < 0){ if(fd < 0){
print("FAIL: open"); print("FAIL: open");
exits("FAIL"); exits("FAIL");
} }
n = write(fd, "stop", 4); n = jehanne_write(fd, "stop", 4);
if(n < 0){ if(n < 0){
print("FAIL: write"); print("FAIL: write");
exits("FAIL"); exits("FAIL");
} }
close(fd); sys_close(fd);
print("PASS\n"); print("PASS\n");
exits("PASS"); exits("PASS");
} }

View File

@ -11,14 +11,14 @@ main(void)
fail = 0; fail = 0;
for(i = 0; i < 10000; i++){ for(i = 0; i < 10000; i++){
fd = open("/proc/1/status", OREAD); fd = sys_open("/proc/1/status", OREAD);
n = read(fd, buf, sizeof buf); n = jehanne_read(fd, buf, sizeof buf);
if(i != 0 && n != oldn){ if(i != 0 && n != oldn){
fprint(2, "read %d, want %d\n", n, oldn); fprint(2, "read %d, want %d\n", n, oldn);
fail++; fail++;
} }
oldn = n; oldn = n;
close(fd); sys_close(fd);
} }
print("PASS\n"); print("PASS\n");
exits("PASS"); exits("PASS");

View File

@ -13,7 +13,7 @@ main(void)
int fd, n; int fd, n;
char buf[1]; char buf[1];
fd = open("/dev/sysstat", OREAD); fd = sys_open("/dev/sysstat", OREAD);
if(fd < 0){ if(fd < 0){
print("FAIL: couldn't open /dev/sysstat: %r\n"); print("FAIL: couldn't open /dev/sysstat: %r\n");
exits("FAIL"); exits("FAIL");
@ -21,13 +21,13 @@ main(void)
ret = 0; ret = 0;
for(;;){ for(;;){
n = read(fd, buf, sizeof(buf)); n = jehanne_read(fd, buf, sizeof(buf));
if(n <= 0) if(n <= 0)
break; break;
if(n > sizeof(buf)) if(n > sizeof(buf))
ret = 1; ret = 1;
} }
close(fd); sys_close(fd);
if(ret){ if(ret){
print("FAIL: %d bytes read from /dev/sysstat\n", n); print("FAIL: %d bytes read from /dev/sysstat\n", n);

View File

@ -17,7 +17,7 @@ tsemloop(void)
sleep(10); sleep(10);
incr++; incr++;
i++; i++;
semrelease(&x, 1); sys_semrelease(&x, 1);
} else { } else {
//print("pid %d timeout\n", getpid()); //print("pid %d timeout\n", getpid());
} }
@ -31,10 +31,10 @@ semloop(void)
int i; int i;
i = 0; i = 0;
while(i < nloops){ while(i < nloops){
if(semacquire(&x, 1)){ if(sys_semacquire(&x, 1)){
incr++; incr++;
i++; i++;
semrelease(&x, 1); sys_semrelease(&x, 1);
} else { } else {
sysfatal("semacquire failed"); sysfatal("semacquire failed");
} }
@ -49,9 +49,9 @@ main(void)
incr = 0; incr = 0;
for(i = 0; i < nprocs; i++){ for(i = 0; i < nprocs; i++){
switch(rfork(RFMEM|RFPROC)){ switch(sys_rfork(RFMEM|RFPROC)){
case -1: case -1:
sysfatal("rfork"); sysfatal("sys_rfork");
case 0: case 0:
tsemloop(); tsemloop();
exits("PASS"); exits("PASS");
@ -69,9 +69,9 @@ main(void)
incr = 0; incr = 0;
for(i = 0; i < nprocs; i++){ for(i = 0; i < nprocs; i++){
switch(rfork(RFMEM|RFPROC)){ switch(sys_rfork(RFMEM|RFPROC)){
case -1: case -1:
sysfatal("rfork"); sysfatal("sys_rfork");
case 0: case 0:
semloop(); semloop();
exits("PASS"); exits("PASS");
@ -89,9 +89,9 @@ main(void)
incr = 0; incr = 0;
for(i = 0; i < nprocs; i++){ for(i = 0; i < nprocs; i++){
switch(rfork(RFMEM|RFPROC)){ switch(sys_rfork(RFMEM|RFPROC)){
case -1: case -1:
sysfatal("rfork"); sysfatal("sys_rfork");
case 0: case 0:
if((i&1) == 0) if((i&1) == 0)
semloop(); semloop();

View File

@ -11,13 +11,13 @@ main(void)
char buf[1]; char buf[1];
int i; int i;
// Just to be sure. // Just to be sure.
if (close(3) >= 0) { if (sys_close(3) >= 0) {
print("waserror: close of 3 did not get an error\n"); print("waserror: sys_close of 3 did not get an error\n");
exits("FAIL"); exits("FAIL");
} }
for(i = 0; i < 100000; i++) { for(i = 0; i < 100000; i++) {
if (read(3, buf, 1) >= 0){ if (jehanne_read(3, buf, 1) >= 0){
print("waserror: read of 3 did not get an error\n"); print("waserror: read of 3 did not get an error\n");
exits("FAIL"); exits("FAIL");
} }

View File

@ -52,7 +52,7 @@ main(void)
} }
int fd; int fd;
fd = open("#|", ORDWR); fd = sys_open("#|", ORDWR);
sys_mount(fd, -1, "/tmp", MREPL, "", 'M'); sys_mount(fd, -1, "/tmp", MREPL, "", 'M');
print("PASS\n"); print("PASS\n");

View File

@ -29,7 +29,7 @@ main(void)
memset(msg, '1', BUFSZ); memset(msg, '1', BUFSZ);
if((w = write(2, msg, BUFSZ)) < BUFSZ){ if((w = jehanne_write(2, msg, BUFSZ)) < BUFSZ){
print("\nFAIL, written %d instead of %d\n", w, BUFSZ); print("\nFAIL, written %d instead of %d\n", w, BUFSZ);
exits("FAIL"); exits("FAIL");
} }

View File

@ -20,40 +20,40 @@ fdfork(int fd, int post)
if(pfd == -1) if(pfd == -1)
sysfatal("fdfork: create: %r"); sysfatal("fdfork: create: %r");
snprint(buf, sizeof buf, "%d", ch[0]); snprint(buf, sizeof buf, "%d", ch[0]);
if(write(pfd, buf, strlen(buf)) != strlen(buf)){ if(jehanne_write(pfd, buf, strlen(buf)) != strlen(buf)){
remove(path); sys_remove(path);
sysfatal("fdfork: post '%s': %r", buf); sysfatal("fdfork: post '%s': %r", buf);
} }
close(ch[0]); sys_close(ch[0]);
if(write(fd, path, len) != len){ if(jehanne_write(fd, path, len) != len){
remove(path); sys_remove(path);
sysfatal("fdfork: write to peer: %r"); sysfatal("fdfork: write to peer: %r");
} }
len = read(fd, buf, sizeof buf-1); len = jehanne_read(fd, buf, sizeof buf-1);
if(len <= 0){ if(len <= 0){
remove(path); sys_remove(path);
sysfatal("fdfork: read ack: %s from peer: %r", len == -1 ? "error" : "eof"); sysfatal("fdfork: read ack: %s from peer: %r", len == -1 ? "error" : "eof");
} }
buf[len] = '\0'; buf[len] = '\0';
if(strcmp(path, buf)){ if(strcmp(path, buf)){
remove(path); sys_remove(path);
print("ack from wrong peer: got '%s' want '%s'\n", buf, path); print("ack from wrong peer: got '%s' want '%s'\n", buf, path);
sysfatal("ack from wrong peer"); sysfatal("ack from wrong peer");
} }
close(pfd); sys_close(pfd);
//remove(path); //sys_remove(path);
return ch[1]; return ch[1];
} else { } else {
len = read(fd, path, sizeof path-1); len = jehanne_read(fd, path, sizeof path-1);
if(len <= 0) if(len <= 0)
sysfatal("fdfork: read path: %s from peer: %r", len == -1 ? "error" : "eof"); sysfatal("fdfork: read path: %s from peer: %r", len == -1 ? "error" : "eof");
path[len] = '\0'; path[len] = '\0';
pfd = open(path, OWRITE); pfd = sys_open(path, OWRITE);
if(pfd == -1) if(pfd == -1)
sysfatal("fdfork: open: %r"); sysfatal("fdfork: open: %r");
if(write(fd, path, len) != len) if(jehanne_write(fd, path, len) != len)
sysfatal("fdfork: write ack to peer: %r"); sysfatal("fdfork: write ack to peer: %r");
return pfd; return pfd;
@ -61,7 +61,7 @@ fdfork(int fd, int post)
} }
int int
hyperfork(int *fd, int id, int dim) hypesys_rfork(int *fd, int id, int dim)
{ {
int chfd[dim]; int chfd[dim];
int ch[2]; int ch[2];
@ -72,20 +72,20 @@ hyperfork(int *fd, int id, int dim)
pipe(ch); pipe(ch);
switch(fork()){ switch(fork()){
case -1: case -1:
sysfatal("rfork"); sysfatal("sys_rfork");
case 0: case 0:
for(i = 0; i < dim; i++){ for(i = 0; i < dim; i++){
close(fd[i]); sys_close(fd[i]);
fd[i] = chfd[i]; fd[i] = chfd[i];
} }
id |= 1 << dim; id |= 1 << dim;
close(ch[0]); sys_close(ch[0]);
fd[dim] = ch[1]; fd[dim] = ch[1];
break; break;
default: default:
for(i = 0; i < dim; i++) for(i = 0; i < dim; i++)
close(chfd[i]); sys_close(chfd[i]);
close(ch[1]); sys_close(ch[1]);
fd[dim] = ch[0]; fd[dim] = ch[0];
break; break;
} }
@ -106,13 +106,13 @@ main(int argc, char *argv[])
id = 0; id = 0;
chdir("/srv"); chdir("/srv");
for(i = 0; i < dim; i++) for(i = 0; i < dim; i++)
id = hyperfork(fd, id, i); id = hypesys_rfork(fd, id, i);
for(i = 0; i < dim; i++){ for(i = 0; i < dim; i++){
int tlen, rlen; int tlen, rlen;
tlen = snprint(buf, sizeof buf, "hello %d\n", id); tlen = snprint(buf, sizeof buf, "hello %d\n", id);
write(fd[i], buf, tlen); jehanne_write(fd[i], buf, tlen);
rlen = read(fd[i], buf, sizeof buf-1); rlen = jehanne_read(fd[i], buf, sizeof buf-1);
buf[rlen] = '\0'; buf[rlen] = '\0';
snprint(buf2, sizeof buf2, "%d: %s", id, buf); snprint(buf2, sizeof buf2, "%d: %s", id, buf);
} }

View File

@ -43,7 +43,7 @@ spawnWaiter(Lock *l)
int pid; int pid;
int64_t start; int64_t start;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
/* wait for the alwaysLocked to be locked by the main process */ /* wait for the alwaysLocked to be locked by the main process */
@ -64,7 +64,7 @@ spawnWaiter(Lock *l)
break; break;
case -1: case -1:
print("spawnWaiter: %r\n"); print("spawnWaiter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
if(verbose) if(verbose)
@ -79,7 +79,7 @@ main(void)
int64_t start, elapsed, res; int64_t start, elapsed, res;
static Lock l; static Lock l;
rfork(RFNOTEG|RFREND); sys_rfork(RFNOTEG|RFREND);
rStart.l = &rl; rStart.l = &rl;
rCompleted.l = &rl; rCompleted.l = &rl;
resInWaiter = 0xff; resInWaiter = 0xff;
@ -87,7 +87,7 @@ main(void)
spawnWaiter(&l); spawnWaiter(&l);
jehanne_lock(&l); jehanne_lock(&l);
alarm(20000); /* global timeout, FAIL if reached */ sys_alarm(20000); /* global timeout, FAIL if reached */
if (!atnotify(failOnTimeout, 1)){ if (!atnotify(failOnTimeout, 1)){
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("atnotify fails"); exits("atnotify fails");

View File

@ -27,10 +27,10 @@ main(void)
test = (char **)privalloc(); test = (char **)privalloc();
*test = smprint("Hello from %d (at %p)\n", getpid(), test); *test = smprint("Hello from %d (at %p)\n", getpid(), test);
rfork(RFNOTEG); sys_rfork(RFNOTEG);
switch(rfork(RFPROC|RFMEM)){ switch(sys_rfork(RFPROC|RFMEM)){
case -1: case -1:
exits("rfork"); exits("sys_rfork");
case 0: case 0:
*test = smprint("Hello from %d (at %p)\n", getpid(), test); *test = smprint("Hello from %d (at %p)\n", getpid(), test);
spin = 1; spin = 1;
@ -43,9 +43,9 @@ main(void)
while(spin == 0) while(spin == 0)
; ;
} }
switch(rfork(RFPROC|RFMEM)){ switch(sys_rfork(RFPROC|RFMEM)){
case -1: case -1:
exits("rfork"); exits("sys_rfork");
case 0: case 0:
*test = smprint("Hello from %d (at %p)\n", getpid(), test); *test = smprint("Hello from %d (at %p)\n", getpid(), test);
spin = 2; spin = 2;

View File

@ -44,7 +44,7 @@ stopAllAfter(int seconds)
{ {
int pid; int pid;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
if(verbose) if(verbose)
@ -56,7 +56,7 @@ stopAllAfter(int seconds)
exits("FAIL"); exits("FAIL");
case -1: case -1:
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("rfork fails"); exits("sys_rfork fails");
default: default:
killerProc = pid; killerProc = pid;
atexit(killKiller); atexit(killKiller);
@ -131,7 +131,7 @@ spawnWaiter(int index)
int pid; int pid;
char * res; char * res;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
res = waiter(index); res = waiter(index);
@ -139,7 +139,7 @@ spawnWaiter(int index)
break; break;
case -1: case -1:
print("spawnWaiter: %r\n"); print("spawnWaiter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
if(verbose) if(verbose)
@ -157,7 +157,7 @@ main(int argc, char* argv[])
ARGBEGIN{ ARGBEGIN{
}ARGEND; }ARGEND;
rfork(RFNOTEG|RFREND); sys_rfork(RFNOTEG|RFREND);
rStart.l = &rl; rStart.l = &rl;
rCompleted.l = &rl; rCompleted.l = &rl;

View File

@ -46,7 +46,7 @@ stopAllAfter(int seconds)
{ {
int pid; int pid;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
if(verbose) if(verbose)
@ -58,7 +58,7 @@ stopAllAfter(int seconds)
exits("FAIL"); exits("FAIL");
case -1: case -1:
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("rfork fails"); exits("sys_rfork fails");
default: default:
killerProc = pid; killerProc = pid;
atexit(killKiller); atexit(killKiller);
@ -135,7 +135,7 @@ spawnWaiter(int index)
int pid; int pid;
char * res; char * res;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
res = waiter(index); res = waiter(index);
@ -143,7 +143,7 @@ spawnWaiter(int index)
break; break;
case -1: case -1:
print("spawnWaiter: %r\n"); print("spawnWaiter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
if(verbose) if(verbose)
@ -158,7 +158,7 @@ main(void)
int i; int i;
int64_t average, end; int64_t average, end;
rfork(RFNOTEG|RFREND); sys_rfork(RFNOTEG|RFREND);
rStart.l = &rl; rStart.l = &rl;
rCompleted.l = &rl; rCompleted.l = &rl;

View File

@ -44,7 +44,7 @@ stopAllAfter(int seconds)
{ {
int pid; int pid;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
if(verbose) if(verbose)
@ -56,7 +56,7 @@ stopAllAfter(int seconds)
exits("FAIL"); exits("FAIL");
case -1: case -1:
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("rfork fails"); exits("sys_rfork fails");
default: default:
killerProc = pid; killerProc = pid;
atexit(killKiller); atexit(killKiller);
@ -132,7 +132,7 @@ spawnWaiter(int index)
int pid; int pid;
char * res; char * res;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
res = waiter(index); res = waiter(index);
@ -140,7 +140,7 @@ spawnWaiter(int index)
break; break;
case -1: case -1:
print("spawnWaiter: %r\n"); print("spawnWaiter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
if(verbose) if(verbose)
@ -158,7 +158,7 @@ main(int argc, char* argv[])
ARGBEGIN{ ARGBEGIN{
}ARGEND; }ARGEND;
rfork(RFNOTEG|RFREND); sys_rfork(RFNOTEG|RFREND);
rStart.l = &rl; rStart.l = &rl;
rCompleted.l = &rl; rCompleted.l = &rl;

View File

@ -44,7 +44,7 @@ stopAllAfter(int seconds)
{ {
int pid; int pid;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
if(verbose) if(verbose)
@ -56,7 +56,7 @@ stopAllAfter(int seconds)
exits("FAIL"); exits("FAIL");
case -1: case -1:
fprint(2, "stopAllAfter: %r\n"); fprint(2, "stopAllAfter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
default: default:
if(verbose) if(verbose)
print("killer proc spawn: pid %d\n", getpid()); print("killer proc spawn: pid %d\n", getpid());
@ -132,7 +132,7 @@ spawnWaiter(int index)
int pid; int pid;
char * res; char * res;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
res = waiter(index); res = waiter(index);
@ -140,7 +140,7 @@ spawnWaiter(int index)
break; break;
case -1: case -1:
print("spawnWaiter: %r\n"); print("spawnWaiter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
if(verbose) if(verbose)
@ -158,7 +158,7 @@ main(int argc, char* argv[])
ARGBEGIN{ ARGBEGIN{
}ARGEND; }ARGEND;
rfork(RFNOTEG|RFREND); sys_rfork(RFNOTEG|RFREND);
rStart.l = &rl; rStart.l = &rl;
rCompleted.l = &rl; rCompleted.l = &rl;

View File

@ -46,7 +46,7 @@ stopAllAfter(int seconds)
{ {
int pid; int pid;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
if(verbose) if(verbose)
@ -58,7 +58,7 @@ stopAllAfter(int seconds)
exits("FAIL"); exits("FAIL");
case -1: case -1:
fprint(2, "stopAllAfter: %r\n"); fprint(2, "stopAllAfter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
default: default:
if(verbose) if(verbose)
print("killer proc spawn: pid %d\n", pid); print("killer proc spawn: pid %d\n", pid);
@ -136,7 +136,7 @@ spawnWaiter(int index)
int pid; int pid;
char * res; char * res;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
res = waiter(index); res = waiter(index);
@ -144,7 +144,7 @@ spawnWaiter(int index)
break; break;
case -1: case -1:
print("spawnWaiter: %r\n"); print("spawnWaiter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
if(verbose) if(verbose)
@ -162,7 +162,7 @@ main(int argc, char* argv[])
ARGBEGIN{ ARGBEGIN{
}ARGEND; }ARGEND;
rfork(RFNOTEG|RFREND); sys_rfork(RFNOTEG|RFREND);
rStart.l = &rl; rStart.l = &rl;
rCompleted.l = &rl; rCompleted.l = &rl;

View File

@ -44,7 +44,7 @@ stopAllAfter(int seconds)
{ {
int pid; int pid;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
if(verbose) if(verbose)
@ -56,7 +56,7 @@ stopAllAfter(int seconds)
exits("FAIL"); exits("FAIL");
case -1: case -1:
fprint(2, "stopAllAfter: %r\n"); fprint(2, "stopAllAfter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
default: default:
if(verbose) if(verbose)
print("killer proc spawn: pid %d\n", getpid()); print("killer proc spawn: pid %d\n", getpid());
@ -133,7 +133,7 @@ spawnWaiter(int index)
int pid, ls = lastspawn; int pid, ls = lastspawn;
char * res; char * res;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
++lastspawn; ++lastspawn;
@ -142,7 +142,7 @@ spawnWaiter(int index)
break; break;
case -1: case -1:
print("spawnWaiter: %r\n"); print("spawnWaiter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
while(ls == lastspawn) while(ls == lastspawn)
@ -162,7 +162,7 @@ main(int argc, char* argv[])
ARGBEGIN{ ARGBEGIN{
}ARGEND; }ARGEND;
rfork(RFNOTEG|RFREND); sys_rfork(RFNOTEG|RFREND);
rStart.l = &rl; rStart.l = &rl;
rCompleted.l = &rl; rCompleted.l = &rl;

View File

@ -45,7 +45,7 @@ stopAllAfter(int seconds)
{ {
int pid; int pid;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
if(verbose) if(verbose)
@ -57,7 +57,7 @@ stopAllAfter(int seconds)
exits("FAIL"); exits("FAIL");
case -1: case -1:
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("rfork fails"); exits("sys_rfork fails");
default: default:
killerProc = pid; killerProc = pid;
atexit(killKiller); atexit(killKiller);
@ -134,7 +134,7 @@ spawnsleeper(int index)
int pid; int pid;
char * res; char * res;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
res = sleeper(index); res = sleeper(index);
@ -142,7 +142,7 @@ spawnsleeper(int index)
break; break;
case -1: case -1:
print("spawnsleeper: %r\n"); print("spawnsleeper: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
if(verbose) if(verbose)
@ -160,7 +160,7 @@ main(int argc, char* argv[])
ARGBEGIN{ ARGBEGIN{
}ARGEND; }ARGEND;
rfork(RFNOTEG|RFREND); sys_rfork(RFNOTEG|RFREND);
rStart.l = &rl; rStart.l = &rl;
rCompleted.l = &rl; rCompleted.l = &rl;

View File

@ -47,7 +47,7 @@ stopAllAfter(int seconds)
{ {
int pid; int pid;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
if(verbose) if(verbose)
@ -59,7 +59,7 @@ stopAllAfter(int seconds)
exits("FAIL"); exits("FAIL");
case -1: case -1:
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("rfork fails"); exits("sys_rfork fails");
default: default:
killerProc = pid; killerProc = pid;
atexit(killKiller); atexit(killKiller);
@ -138,7 +138,7 @@ spawnWaiter(int index)
int pid; int pid;
char * res; char * res;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
res = sleeper(index); res = sleeper(index);
@ -146,7 +146,7 @@ spawnWaiter(int index)
break; break;
case -1: case -1:
print("spawnWaiter: %r\n"); print("spawnWaiter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
if(verbose) if(verbose)
@ -164,7 +164,7 @@ main(int argc, char* argv[])
ARGBEGIN{ ARGBEGIN{
}ARGEND; }ARGEND;
rfork(RFNOTEG|RFREND); sys_rfork(RFNOTEG|RFREND);
rStart.l = &rl; rStart.l = &rl;
rCompleted.l = &rl; rCompleted.l = &rl;

View File

@ -45,7 +45,7 @@ stopAllAfter(int seconds)
{ {
int pid; int pid;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
if(verbose) if(verbose)
@ -57,7 +57,7 @@ stopAllAfter(int seconds)
exits("FAIL"); exits("FAIL");
case -1: case -1:
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("rfork fails"); exits("sys_rfork fails");
default: default:
killerProc = pid; killerProc = pid;
atexit(killKiller); atexit(killKiller);
@ -137,7 +137,7 @@ spawnsleeper(int index)
int pid, ls = lastspawn; int pid, ls = lastspawn;
char * res; char * res;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
++lastspawn; ++lastspawn;
@ -146,7 +146,7 @@ spawnsleeper(int index)
break; break;
case -1: case -1:
print("spawnsleeper: %r\n"); print("spawnsleeper: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
while(ls == lastspawn) while(ls == lastspawn)
@ -166,7 +166,7 @@ main(int argc, char* argv[])
ARGBEGIN{ ARGBEGIN{
}ARGEND; }ARGEND;
rfork(RFNOTEG|RFREND); sys_rfork(RFNOTEG|RFREND);
rStart.l = &rl; rStart.l = &rl;
rCompleted.l = &rl; rCompleted.l = &rl;

View File

@ -51,7 +51,7 @@ stopAllAfter(int seconds)
{ {
int pid; int pid;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
if(verbose) if(verbose)
@ -63,7 +63,7 @@ stopAllAfter(int seconds)
exits("FAIL"); exits("FAIL");
case -1: case -1:
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("rfork fails"); exits("sys_rfork fails");
default: default:
killerProc = pid; killerProc = pid;
atexit(killKiller); atexit(killKiller);
@ -78,7 +78,7 @@ main(int argc, char* argv[])
ARGBEGIN{ ARGBEGIN{
}ARGEND; }ARGEND;
rfork(RFNOTEG|RFREND); sys_rfork(RFNOTEG|RFREND);
if (!atnotify(handletimeout, 1)){ if (!atnotify(handletimeout, 1)){
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("atnotify fails"); exits("atnotify fails");
@ -88,7 +88,7 @@ main(int argc, char* argv[])
stopAllAfter(30); stopAllAfter(30);
/* one process to sleep */ /* one process to sleep */
switch((s = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((s = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
qlock(&l); qlock(&l);
@ -98,8 +98,8 @@ main(int argc, char* argv[])
exits(nil); exits(nil);
break; break;
case -1: case -1:
print("rfork: %r\n"); print("sys_rfork: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
while(ready == 0) while(ready == 0)
@ -107,7 +107,7 @@ main(int argc, char* argv[])
break; break;
} }
/* one process to wakeup */ /* one process to wakeup */
switch((w = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((w = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
qlock(&l); qlock(&l);
@ -117,8 +117,8 @@ main(int argc, char* argv[])
exits(nil); exits(nil);
break; break;
case -1: case -1:
print("rfork: %r\n"); print("sys_rfork: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
while(ready == 1) while(ready == 1)
@ -132,13 +132,13 @@ main(int argc, char* argv[])
print("PASS\n"); print("PASS\n");
exits("PASS"); exits("PASS");
} }
if((s = open(smprint("/proc/%d/ctl", s), OWRITE)) >= 0){ if((s = sys_open(smprint("/proc/%d/ctl", s), OWRITE)) >= 0){
write(s, "kill", 5); jehanne_write(s, "kill", 5);
close(s); sys_close(s);
} }
if((w = open(smprint("/proc/%d/ctl", w), OWRITE)) >= 0){ if((w = sys_open(smprint("/proc/%d/ctl", w), OWRITE)) >= 0){
write(s, "kill", 5); jehanne_write(s, "kill", 5);
close(s); sys_close(s);
} }
print("FAIL\n"); print("FAIL\n");
exits("FAIL"); exits("FAIL");

View File

@ -51,7 +51,7 @@ stopAllAfter(int seconds)
{ {
int pid; int pid;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
if(verbose) if(verbose)
@ -63,7 +63,7 @@ stopAllAfter(int seconds)
exits("FAIL"); exits("FAIL");
case -1: case -1:
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("rfork fails"); exits("sys_rfork fails");
default: default:
killerProc = pid; killerProc = pid;
atexit(killKiller); atexit(killKiller);
@ -78,7 +78,7 @@ main(int argc, char* argv[])
ARGBEGIN{ ARGBEGIN{
}ARGEND; }ARGEND;
rfork(RFNOTEG|RFREND); sys_rfork(RFNOTEG|RFREND);
if (!atnotify(handletimeout, 1)){ if (!atnotify(handletimeout, 1)){
fprint(2, "%r\n"); fprint(2, "%r\n");
exits("atnotify fails"); exits("atnotify fails");
@ -88,7 +88,7 @@ main(int argc, char* argv[])
stopAllAfter(30); stopAllAfter(30);
/* one process to sleep for 100ms */ /* one process to sleep for 100ms */
switch((s = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((s = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
qlock(&l); qlock(&l);
@ -98,8 +98,8 @@ main(int argc, char* argv[])
exits(nil); exits(nil);
break; break;
case -1: case -1:
print("rfork: %r\n"); print("sys_rfork: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
while(ready == 0) while(ready == 0)
@ -113,13 +113,13 @@ main(int argc, char* argv[])
print("PASS\n"); print("PASS\n");
exits("PASS"); exits("PASS");
} }
if((s = open(smprint("/proc/%d/ctl", s), OWRITE)) >= 0){ if((s = sys_open(smprint("/proc/%d/ctl", s), OWRITE)) >= 0){
write(s, "kill", 5); jehanne_write(s, "kill", 5);
close(s); sys_close(s);
} }
if((w = open(smprint("/proc/%d/ctl", w), OWRITE)) >= 0){ if((w = sys_open(smprint("/proc/%d/ctl", w), OWRITE)) >= 0){
write(s, "kill", 5); jehanne_write(s, "kill", 5);
close(s); sys_close(s);
} }
print("FAIL\n"); print("FAIL\n");
exits("FAIL"); exits("FAIL");

View File

@ -64,16 +64,16 @@ main(void)
exits("atnotify fails"); exits("atnotify fails");
} }
alarm(2000); sys_alarm(2000);
a2000 = nsec(); a2000 = nsec();
alarm(500); sys_alarm(500);
a500 = nsec(); a500 = nsec();
tStart = nsec(); tStart = nsec();
sleep(1000); sleep(1000);
tEnd = nsec(); tEnd = nsec();
if(verbose) if(verbose)
fprint(2, "%d: set alarm(2000)@%lld then alarm(500)@%lld; elapsed in sleep() %lld nanosecond\n", getpid(), a2000, a500, tEnd-tStart); fprint(2, "%d: set sys_alarm(2000)@%lld then sys_alarm(500)@%lld; elapsed in sleep() %lld nanosecond\n", getpid(), a2000, a500, tEnd-tStart);
if(tEnd-tStart > 1200 * 1000 * 1000){ if(tEnd-tStart > 1200 * 1000 * 1000){
print("FAIL: should sleep less\n"); print("FAIL: should sleep less\n");

View File

@ -57,16 +57,16 @@ main(void)
exits("atnotify fails"); exits("atnotify fails");
} }
alarm(5000); sys_alarm(5000);
a2000 = nsec(); a2000 = nsec();
alarm(500); sys_alarm(500);
a500 = nsec(); a500 = nsec();
tStart = nsec(); tStart = nsec();
sleep(1000); sleep(1000);
tEnd = nsec(); tEnd = nsec();
if(verbose) if(verbose)
fprint(2, "%d: set alarm(2000)@%lld then alarm(500)@%lld; elapsed in sleep() %lld nanosecond\n", getpid(), a2000, a500, tEnd-tStart); fprint(2, "%d: set sys_alarm(2000)@%lld then sys_alarm(500)@%lld; elapsed in sleep() %lld nanosecond\n", getpid(), a2000, a500, tEnd-tStart);
if((tEnd-tStart)/(1000 * 1000) > 500+2000+400 /* 400ms = acceptable error */){ if((tEnd-tStart)/(1000 * 1000) > 500+2000+400 /* 400ms = acceptable error */){
print("FAIL: should sleep less\n"); print("FAIL: should sleep less\n");

View File

@ -44,7 +44,7 @@ stopAllAfter(int seconds)
{ {
int pid; int pid;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
if(verbose) if(verbose)
@ -56,7 +56,7 @@ stopAllAfter(int seconds)
exits("FAIL"); exits("FAIL");
case -1: case -1:
fprint(2, "stopAllAfter: %r\n"); fprint(2, "stopAllAfter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
default: default:
if(verbose) if(verbose)
print("killer proc spawn: pid %d\n", getpid()); print("killer proc spawn: pid %d\n", getpid());
@ -132,7 +132,7 @@ spawnWaiter(int index)
int pid; int pid;
char * res; char * res;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
res = waiter(index); res = waiter(index);
@ -140,7 +140,7 @@ spawnWaiter(int index)
break; break;
case -1: case -1:
print("spawnWaiter: %r\n"); print("spawnWaiter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
if(verbose) if(verbose)
@ -158,7 +158,7 @@ main(int argc, char* argv[])
ARGBEGIN{ ARGBEGIN{
}ARGEND; }ARGEND;
rfork(RFNOTEG|RFREND); sys_rfork(RFNOTEG|RFREND);
rStart.l = &rl; rStart.l = &rl;
rCompleted.l = &rl; rCompleted.l = &rl;

View File

@ -46,7 +46,7 @@ stopAllAfter(int seconds)
{ {
int pid; int pid;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
if(verbose) if(verbose)
@ -58,7 +58,7 @@ stopAllAfter(int seconds)
exits("FAIL"); exits("FAIL");
case -1: case -1:
fprint(2, "stopAllAfter: %r\n"); fprint(2, "stopAllAfter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
default: default:
if(verbose) if(verbose)
print("killer proc spawn: pid %d\n", pid); print("killer proc spawn: pid %d\n", pid);
@ -136,7 +136,7 @@ spawnWaiter(int index)
int pid; int pid;
char * res; char * res;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
res = waiter(index); res = waiter(index);
@ -144,7 +144,7 @@ spawnWaiter(int index)
break; break;
case -1: case -1:
print("spawnWaiter: %r\n"); print("spawnWaiter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
if(verbose) if(verbose)
@ -162,7 +162,7 @@ main(int argc, char* argv[])
ARGBEGIN{ ARGBEGIN{
}ARGEND; }ARGEND;
rfork(RFNOTEG|RFREND); sys_rfork(RFNOTEG|RFREND);
rStart.l = &rl; rStart.l = &rl;
rCompleted.l = &rl; rCompleted.l = &rl;

View File

@ -44,7 +44,7 @@ stopAllAfter(int seconds)
{ {
int pid; int pid;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
if(verbose) if(verbose)
@ -56,7 +56,7 @@ stopAllAfter(int seconds)
exits("FAIL"); exits("FAIL");
case -1: case -1:
fprint(2, "stopAllAfter: %r\n"); fprint(2, "stopAllAfter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
default: default:
if(verbose) if(verbose)
print("killer proc spawn: pid %d\n", getpid()); print("killer proc spawn: pid %d\n", getpid());
@ -132,7 +132,7 @@ spawnWaiter(int index)
int pid; int pid;
char * res; char * res;
switch((pid = rfork(RFMEM|RFPROC|RFNOWAIT))) switch((pid = sys_rfork(RFMEM|RFPROC|RFNOWAIT)))
{ {
case 0: case 0:
res = waiter(index); res = waiter(index);
@ -140,7 +140,7 @@ spawnWaiter(int index)
break; break;
case -1: case -1:
print("spawnWaiter: %r\n"); print("spawnWaiter: %r\n");
exits("rfork fails"); exits("sys_rfork fails");
break; break;
default: default:
if(verbose) if(verbose)
@ -158,7 +158,7 @@ main(int argc, char* argv[])
ARGBEGIN{ ARGBEGIN{
}ARGEND; }ARGEND;
rfork(RFNOTEG|RFREND); sys_rfork(RFNOTEG|RFREND);
rStart.l = &rl; rStart.l = &rl;
rCompleted.l = &rl; rCompleted.l = &rl;

View File

@ -17,7 +17,7 @@ void parent_read(int p[])
char buf[MSGSIZE]; char buf[MSGSIZE];
// write link // write link
close(p[1]); sys_close(p[1]);
while (1) { while (1) {
@ -45,7 +45,7 @@ void parent_read(int p[])
printf("End of conversation\n"); printf("End of conversation\n");
// read link // read link
close(p[0]); sys_close(p[0]);
exit(0); exit(0);
default: default:
@ -62,7 +62,7 @@ void child_write(int p[])
int i; int i;
// read link // read link
close(p[0]); sys_close(p[0]);
// write 3 times "hello" in 3 second interval // write 3 times "hello" in 3 second interval
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
@ -74,7 +74,7 @@ void child_write(int p[])
write(p[1], msg2, MSGSIZE); write(p[1], msg2, MSGSIZE);
// here after write all bytes then write end // here after write all bytes then write end
// doesn't close so read end block but // doesn't sys_close so read end block but
// because of fcntl block doesn't happen.. // because of fcntl block doesn't happen..
exit(0); exit(0);
} }

View File

@ -32,18 +32,18 @@ main(int argc, char *argv[])
pipe(sync); pipe(sync);
outfd = dup(1); outfd = dup(1);
nullfd = open("/dev/null", O_WRONLY); nullfd = sys_open("/dev/null", O_WRONLY);
tmp = fcntl(sync[0], F_DUPFD_CLOEXEC, 1); tmp = fcntl(sync[0], F_DUPFD_CLOEXEC, 1);
close(sync[0]); sys_close(sync[0]);
sync[0] = tmp; sync[0] = tmp;
tmp = fcntl(sync[1], F_DUPFD_CLOEXEC, 1); tmp = fcntl(sync[1], F_DUPFD_CLOEXEC, 1);
close(sync[1]); sys_close(sync[1]);
sync[1] = tmp; sync[1] = tmp;
tmp = fcntl(outfd, F_DUPFD_CLOEXEC, 1); tmp = fcntl(outfd, F_DUPFD_CLOEXEC, 1);
close(outfd); sys_close(outfd);
outfd = tmp; outfd = tmp;
tmp = fcntl(nullfd, F_DUPFD_CLOEXEC, 1); tmp = fcntl(nullfd, F_DUPFD_CLOEXEC, 1);
close(nullfd); sys_close(nullfd);
nullfd = tmp; nullfd = tmp;
eargv[0] = argv[0]; eargv[0] = argv[0];

View File

@ -59,8 +59,8 @@ main() {
printf("\nChild going to loop...\n\n"); printf("\nChild going to loop...\n\n");
write(p[1], "", 1); write(p[1], "", 1);
close(p[1]); sys_close(p[1]);
close(p[0]); sys_close(p[0]);
for(;;); /* loop for ever */ for(;;); /* loop for ever */
} }
else /* parent */ else /* parent */
@ -70,8 +70,8 @@ main() {
printf("sync read"); printf("sync read");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
close(p[1]); sys_close(p[1]);
close(p[0]); sys_close(p[0]);
printf("\nPARENT: sending SIGHUP\n\n"); printf("\nPARENT: sending SIGHUP\n\n");
kill(pid,SIGHUP); kill(pid,SIGHUP);
sleep(3); /* pause for 3 secs */ sleep(3); /* pause for 3 secs */

View File

@ -27,8 +27,8 @@ main() {
if (pid == 0) { if (pid == 0) {
printf("\nI am the new child!\n\n"); printf("\nI am the new child!\n\n");
write(p[1], "", 1); write(p[1], "", 1);
close(p[1]); sys_close(p[1]);
close(p[0]); sys_close(p[0]);
for(;;){ for(;;){
/* loop for ever */ /* loop for ever */
printf("."); printf(".");
@ -41,8 +41,8 @@ main() {
printf("sync read"); printf("sync read");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
close(p[1]); sys_close(p[1]);
close(p[0]); sys_close(p[0]);
printf("\nPARENT: sending SIGINT\n\n"); printf("\nPARENT: sending SIGINT\n\n");
kill(pid,SIGINT); kill(pid,SIGINT);
do { do {

View File

@ -29,8 +29,8 @@ main() {
signal(SIGCONT,sigcont); /* set function calls */ signal(SIGCONT,sigcont); /* set function calls */
printf("Child going to loop...\n"); printf("Child going to loop...\n");
write(p[1], "", 1); write(p[1], "", 1);
close(p[1]); sys_close(p[1]);
close(p[0]); sys_close(p[0]);
for(;;){ for(;;){
/* loop for ever */ /* loop for ever */
printf("."); printf(".");
@ -40,8 +40,8 @@ main() {
else /* parent */ else /* parent */
{ {
read(p[0], &dummy, 1); read(p[0], &dummy, 1);
close(p[1]); sys_close(p[1]);
close(p[0]); sys_close(p[0]);
printf("PARENT: sending SIGCONT\n\n"); printf("PARENT: sending SIGCONT\n\n");
kill(pid,SIGCONT); kill(pid,SIGCONT);
child = wait(&cstatus); child = wait(&cstatus);
@ -54,4 +54,3 @@ main() {
} }
} }
} }

View File

@ -24,8 +24,8 @@ void childloop(void)
signal(SIGSTOP,sigstop); /* set function calls */ signal(SIGSTOP,sigstop); /* set function calls */
printf("Child %d going to loop...\n", getpid()); printf("Child %d going to loop...\n", getpid());
write(p[1], "", 1); write(p[1], "", 1);
close(p[1]); sys_close(p[1]);
close(p[0]); sys_close(p[0]);
for(;;){ for(;;){
/* loop for ever */ /* loop for ever */
printf("."); printf(".");
@ -56,8 +56,8 @@ main() {
else /* parent */ else /* parent */
{ {
read(p[0], &dummy, 1); read(p[0], &dummy, 1);
close(p[1]); sys_close(p[1]);
close(p[0]); sys_close(p[0]);
sleep(2); sleep(2);
printf("PARENT: sending SIGSTOP\n"); printf("PARENT: sending SIGSTOP\n");
kill(pid,SIGSTOP); kill(pid,SIGSTOP);
@ -76,4 +76,3 @@ main() {
} }
} }
} }

View File

@ -48,16 +48,16 @@ main() {
printf("Child going to loop...\n"); printf("Child going to loop...\n");
write(p[1], "", 1); write(p[1], "", 1);
close(p[1]); sys_close(p[1]);
close(p[0]); sys_close(p[0]);
for(;;); /* loop for ever */ for(;;); /* loop for ever */
} }
else /* parent */ else /* parent */
{ {
signal(SIGCHLD,sigchld); signal(SIGCHLD,sigchld);
read(p[0], &dummy, 1); read(p[0], &dummy, 1);
close(p[1]); sys_close(p[1]);
close(p[0]); sys_close(p[0]);
printf("PARENT: sending SIGHUP\n"); printf("PARENT: sending SIGHUP\n");
kill(pid,SIGHUP); kill(pid,SIGHUP);
sleep(3); /* pause for 3 secs */ sleep(3); /* pause for 3 secs */

View File

@ -6,10 +6,10 @@
"Cflags": [ "Cflags": [
"-fstack-check", "-fstack-check",
"-fstack-protector-all", "-fstack-protector-all",
"/arch/$ARCH/lib/newlib/libc.a", "/pkgs/newlib/x86_64-jehanne/lib/libc.a",
"/arch/$ARCH/lib/newlib/libm.a", "/pkgs/newlib/x86_64-jehanne/lib/libm.a",
"/arch/$ARCH/lib/newlib/libg.a", "/pkgs/newlib/x86_64-jehanne/lib/libg.a",
"-I", "/sys/posix/newlib", "-I", "/posix/include",
"-O2", "-O2",
"-std=gnu11" "-std=gnu11"
], ],
@ -73,10 +73,10 @@
"Cflags": [ "Cflags": [
"-fstack-check", "-fstack-check",
"-fstack-protector-all", "-fstack-protector-all",
"/arch/$ARCH/lib/newlib/libc.a", "/pkgs/newlib/x86_64-jehanne/lib/libc.a",
"/arch/$ARCH/lib/newlib/libm.a", "/pkgs/newlib/x86_64-jehanne/lib/libm.a",
"/arch/$ARCH/lib/newlib/libg.a", "/pkgs/newlib/x86_64-jehanne/lib/libg.a",
"-I", "/sys/posix/newlib", "-I", "/posix/include",
"-O2", "-O2",
"-DWITH_SIGCHLD", "-DWITH_SIGCHLD",
"-std=gnu11" "-std=gnu11"

View File

@ -9,10 +9,10 @@
"-Wno-unused-variable", "-Wno-unused-variable",
"-Wno-format", "-Wno-format",
"-fstack-protector-all", "-fstack-protector-all",
"/arch/$ARCH/lib/newlib/libc.a", "/pkgs/newlib/x86_64-jehanne/lib/libc.a",
"/arch/$ARCH/lib/newlib/libm.a", "/pkgs/newlib/x86_64-jehanne/lib/libm.a",
"/arch/$ARCH/lib/newlib/libg.a", "/pkgs/newlib/x86_64-jehanne/lib/libg.a",
"-I", "/sys/posix/newlib", "-I", "/posix/include",
"-O2", "-O2",
"-std=gnu11" "-std=gnu11"
], ],

View File

@ -108,11 +108,16 @@ typedef enum PosixError
#endif #endif
#ifndef _ERRNO_H #ifndef _APW_ERRNO_H
#define _ERRNO_H #ifdef __cplusplus
extern "C" {
#endif
extern int __errno(); #define _APW_ERRNO_H
#define errno __errno() #ifndef HIDE_JEHANNE_APW
extern int *__errno (void);
#define errno (*__errno())
/* See The Open Group Base Specifications Issue 7 /* See The Open Group Base Specifications Issue 7
* IEEE Std 1003.1-2008, 2016 Edition got from * IEEE Std 1003.1-2008, 2016 Edition got from
@ -212,4 +217,9 @@ extern int __errno();
#define EWOULDBLOCK PosixEWOULDBLOCK #define EWOULDBLOCK PosixEWOULDBLOCK
#define EXDEV PosixEXDEV #define EXDEV PosixEXDEV
#endif /* HIDE_JEHANNE_APW */
#ifdef __cplusplus
}
#endif #endif
#endif /* _APW_ERRNO_H */

119
sys/include/apw/limits.h Normal file
View File

@ -0,0 +1,119 @@
/*
* This file is part of Jehanne.
*
* Copyright (C) 2016 Giacomo Tesio <giacomo@tesio.it>
*
* Jehanne is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 2 of the License.
*
* Jehanne is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Jehanne. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _APW_LIMITS_H
#define _APW_LIMITS_H
#ifndef HIDE_JEHANNE_APW
#undef CHAR_BIT
#define CHAR_BIT __CHAR_BIT__
#ifndef MB_LEN_MAX
#define MB_LEN_MAX 4 /* UTFmax in libc.h */
#endif
#undef SCHAR_MIN
#define SCHAR_MIN (-SCHAR_MAX - 1)
#undef SCHAR_MAX
#define SCHAR_MAX __SCHAR_MAX__
#undef UCHAR_MAX
#define UCHAR_MAX (SCHAR_MAX * 2 + 1)
#ifdef __CHAR_UNSIGNED__
# undef CHAR_MIN
# define CHAR_MIN 0
# undef CHAR_MAX
# define CHAR_MAX UCHAR_MAX
#else
# undef CHAR_MIN
# define CHAR_MIN SCHAR_MIN
# undef CHAR_MAX
# define CHAR_MAX SCHAR_MAX
#endif
#undef SHRT_MIN
#define SHRT_MIN (-SHRT_MAX - 1)
#undef SHRT_MAX
#define SHRT_MAX __SHRT_MAX__
#undef USHRT_MAX
#define USHRT_MAX (SHRT_MAX * 2 + 1)
#undef INT_MIN
#define INT_MIN (-INT_MAX - 1)
#undef INT_MAX
#define INT_MAX __INT_MAX__
#undef UINT_MAX
#define UINT_MAX (INT_MAX * 2U + 1U)
#undef LONG_MIN
#define LONG_MIN (-LONG_MAX - 1L)
#undef LONG_MAX
#define LONG_MAX __LONG_MAX__
#undef ULONG_MAX
#define ULONG_MAX (LONG_MAX * 2UL + 1UL)
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
# undef LLONG_MIN
# define LLONG_MIN (-LLONG_MAX - 1LL)
# undef LLONG_MAX
# define LLONG_MAX __LONG_LONG_MAX__
# undef ULLONG_MAX
# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
#endif
#if defined (__GNU_LIBRARY__) ? defined (__USE_GNU) : !defined (__STRICT_ANSI__)
# undef LONG_LONG_MIN
# define LONG_LONG_MIN (-LONG_LONG_MAX - 1LL)
# undef LONG_LONG_MAX
# define LONG_LONG_MAX __LONG_LONG_MAX__
# undef ULONG_LONG_MAX
# define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1ULL)
#endif
#ifdef __STDC_WANT_IEC_60559_BFP_EXT__
# undef CHAR_WIDTH
# define CHAR_WIDTH __SCHAR_WIDTH__
# undef SCHAR_WIDTH
# define SCHAR_WIDTH __SCHAR_WIDTH__
# undef UCHAR_WIDTH
# define UCHAR_WIDTH __SCHAR_WIDTH__
# undef SHRT_WIDTH
# define SHRT_WIDTH __SHRT_WIDTH__
# undef USHRT_WIDTH
# define USHRT_WIDTH __SHRT_WIDTH__
# undef INT_WIDTH
# define INT_WIDTH __INT_WIDTH__
# undef UINT_WIDTH
# define UINT_WIDTH __INT_WIDTH__
# undef LONG_WIDTH
# define LONG_WIDTH __LONG_WIDTH__
# undef ULONG_WIDTH
# define ULONG_WIDTH __LONG_WIDTH__
# undef LLONG_WIDTH
# define LLONG_WIDTH __LONG_LONG_WIDTH__
# undef ULLONG_WIDTH
# define ULLONG_WIDTH __LONG_LONG_WIDTH__
#endif
#endif
#endif

View File

@ -15,8 +15,9 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Jehanne. If not, see <http://www.gnu.org/licenses/>. * along with Jehanne. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef _STDIO_H #ifndef _APW_STDIO_H
#define _STDIO_H #define _APW_STDIO_H
#ifndef HIDE_JEHANNE_APW
/* Simple trick to avoid name clash between native and standard headers: /* Simple trick to avoid name clash between native and standard headers:
* *
@ -40,4 +41,4 @@ extern "C" {
} }
#endif #endif
#endif #endif
#endif

View File

@ -15,8 +15,9 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Jehanne. If not, see <http://www.gnu.org/licenses/>. * along with Jehanne. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef _STDLIB_H #ifndef _APW_STDLIB_H
#define _STDLIB_H #define _APW_STDLIB_H
#ifndef HIDE_JEHANNE_APW
#include "libc.wrapper.h" #include "libc.wrapper.h"
#define EXIT_SUCCESS 0 #define EXIT_SUCCESS 0
@ -53,3 +54,4 @@ extern void __eprintf(const char *format, const char *file,
unsigned int line, const char *expression); unsigned int line, const char *expression);
#endif #endif
#endif

View File

@ -15,7 +15,9 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Jehanne. If not, see <http://www.gnu.org/licenses/>. * along with Jehanne. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef _STRING_H #ifndef _APW_STRING_H
#define _STRING_H #define _APW_STRING_H
#ifndef HIDE_JEHANNE_APW
#include "libc.wrapper.h" #include "libc.wrapper.h"
#endif #endif
#endif

View File

@ -15,7 +15,9 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Jehanne. If not, see <http://www.gnu.org/licenses/>. * along with Jehanne. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef _SYS_TYPES_H #ifndef _APW_SYS_TYPES_H
#define _SYS_TYPES_H #define _APW_SYS_TYPES_H
#ifndef HIDE_JEHANNE_APW
#include "libc.wrapper.h" #include "libc.wrapper.h"
#endif #endif
#endif

View File

@ -15,10 +15,12 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Jehanne. If not, see <http://www.gnu.org/licenses/>. * along with Jehanne. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef _UNISTD_H #ifndef _APW_UNISTD_H
#define _UNISTD_H #define _APW_UNISTD_H
#ifndef HIDE_JEHANNE_APW
#include "libc.wrapper.h" #include "libc.wrapper.h"
extern int execv(const char*, char* const[]); extern int execv(const char*, char* const[]);
extern int execve(const char*, char* const[], char* const[]); extern int execve(const char*, char* const[], char* const[]);
extern int execvp(const char*, char* const[]); extern int execvp(const char*, char* const[]);
#endif #endif
#endif

View File

@ -91,7 +91,7 @@ typedef enum PosixRUsages
} PosixRUsages; } PosixRUsages;
/* errno values */ /* errno values */
#define _ERRNO_H // skip the Posix part, we just need the enum #define _APW_ERRNO_H // skip the Posix part, we just need the enum
#include <apw/errno.h> #include <apw/errno.h>
/* signals */ /* signals */
@ -312,7 +312,7 @@ extern int POSIX_waitpid(int *errnop, int pid, int *status, int options);
extern long POSIX_write(int *errnop, int fd, const void *buf, size_t len); extern long POSIX_write(int *errnop, int fd, const void *buf, size_t len);
extern int POSIX_gettimeofday(int *errnop, void *timeval, void *timezone); extern int POSIX_gettimeofday(int *errnop, void *timeval, void *timezone);
extern char* POSIX_getenv(int *errnop, const char *name); extern char* POSIX_getenv(int *errnop, const char *name);
extern int POSIX_setenv(int *errno, const char *name, const char *value, int overwrite); extern int POSIX_setenv(int *errnop, const char *name, const char *value, int overwrite);
extern int POSIX_unsetenv(int *errnop, const char *name); extern int POSIX_unsetenv(int *errnop, const char *name);
extern void *POSIX_sbrk(int *errnop, ptrdiff_t incr); extern void *POSIX_sbrk(int *errnop, ptrdiff_t incr);
extern void * POSIX_malloc(int *errnop, size_t size); extern void * POSIX_malloc(int *errnop, size_t size);

View File

@ -32,7 +32,7 @@ jehanne_pexec(const char *f, char *args[])
n = jehanne_getfields(epath, entries, nelem(entries), 1, ":"); n = jehanne_getfields(epath, entries, nelem(entries), 1, ":");
for(i = 0; i < n; ++i){ for(i = 0; i < n; ++i){
path = jehanne_smprint("%s/%s", entries[i], f); path = jehanne_smprint("%s/%s", entries[i], f);
sys_exec(path, args); sys_exec(path, (const char**)args);
jehanne_free(path); jehanne_free(path);
} }

View File

@ -45,8 +45,12 @@ __jehanne_libc_init(int argc, char *argv[])
static void static void
call_main(int argc, char *argv[]) call_main(int argc, char *argv[])
{ {
extern void main(int argc, char *argv[]); extern void main(int argc, char *argv[]) __attribute__((weak));
if(main != nil){
main(argc, argv); main(argc, argv);
jehanne_exits("main"); jehanne_exits("main");
} else {
jehanne_exits("missing main");
}
} }

View File

@ -503,7 +503,7 @@ OnIgnoredSignalInterrupt:
} }
int int
POSIX_close(int *errno, int file) POSIX_close(int *errnop, int file)
{ {
long ret; long ret;
@ -512,10 +512,10 @@ POSIX_close(int *errno, int file)
case 0: case 0:
return 0; return 0;
case ~0: case ~0:
*errno = __libposix_translate_errstr((uintptr_t)POSIX_close); *errnop = __libposix_translate_errstr((uintptr_t)POSIX_close);
break; break;
default: default:
*errno = ret; *errnop = ret;
break; break;
} }
return -1; return -1;

View File

@ -27,7 +27,7 @@ POSIX_kill(int *errnop, int pid, int signo)
{ {
PosixError perror; PosixError perror;
PosixSignalInfo siginfo; PosixSignalInfo siginfo;
int errno; int throwaway_errno;
if(signo < 1 || signo > PosixNumberOfSignals){ if(signo < 1 || signo > PosixNumberOfSignals){
*errnop = __libposix_get_errno(PosixEINVAL); *errnop = __libposix_get_errno(PosixEINVAL);
@ -37,7 +37,7 @@ POSIX_kill(int *errnop, int pid, int signo)
siginfo.si_signo = signo; siginfo.si_signo = signo;
siginfo.si_pid = *__libposix_pid; siginfo.si_pid = *__libposix_pid;
siginfo.si_code = PosixSIUser; siginfo.si_code = PosixSIUser;
siginfo.si_uid = POSIX_getuid(&errno); siginfo.si_uid = POSIX_getuid(&throwaway_errno);
if(pid == siginfo.si_pid) if(pid == siginfo.si_pid)
perror = __libposix_receive_signal(&siginfo); perror = __libposix_receive_signal(&siginfo);
else else

View File

@ -189,7 +189,7 @@ POSIX_execve(int *errnop, const char *name, char * const*argv, char * const*env)
__libposix_close_on_exec(); __libposix_close_on_exec();
__libposix_sighelper_cmd(PHCallingExec, 0); __libposix_sighelper_cmd(PHCallingExec, 0);
sys_exec(name, argv); sys_exec(name, (const char**)argv);
*errnop = __libposix_translate_errstr((uintptr_t)POSIX_execve); *errnop = __libposix_translate_errstr((uintptr_t)POSIX_execve);
return -1; return -1;
} }

View File

@ -25,7 +25,7 @@ POSIX_sigqueue(int *errnop, int pid, int signo, const union sigval value)
{ {
PosixError perror; PosixError perror;
PosixSignalInfo siginfo; PosixSignalInfo siginfo;
int errno; int throwaway_errno;
if(signo < 1 || signo > PosixNumberOfSignals){ if(signo < 1 || signo > PosixNumberOfSignals){
*errnop = __libposix_get_errno(PosixEINVAL); *errnop = __libposix_get_errno(PosixEINVAL);
@ -35,7 +35,7 @@ POSIX_sigqueue(int *errnop, int pid, int signo, const union sigval value)
siginfo.si_signo = signo; siginfo.si_signo = signo;
siginfo.si_pid = *__libposix_pid; siginfo.si_pid = *__libposix_pid;
siginfo.si_code = PosixSIQueue; siginfo.si_code = PosixSIQueue;
siginfo.si_uid = POSIX_getuid(&errno); siginfo.si_uid = POSIX_getuid(&throwaway_errno);
siginfo.si_value._sival_raw = value._sival_raw; siginfo.si_value._sival_raw = value._sival_raw;
if(pid == siginfo.si_pid) if(pid == siginfo.si_pid)
perror = __libposix_receive_signal(&siginfo); perror = __libposix_receive_signal(&siginfo);