{
        int n;
 
-       while(((n = recvfrom(fd,  buf,  len, 0, NULL, NULL)) < 0) && 
-             (errno == EINTR)) ;
-
+       CATCH_EINTR(n = recvfrom(fd,  buf,  len, 0, NULL, NULL));
        if(n < 0){
                if(errno == EAGAIN)
                        return 0;
 {
        int n;
 
-       while(((n = send(fd, buf, len, 0)) < 0) && (errno == EINTR)) ;
+       CATCH_EINTR(n = send(fd, buf, len, 0));
        if(n < 0){
                if(errno == EAGAIN)
                        return 0;
 {
        int n;
 
-       while(((n = sendto(fd, buf, len, 0, (struct sockaddr *) to,
-                          sock_len)) < 0) && (errno == EINTR)) ;
+       CATCH_EINTR(n = sendto(fd, buf, len, 0, (struct sockaddr *) to,
+                              sock_len));
        if(n < 0){
                if(errno == EAGAIN)
                        return 0;
 
 #include "os.h"
 #include "user.h"
 #include "kern_util.h"
+#include "user_util.h"
 
 static void copy_stat(struct uml_stat *dst, struct stat64 *src)
 {
        struct stat64 sbuf;
        int err;
 
-       do {
-               err = fstat64(fd, &sbuf);
-       } while((err < 0) && (errno == EINTR)) ;
-
+       CATCH_EINTR(err = fstat64(fd, &sbuf));
        if(err < 0)
                return -errno;