add and use xopen_nonblocking (-18b)
No binary (build failed)
—
(log yok)
| @@ -25,7 +25,7 @@ int kbd_mode_main(int argc UNUSED_PARAM, char **argv) | |
| const char *tty_name = CURRENT_TTY; | |
| opt = getopt32(argv, "sakuC:", &tty_name); | |
| - | fd = xopen(tty_name, O_NONBLOCK); |
| + | fd = xopen_nonblocking(tty_name); |
| opt &= 0xf; /* clear -C bit, see (*) */ | |
| if (!opt) { /* print current setting */ | |
| @@ -277,7 +277,7 @@ int setfont_main(int argc UNUSED_PARAM, char **argv) | |
| opts = getopt32(argv, "m:C:", &mapfilename, &tty_name); | |
| argv += optind; | |
| - | fd = xopen(tty_name, O_NONBLOCK); |
| + | fd = xopen_nonblocking(tty_name); |
| if (sizeof(CONFIG_DEFAULT_SETFONT_DIR) > 1) { // if not "" | |
| if (*argv[0] != '/') { | |
| @@ -36,7 +36,7 @@ int loadkmap_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) | |
| fd = get_console_fd_or_die(); | |
| /* or maybe: | |
| opt = getopt32(argv, "C:", &tty_name); | |
| - | fd = xopen(tty_name, O_NONBLOCK); |
| + | fd = xopen_nonblocking(tty_name); |
| */ | |
| xread(STDIN_FILENO, flags, 7); | |
| @@ -1295,7 +1295,7 @@ int stty_main(int argc, char **argv) | |
| if (file_name) { | |
| int fd, fdflags; | |
| G.device_name = file_name; | |
| - | fd = xopen(G.device_name, O_RDONLY | O_NONBLOCK); |
| + | fd = xopen_nonblocking(G.device_name); |
| if (fd != STDIN_FILENO) { | |
| dup2(fd, STDIN_FILENO); | |
| close(fd); | |
| @@ -400,6 +400,7 @@ void bb_unsetenv(const char *key) FAST_FUNC; | |
| void xunlink(const char *pathname) FAST_FUNC; | |
| void xstat(const char *pathname, struct stat *buf) FAST_FUNC; | |
| int xopen(const char *pathname, int flags) FAST_FUNC; | |
| + | int xopen_nonblocking(const char *pathname) FAST_FUNC; |
| int xopen3(const char *pathname, int flags, int mode) FAST_FUNC; | |
| int open_or_warn(const char *pathname, int flags) FAST_FUNC; | |
| int open3_or_warn(const char *pathname, int flags, int mode) FAST_FUNC; | |
| @@ -140,6 +140,15 @@ int FAST_FUNC xopen(const char *pathname, int flags) | |
| return xopen3(pathname, flags, 0666); | |
| } | |
| + | /* Die if we can't open an existing file readonly with O_NONBLOCK |
| + | * and return the fd. |
| + | * Note that for ioctl O_RDONLY is sufficient. |
| + | */ |
| + | int FAST_FUNC xopen_nonblocking(const char *pathname) |
| + | { |
| + | return xopen(pathname, O_RDONLY | O_NONBLOCK); |
| + | } |
| + | |
| // Warn if we can't open a file and return a fd. | |
| int FAST_FUNC open3_or_warn(const char *pathname, int flags, int mode) | |
| { | |
| @@ -103,7 +103,7 @@ int eject_main(int argc UNUSED_PARAM, char **argv) | |
| eject /dev/cdrom | |
| */ | |
| - | xmove_fd(xopen(device, O_RDONLY|O_NONBLOCK), dev_fd); |
| + | xmove_fd(xopen_nonblocking(device), dev_fd); |
| if (ENABLE_FEATURE_EJECT_SCSI && (flags & FLAG_SCSI)) | |
| eject_scsi(device); | |
| @@ -1552,8 +1552,8 @@ static void process_dev(char *devname) | |
| unsigned char args[4] = { WIN_SETFEATURES, 0, 0, 0 }; | |
| const char *fmt = " %s\t= %2ld"; | |
| - | /*fd = xopen(devname, O_RDONLY | O_NONBLOCK);*/ |
| - | xmove_fd(xopen(devname, O_RDONLY | O_NONBLOCK), fd); |
| + | /*fd = xopen_nonblocking(devname);*/ |
| + | xmove_fd(xopen_nonblocking(devname), fd); |
| printf("\n%s:\n", devname); | |
| if (getset_readahead == IS_SET) { | |