Date: Wed, 23 Oct 2002 14:10:05 -0700 (PDT) From: Andriy Gapon <agapon@excite.com> To: freebsd-standards@FreeBSD.org Subject: Re: standards/43335: libc_r: execve() and close-on-exec flag, interrupted write() Message-ID: <200210232110.g9NLA5eN010115@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR standards/43335; it has been noted by GNATS.
From: Andriy Gapon <agapon@excite.com>
To: freebsd-gnats-submit@FreeBSD.org
Cc:
Subject: Re: standards/43335: libc_r: execve() and close-on-exec flag,
interrupted write()
Date: Wed, 23 Oct 2002 17:04:00 -0400 (EDT)
patches updated for 4.7.
Partial write:
--- uthread_write.c.orig Thu Oct 10 12:43:35 2002
+++ uthread_write.c Wed Oct 23 16:19:48 2002
@@ -108,8 +108,13 @@
* interrupted by a signal
*/
if (_thread_run->interrupted) {
- /* Return an error: */
- ret = -1;
+ if(num > 0)
+ ret = num;
+ else {
+ /* Return an error: */
+ errno = EINTR;
+ ret = -1;
+ }
}
/*
@@ -117,10 +122,16 @@
* error occurred, just return whatever the write
* syscall did:
*/
- } else if (!blocking || n < 0) {
+ } else if (!blocking) {
/* A non-blocking call might return zero: */
ret = n;
break;
+ } else if (n < 0) {
+ /* if we have written something already */
+ if(num > 0)
+ ret = num;
+ else
+ ret = n;
/* Check if the write has completed: */
} else if (num >= nbytes)
Close-on-exec:
--- uthread_execve.c.orig Wed Oct 23 16:27:59 2002
+++ uthread_execve.c Wed Oct 23 16:33:30 2002
@@ -67,10 +67,17 @@
/* Check if this file descriptor is in use: */
if (_thread_fd_table[i] != NULL &&
(_thread_fd_getflags(i) & O_NONBLOCK) == 0) {
- /* Get the current flags: */
- flags = _thread_sys_fcntl(i, F_GETFL, NULL);
- /* Clear the nonblocking file descriptor flag: */
- _thread_sys_fcntl(i, F_SETFL, flags & ~O_NONBLOCK);
+ /* get close-on-exec flag */
+ int fd_flags = _thread_sys_fcntl(i, F_GETFD, NULL);
+ if (fd_flags & FD_CLOEXEC) {
+ /* don't bother */
+ }
+ else {
+ /* Get the current flags: */
+ flags = _thread_sys_fcntl(i, F_GETFL, NULL);
+ /* Clear the nonblocking file descriptor flag: */
+ _thread_sys_fcntl(i, F_SETFL, flags & ~O_NONBLOCK);
+ }
}
}
--
Andriy Gapon
*
"Never try to outstubborn a cat." Lazarus Long, "Time Enough for Love"
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-standards" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200210232110.g9NLA5eN010115>
