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/networking/hostname.c b/networking/hostname.c
index 93cbc96..dd2a206 100644
--- a/networking/hostname.c
+++ b/networking/hostname.c
@@ -16,28 +16,19 @@
 
 static void do_sethostname(char *s, int isfile)
 {
-	FILE *f;
-
 	if (!s)
 		return;
-	if (!isfile) {
-		if (sethostname(s, strlen(s)) < 0) {
-			if (errno == EPERM)
-				bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);
-			bb_perror_msg_and_die("sethostname");
-		}
-	} else {
-		f = xfopen(s, "r");
-#define strbuf bb_common_bufsiz1
-		while (fgets(strbuf, sizeof(strbuf), f) != NULL) {
-			if (strbuf[0] == '#') {
-				continue;
-			}
-			chomp(strbuf);
-			do_sethostname(strbuf, 0);
+	if (isfile) {
+		parser_t *parser = config_open2(s, xfopen_for_read);
+		while (config_read(parser, &s, 1, 1, "# \t", 0)) {
+			do_sethostname(s, 0);
 		}
 		if (ENABLE_FEATURE_CLEAN_UP)
-			fclose(f);
+			config_close(parser);
+	} else if (sethostname(s, strlen(s)) < 0) {
+		if (errno == EPERM)
+			bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);
+		bb_perror_msg_and_die("sethostname");
 	}
 }
 
@@ -98,5 +89,5 @@
 	}
 	if (ENABLE_FEATURE_CLEAN_UP)
 		free(buf);
-	return 0;
+	return EXIT_SUCCESS;
 }