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:
parent
d9c51e9fa7
commit
f3745ea489
@ -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);
|
||||||
|
12
libbb/read.c
12
libbb/read.c
@ -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;
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user