libbb: [x]fopen_for_{read,write} introduced and used.
 (by Valdimir)

function                                             old     new   delta
config_open2                                           -      41     +41
config_read                                          507     542     +35
find_pair                                            169     187     +18
fopen_for_write                                        -      14     +14
fopen_for_read                                         -      14     +14
find_main                                            406     418     +12
xfopen_for_write                                       -      10     +10
xfopen_for_read                                        -      10     +10
popstring                                            134     140      +6
parse_inittab                                        396     401      +5
next_token                                           923     928      +5
pack_gzip                                           1659    1661      +2
bb__parsespent                                       117     119      +2
fallbackSort                                        1719    1717      -2
evalvar                                             1376    1374      -2
qrealloc                                              36      33      -3
...
...
...
...
singlemount                                         4579    4569     -10
process_stdin                                        443     433     -10
patch_main                                          1111    1101     -10
ifupdown_main                                       2175    2165     -10
file_action_grep                                      90      80     -10
uuidcache_init                                       649     637     -12
hush_main                                            797     785     -12
read_config                                          230     217     -13
dpkg_main                                           3835    3820     -15
read_line_input                                     3134    3110     -24
sysctl_main                                          232     203     -29
config_open                                           40      10     -30
WARN_BAD_LINE                                         44       -     -44
login_main                                          1714    1575    -139
------------------------------------------------------------------------------
(add/remove: 5/1 grow/shrink: 8/74 up/down: 174/-737)        Total: -563 bytes


diff --git a/shell/hush.c b/shell/hush.c
index 3dc27d9..cf6a18f 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -4012,7 +4012,7 @@
 
 	if (argv[0] && argv[0][0] == '-') {
 		debug_printf("sourcing /etc/profile\n");
-		input = fopen("/etc/profile", "r");
+		input = fopen_for_read("/etc/profile");
 		if (input != NULL) {
 			close_on_exec_on(fileno(input));
 			parse_and_run_file(input);
@@ -4116,7 +4116,7 @@
 		debug_printf("\nrunning script '%s'\n", argv[optind]);
 		global_argv = argv + optind;
 		global_argc = argc - optind;
-		input = xfopen(argv[optind], "r");
+		input = xfopen_for_read(argv[optind]);
 		fcntl(fileno(input), F_SETFD, FD_CLOEXEC);
 		opt = parse_and_run_file(input);
 	}
@@ -4423,7 +4423,7 @@
 		return EXIT_FAILURE;
 
 	/* XXX search through $PATH is missing */
-	input = fopen(argv[1], "r");
+	input = fopen_for_read(argv[1]);
 	if (!input) {
 		bb_error_msg("can't open '%s'", argv[1]);
 		return EXIT_FAILURE;