blob: 872464248d74fd8e77491bab84ceba4675876342 [file] [log] [blame]
Manuel Novoa III cad53642003-03-19 09:13:01 +00001/* vi: set sw=4 ts=4: */
2/*
3 * wfopen_input implementation for busybox
4 *
5 * Copyright (C) 2003 Manuel Novoa III <mjn3@codepoet.org>
6 *
Denys Vlasenko0ef64bd2010-08-16 20:14:46 +02007 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
Manuel Novoa III cad53642003-03-19 09:13:01 +00008 */
Denys Vlasenkoebe6d9d2017-10-05 14:40:24 +02009#include "libbb.h"
Manuel Novoa III cad53642003-03-19 09:13:01 +000010
11/* A number of applets need to open a file for reading, where the filename
12 * is a command line arg. Since often that arg is '-' (meaning stdin),
13 * we avoid testing everywhere by consolidating things in this routine.
Manuel Novoa III cad53642003-03-19 09:13:01 +000014 */
15
Denis Vlasenkodefc1ea2008-06-27 02:52:20 +000016FILE* FAST_FUNC fopen_or_warn_stdin(const char *filename)
Manuel Novoa III cad53642003-03-19 09:13:01 +000017{
18 FILE *fp = stdin;
19
Denis Vlasenkoddec5af2006-10-26 23:25:17 +000020 if (filename != bb_msg_standard_input
Denis Vlasenko9f739442006-12-16 23:49:13 +000021 && NOT_LONE_DASH(filename)
Manuel Novoa III cad53642003-03-19 09:13:01 +000022 ) {
Denis Vlasenkoddec5af2006-10-26 23:25:17 +000023 fp = fopen_or_warn(filename, "r");
Manuel Novoa III cad53642003-03-19 09:13:01 +000024 }
Manuel Novoa III cad53642003-03-19 09:13:01 +000025 return fp;
26}
Denis Vlasenko62a90cd2008-03-17 09:07:36 +000027
Denis Vlasenkodefc1ea2008-06-27 02:52:20 +000028FILE* FAST_FUNC xfopen_stdin(const char *filename)
Denis Vlasenko62a90cd2008-03-17 09:07:36 +000029{
30 FILE *fp = fopen_or_warn_stdin(filename);
31 if (fp)
32 return fp;
Denys Vlasenkoe4dcba12010-10-28 18:57:19 +020033 xfunc_die(); /* We already output an error message. */
Denis Vlasenko62a90cd2008-03-17 09:07:36 +000034}
35
Denis Vlasenkodefc1ea2008-06-27 02:52:20 +000036int FAST_FUNC open_or_warn_stdin(const char *filename)
Denis Vlasenko62a90cd2008-03-17 09:07:36 +000037{
38 int fd = STDIN_FILENO;
39
40 if (filename != bb_msg_standard_input
41 && NOT_LONE_DASH(filename)
42 ) {
43 fd = open_or_warn(filename, O_RDONLY);
44 }
45
46 return fd;
47}
Denys Vlasenkoe7b0a9e2010-08-22 05:39:15 +020048
49int FAST_FUNC xopen_stdin(const char *filename)
50{
51 int fd = open_or_warn_stdin(filename);
52 if (fd >= 0)
53 return fd;
Denys Vlasenkoe4dcba12010-10-28 18:57:19 +020054 xfunc_die(); /* We already output an error message. */
Denys Vlasenkoe7b0a9e2010-08-22 05:39:15 +020055}