libbb: make ndelay_no/off a bit more clever. +14 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2011-01-24 00:29:55 +01:00
parent dc6cd12569
commit e9a40e3b91
2 changed files with 15 additions and 9 deletions

View File

@ -348,9 +348,9 @@ extern char *bb_get_last_path_component_strip(char *path) FAST_FUNC;
/* "abc/def/" -> "" and it never modifies 'path' */ /* "abc/def/" -> "" and it never modifies 'path' */
extern char *bb_get_last_path_component_nostrip(const char *path) FAST_FUNC; extern char *bb_get_last_path_component_nostrip(const char *path) FAST_FUNC;
int ndelay_on(int fd) FAST_FUNC; void ndelay_on(int fd) FAST_FUNC;
int ndelay_off(int fd) FAST_FUNC; void ndelay_off(int fd) FAST_FUNC;
int close_on_exec_on(int fd) FAST_FUNC; void close_on_exec_on(int fd) FAST_FUNC;
void xdup2(int, int) FAST_FUNC; void xdup2(int, int) FAST_FUNC;
void xmove_fd(int, int) FAST_FUNC; void xmove_fd(int, int) FAST_FUNC;

View File

@ -25,19 +25,25 @@
#include "libbb.h" #include "libbb.h"
/* Turn on nonblocking I/O on a fd */ /* Turn on nonblocking I/O on a fd */
int FAST_FUNC ndelay_on(int fd) void FAST_FUNC ndelay_on(int fd)
{ {
return fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK); int flags = fcntl(fd, F_GETFL);
if (flags & O_NONBLOCK)
return;
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
} }
int FAST_FUNC ndelay_off(int fd) void FAST_FUNC ndelay_off(int fd)
{ {
return fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) & ~O_NONBLOCK); int flags = fcntl(fd, F_GETFL);
if (!(flags & O_NONBLOCK))
return;
fcntl(fd, F_SETFL, flags & ~O_NONBLOCK);
} }
int FAST_FUNC close_on_exec_on(int fd) void FAST_FUNC close_on_exec_on(int fd)
{ {
return fcntl(fd, F_SETFD, FD_CLOEXEC); fcntl(fd, F_SETFD, FD_CLOEXEC);
} }
char* FAST_FUNC strncpy_IFNAMSIZ(char *dst, const char *src) char* FAST_FUNC strncpy_IFNAMSIZ(char *dst, const char *src)