libbb: introduce xmalloc_xopen_read_close and use where appropriate

instead of xmalloc_open_read_close.

function                                             old     new   delta
xmalloc_xopen_read_close                               -      34     +34
xmalloc_open_read_close                              163     171      +8
passwd_main                                         1070    1074      +4
rexecve                                              254     257      +3
handle_incoming_and_exit                            2657    2659      +2
parse_command                                       1509    1510      +1
buffer_fill_and_print                                 76      73      -3
evaltreenr                                           599     589     -10
evaltree                                             599     589     -10
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 5/3 up/down: 52/-23)             Total: 29 bytes
This commit is contained in:
Denis Vlasenko 2008-04-19 19:32:08 +00:00
parent d9c51e9fa7
commit f3745ea489
5 changed files with 20 additions and 7 deletions

View File

@ -556,7 +556,10 @@ extern char *reads(int fd, char *buf, size_t count);
extern char *xmalloc_reads(int fd, char *pfx, size_t *maxsz_p); extern char *xmalloc_reads(int fd, char *pfx, size_t *maxsz_p);
extern ssize_t read_close(int fd, void *buf, size_t maxsz); extern ssize_t read_close(int fd, void *buf, size_t maxsz);
extern ssize_t open_read_close(const char *filename, void *buf, size_t maxsz); extern ssize_t open_read_close(const char *filename, void *buf, size_t maxsz);
/* Returns NULL if file can't be opened */
extern void *xmalloc_open_read_close(const char *filename, size_t *maxsz_p); extern void *xmalloc_open_read_close(const char *filename, size_t *maxsz_p);
/* Never returns NULL */
extern void *xmalloc_xopen_read_close(const char *filename, size_t *maxsz_p);
extern ssize_t safe_write(int fd, const void *buf, size_t count); extern ssize_t safe_write(int fd, const void *buf, size_t count);
// NB: will return short write on error, not -1, // NB: will return short write on error, not -1,
@ -568,9 +571,9 @@ extern void xwrite(int fd, const void *buf, size_t count);
extern void xprint_and_close_file(FILE *file); extern void xprint_and_close_file(FILE *file);
/* Reads up to (and including) TERMINATING_STRING: */ /* Reads up to (and including) TERMINATING_STRING: */
extern char *xmalloc_fgets_str(FILE *file, const char *terminating_string); extern char *xmalloc_fgets_str(FILE *file, const char *terminating_string);
/* Chops off TERMINATING_STRING: from the end: */ /* Chops off TERMINATING_STRING from the end: */
extern char *xmalloc_fgetline_str(FILE *file, const char *terminating_string); extern char *xmalloc_fgetline_str(FILE *file, const char *terminating_string);
/* Reads up to (and including) "\n" or NUL byte */ /* Reads up to (and including) "\n" or NUL byte: */
extern char *xmalloc_fgets(FILE *file); extern char *xmalloc_fgets(FILE *file);
/* Chops off '\n' from the end, unlike fgets: */ /* Chops off '\n' from the end, unlike fgets: */
extern char *xmalloc_fgetline(FILE *file); extern char *xmalloc_fgetline(FILE *file);

View File

@ -212,7 +212,9 @@ void *xmalloc_open_read_close(const char *filename, size_t *sizep)
int fd; int fd;
off_t len; off_t len;
fd = xopen(filename, O_RDONLY); fd = open(filename, O_RDONLY);
if (fd < 0)
return NULL;
/* /proc/N/stat files report len 0 here */ /* /proc/N/stat files report len 0 here */
/* In order to make such files readable, we add small const */ /* In order to make such files readable, we add small const */
len = xlseek(fd, 0, SEEK_END) | 0x3ff; /* + up to 1k */ len = xlseek(fd, 0, SEEK_END) | 0x3ff; /* + up to 1k */
@ -229,3 +231,11 @@ void *xmalloc_open_read_close(const char *filename, size_t *sizep)
*sizep = size; *sizep = size;
return buf; return buf;
} }
void *xmalloc_xopen_read_close(const char *filename, size_t *sizep)
{
void *buf = xmalloc_open_read_close(filename, sizep);
if (!buf)
bb_perror_msg_and_die("can't read '%s'", filename);
return buf;
}

View File

@ -363,7 +363,7 @@ int chat_main(int argc ATTRIBUTE_UNUSED, char **argv)
if ('@' == *buf) { if ('@' == *buf) {
// skip the @ and any following white-space // skip the @ and any following white-space
trim(++buf); trim(++buf);
buf = loaded = xmalloc_open_read_close(buf, NULL); buf = loaded = xmalloc_xopen_read_close(buf, NULL);
} }
// expand escape sequences in command // expand escape sequences in command

View File

@ -160,7 +160,7 @@ int lpd_main(int argc ATTRIBUTE_UNUSED, char *argv[])
// (we exit 127 if helper cannot be executed) // (we exit 127 if helper cannot be executed)
var[1] = '\0'; var[1] = '\0';
// read and delete ctrlfile // read and delete ctrlfile
q = xmalloc_open_read_close(filenames[0], NULL); q = xmalloc_xopen_read_close(filenames[0], NULL);
unlink(filenames[0]); unlink(filenames[0]);
// provide datafile name // provide datafile name
// we can use leaky setenv since we are about to exec or exit // we can use leaky setenv since we are about to exec or exit

View File

@ -109,9 +109,9 @@ int readprofile_main(int argc ATTRIBUTE_UNUSED, char **argv)
* Use an fd for the profiling buffer, to skip stdio overhead * Use an fd for the profiling buffer, to skip stdio overhead
*/ */
len = MAXINT(ssize_t); len = MAXINT(ssize_t);
buf = xmalloc_open_read_close(proFile, &len); buf = xmalloc_xopen_read_close(proFile, &len);
if (!optNative) { if (!optNative) {
int entries = len/sizeof(*buf); int entries = len / sizeof(*buf);
int big = 0, small = 0, i; int big = 0, small = 0, i;
unsigned *p; unsigned *p;