merge in jb-release history after reset to master
diff --git a/libc/SYSCALLS.TXT b/libc/SYSCALLS.TXT
index a9bd4fd..1923ea0 100644
--- a/libc/SYSCALLS.TXT
+++ b/libc/SYSCALLS.TXT
@@ -47,8 +47,8 @@
 gid_t   getgid:getgid32 ()         200
 uid_t   geteuid:geteuid32 ()       201
 gid_t   getegid:getegid32 ()       202
-uid_t   getresuid:getresuid32 ()   209
-gid_t   getresgid:getresgid32 ()   211
+uid_t   getresuid:getresuid32 (uid_t *ruid, uid_t *euid, uid_t *suid)   209
+gid_t   getresgid:getresgid32 (gid_t *rgid, gid_t *egid, gid_t *sgid)   211
 pid_t   gettid()                   224
 ssize_t readahead(int, off64_t, size_t)     225
 int     getgroups:getgroups32(int, gid_t *)    205
@@ -183,7 +183,7 @@
 int           clock_gettime(clockid_t clk_id, struct timespec *tp)    263,265
 int           clock_settime(clockid_t clk_id, const struct timespec *tp)  262,264
 int           clock_getres(clockid_t clk_id, struct timespec *res)   264,266
-int           clock_nanosleep(const struct timespec *req, struct timespec *rem)  265,267
+int           clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *req, struct timespec *rem)  265,267
 int           getitimer(int, const struct itimerval *)   105
 int           setitimer(int, const struct itimerval *, struct itimerval *)  104
 int           __timer_create:timer_create(clockid_t clockid, struct sigevent *evp, timer_t *timerid)    257,259
diff --git a/libc/arch-x86/syscalls/clock_nanosleep.S b/libc/arch-x86/syscalls/clock_nanosleep.S
index c400e3f..23e1e6f 100644
--- a/libc/arch-x86/syscalls/clock_nanosleep.S
+++ b/libc/arch-x86/syscalls/clock_nanosleep.S
@@ -9,8 +9,12 @@
 clock_nanosleep:
     pushl   %ebx
     pushl   %ecx
-    mov     12(%esp), %ebx
-    mov     16(%esp), %ecx
+    pushl   %edx
+    pushl   %esi
+    mov     20(%esp), %ebx
+    mov     24(%esp), %ecx
+    mov     28(%esp), %edx
+    mov     32(%esp), %esi
     movl    $__NR_clock_nanosleep, %eax
     int     $0x80
     cmpl    $-129, %eax
@@ -21,6 +25,8 @@
     addl    $4, %esp
     orl     $-1, %eax
 1:
+    popl    %esi
+    popl    %edx
     popl    %ecx
     popl    %ebx
     ret
diff --git a/libc/arch-x86/syscalls/getresgid.S b/libc/arch-x86/syscalls/getresgid.S
index 454d32b..d43aec4 100644
--- a/libc/arch-x86/syscalls/getresgid.S
+++ b/libc/arch-x86/syscalls/getresgid.S
@@ -7,6 +7,12 @@
     .align 4
 
 getresgid:
+    pushl   %ebx
+    pushl   %ecx
+    pushl   %edx
+    mov     16(%esp), %ebx
+    mov     20(%esp), %ecx
+    mov     24(%esp), %edx
     movl    $__NR_getresgid32, %eax
     int     $0x80
     cmpl    $-129, %eax
@@ -17,4 +23,7 @@
     addl    $4, %esp
     orl     $-1, %eax
 1:
+    popl    %edx
+    popl    %ecx
+    popl    %ebx
     ret
diff --git a/libc/arch-x86/syscalls/getresuid.S b/libc/arch-x86/syscalls/getresuid.S
index f07b5c5..f489d40 100644
--- a/libc/arch-x86/syscalls/getresuid.S
+++ b/libc/arch-x86/syscalls/getresuid.S
@@ -7,6 +7,12 @@
     .align 4
 
 getresuid:
+    pushl   %ebx
+    pushl   %ecx
+    pushl   %edx
+    mov     16(%esp), %ebx
+    mov     20(%esp), %ecx
+    mov     24(%esp), %edx
     movl    $__NR_getresuid32, %eax
     int     $0x80
     cmpl    $-129, %eax
@@ -17,4 +23,7 @@
     addl    $4, %esp
     orl     $-1, %eax
 1:
+    popl    %edx
+    popl    %ecx
+    popl    %ebx
     ret
diff --git a/libc/unistd/getcwd.c b/libc/unistd/getcwd.c
index 1cf80e9..1172445 100644
--- a/libc/unistd/getcwd.c
+++ b/libc/unistd/getcwd.c
@@ -26,10 +26,15 @@
  * SUCH DAMAGE.
  */
 #include <unistd.h>
+#include <errno.h>
 
 extern int __getcwd(char * buf, size_t size);
 
 char *getcwd(char *buf, size_t size)
 {
+  if (buf == NULL || size == 0) {
+    errno = EINVAL;
+    return NULL;
+  }
   return ( __getcwd(buf, size) < 0 ) ? NULL : buf;
 }