aboutsummaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-07-21 23:05:26 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-07-21 23:05:26 +0000
commit5415c856eaccd1bc5d064022770a288f43b2e94f (patch)
tree5973db4e6f81b5e311e8944700ded5db1083d440 /libbb
parentb74a2dba571d1c5a6127c683fb50923336d9c59f (diff)
downloadbusybox-w32-5415c856eaccd1bc5d064022770a288f43b2e94f.tar.gz
busybox-w32-5415c856eaccd1bc5d064022770a288f43b2e94f.tar.bz2
busybox-w32-5415c856eaccd1bc5d064022770a288f43b2e94f.zip
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
Diffstat (limited to 'libbb')
-rw-r--r--libbb/appletlib.c2
-rw-r--r--libbb/lineedit.c4
-rw-r--r--libbb/login.c2
-rw-r--r--libbb/parse_config.c20
-rw-r--r--libbb/procps.c2
-rw-r--r--libbb/rtc.c2
-rw-r--r--libbb/wfopen.c20
7 files changed, 41 insertions, 11 deletions
diff --git a/libbb/appletlib.c b/libbb/appletlib.c
index 8c35450f8..beb1d6fcb 100644
--- a/libbb/appletlib.c
+++ b/libbb/appletlib.c
@@ -316,7 +316,7 @@ static void parse_config_file(void)
316 || !S_ISREG(st.st_mode) /* Not a regular file? */ 316 || !S_ISREG(st.st_mode) /* Not a regular file? */
317 || (st.st_uid != 0) /* Not owned by root? */ 317 || (st.st_uid != 0) /* Not owned by root? */
318 || (st.st_mode & (S_IWGRP | S_IWOTH)) /* Writable by non-root? */ 318 || (st.st_mode & (S_IWGRP | S_IWOTH)) /* Writable by non-root? */
319 || !(f = fopen(config_file, "r")) /* Cannot open? */ 319 || !(f = fopen_for_read(config_file)) /* Cannot open? */
320 ) { 320 ) {
321 return; 321 return;
322 } 322 }
diff --git a/libbb/lineedit.c b/libbb/lineedit.c
index a46b5d2c4..2e16e6a0a 100644
--- a/libbb/lineedit.c
+++ b/libbb/lineedit.c
@@ -989,7 +989,7 @@ static void load_history(const char *fromfile)
989 989
990 /* NB: do not trash old history if file can't be opened */ 990 /* NB: do not trash old history if file can't be opened */
991 991
992 fp = fopen(fromfile, "r"); 992 fp = fopen_for_read(fromfile);
993 if (fp) { 993 if (fp) {
994 /* clean up old history */ 994 /* clean up old history */
995 for (hi = state->cnt_history; hi > 0;) { 995 for (hi = state->cnt_history; hi > 0;) {
@@ -1022,7 +1022,7 @@ static void save_history(const char *tofile)
1022{ 1022{
1023 FILE *fp; 1023 FILE *fp;
1024 1024
1025 fp = fopen(tofile, "w"); 1025 fp = fopen_for_write(tofile);
1026 if (fp) { 1026 if (fp) {
1027 int i; 1027 int i;
1028 1028
diff --git a/libbb/login.c b/libbb/login.c
index 1703a2eb7..b3e199ce4 100644
--- a/libbb/login.c
+++ b/libbb/login.c
@@ -32,7 +32,7 @@ void FAST_FUNC print_login_issue(const char *issue_file, const char *tty)
32 32
33 puts("\r"); /* start a new line */ 33 puts("\r"); /* start a new line */
34 34
35 fp = fopen(issue_file, "r"); 35 fp = fopen_for_read(issue_file);
36 if (!fp) 36 if (!fp)
37 return; 37 return;
38 while ((c = fgetc(fp)) != EOF) { 38 while ((c = fgetc(fp)) != EOF) {
diff --git a/libbb/parse_config.c b/libbb/parse_config.c
index 3174a649e..5109066d8 100644
--- a/libbb/parse_config.c
+++ b/libbb/parse_config.c
@@ -59,11 +59,11 @@ Typical usage:
59 59
60*/ 60*/
61 61
62parser_t* FAST_FUNC config_open(const char *filename) 62parser_t* FAST_FUNC config_open2(const char *filename, FILE* FAST_FUNC (*fopen_func)(const char *path))
63{ 63{
64 parser_t *parser = xzalloc(sizeof(parser_t)); 64 parser_t *parser = xzalloc(sizeof(parser_t));
65 /* empty file configures nothing */ 65 /* empty file configures nothing */
66 parser->fp = fopen_or_warn_stdin(filename); 66 parser->fp = fopen_func(filename);
67 if (parser->fp) 67 if (parser->fp)
68 return parser; 68 return parser;
69 if (ENABLE_FEATURE_CLEAN_UP) 69 if (ENABLE_FEATURE_CLEAN_UP)
@@ -71,6 +71,11 @@ parser_t* FAST_FUNC config_open(const char *filename)
71 return NULL; 71 return NULL;
72} 72}
73 73
74parser_t* FAST_FUNC config_open(const char *filename)
75{
76 return config_open2(filename, fopen_or_warn_stdin);
77}
78
74static void config_free_data(parser_t *const parser) 79static void config_free_data(parser_t *const parser)
75{ 80{
76 free(parser->line); 81 free(parser->line);
@@ -114,6 +119,7 @@ int FAST_FUNC config_read(parser_t *parser, char **tokens, unsigned flags, const
114 int ntokens = flags & 0xFF; 119 int ntokens = flags & 0xFF;
115 int mintokens = (flags & 0xFF00) >> 8; 120 int mintokens = (flags & 0xFF00) >> 8;
116 121
122 again:
117 // N.B. this could only be used in read-in-one-go version, or when tokens use xstrdup(). TODO 123 // N.B. this could only be used in read-in-one-go version, or when tokens use xstrdup(). TODO
118 //if (!parser->lineno || !(flags & PARSE_DONT_NULL)) 124 //if (!parser->lineno || !(flags & PARSE_DONT_NULL))
119 memset(tokens, 0, sizeof(tokens[0]) * ntokens); 125 memset(tokens, 0, sizeof(tokens[0]) * ntokens);
@@ -211,9 +217,13 @@ int FAST_FUNC config_read(parser_t *parser, char **tokens, unsigned flags, const
211 //bb_info_msg("A[%s]", line); 217 //bb_info_msg("A[%s]", line);
212 } 218 }
213 219
214 if (ii < mintokens) 220 if (ii < mintokens) {
215 bb_error_msg_and_die("bad line %u: %d tokens found, %d needed", 221 bb_error_msg("bad line %u: %d tokens found, %d needed",
216 parser->lineno, ii, mintokens); 222 parser->lineno, ii, mintokens);
223 if (flags & PARSE_MIN_DIE)
224 xfunc_die();
225 goto again;
226 }
217 227
218 return ii; 228 return ii;
219} 229}
diff --git a/libbb/procps.c b/libbb/procps.c
index f799099fd..ba3d25050 100644
--- a/libbb/procps.c
+++ b/libbb/procps.c
@@ -308,7 +308,7 @@ procps_status_t* FAST_FUNC procps_scan(procps_status_t* sp, int flags)
308 FILE *file; 308 FILE *file;
309 309
310 strcpy(filename_tail, "/smaps"); 310 strcpy(filename_tail, "/smaps");
311 file = fopen(filename, "r"); 311 file = fopen_for_read(filename);
312 if (!file) 312 if (!file)
313 break; 313 break;
314 while (fgets(buf, sizeof(buf), file)) { 314 while (fgets(buf, sizeof(buf), file)) {
diff --git a/libbb/rtc.c b/libbb/rtc.c
index 1fdeee80f..222d977ca 100644
--- a/libbb/rtc.c
+++ b/libbb/rtc.c
@@ -14,7 +14,7 @@
14int FAST_FUNC rtc_adjtime_is_utc(void) 14int FAST_FUNC rtc_adjtime_is_utc(void)
15{ 15{
16 int utc = 0; 16 int utc = 0;
17 FILE *f = fopen(ADJTIME_PATH, "r"); 17 FILE *f = fopen_for_read(ADJTIME_PATH);
18 18
19 if (f) { 19 if (f) {
20 RESERVE_CONFIG_BUFFER(buffer, 128); 20 RESERVE_CONFIG_BUFFER(buffer, 128);
diff --git a/libbb/wfopen.c b/libbb/wfopen.c
index ac365c2a0..4c84b3ba9 100644
--- a/libbb/wfopen.c
+++ b/libbb/wfopen.c
@@ -18,3 +18,23 @@ FILE* FAST_FUNC fopen_or_warn(const char *path, const char *mode)
18 } 18 }
19 return fp; 19 return fp;
20} 20}
21
22FILE* FAST_FUNC fopen_for_read(const char *path)
23{
24 return fopen(path, "r");
25}
26
27FILE* FAST_FUNC xfopen_for_read(const char *path)
28{
29 return xfopen(path, "r");
30}
31
32FILE* FAST_FUNC fopen_for_write(const char *path)
33{
34 return fopen(path, "w");
35}
36
37FILE* FAST_FUNC xfopen_for_write(const char *path)
38{
39 return xfopen(path, "w");
40}