| /* vi: set sw=4 ts=4: */ |
| /* |
| * wfopen_input implementation for busybox |
| * |
| * Copyright (C) 2003 Manuel Novoa III <mjn3@codepoet.org> |
| * |
| * Licensed under GPLv2 or later, see file LICENSE in this source tree. |
| */ |
| #include "libbb.h" |
| |
| /* A number of applets need to open a file for reading, where the filename |
| * is a command line arg. Since often that arg is '-' (meaning stdin), |
| * we avoid testing everywhere by consolidating things in this routine. |
| */ |
| |
| FILE* FAST_FUNC fopen_or_warn_stdin(const char *filename) |
| { |
| FILE *fp = stdin; |
| |
| if (filename != bb_msg_standard_input |
| && NOT_LONE_DASH(filename) |
| ) { |
| fp = fopen_or_warn(filename, "r"); |
| } |
| return fp; |
| } |
| |
| FILE* FAST_FUNC xfopen_stdin(const char *filename) |
| { |
| FILE *fp = fopen_or_warn_stdin(filename); |
| if (fp) |
| return fp; |
| xfunc_die(); /* We already output an error message. */ |
| } |
| |
| int FAST_FUNC open_or_warn_stdin(const char *filename) |
| { |
| int fd = STDIN_FILENO; |
| |
| if (filename != bb_msg_standard_input |
| && NOT_LONE_DASH(filename) |
| ) { |
| fd = open_or_warn(filename, O_RDONLY); |
| } |
| |
| return fd; |
| } |
| |
| int FAST_FUNC xopen_stdin(const char *filename) |
| { |
| int fd = open_or_warn_stdin(filename); |
| if (fd >= 0) |
| return fd; |
| xfunc_die(); /* We already output an error message. */ |
| } |