*: move get_sock_lsa and xwrite_str to libbb, use where appropriate
No binary (build failed)
—
(log yok)
| @@ -12892,7 +12892,7 @@ static int e2fsck_update_progress(e2fsck_t ctx, int pass, | |
| if (ctx->progress_fd) { | |
| sprintf(buf, "%d %lu %lu\n", pass, cur, max); | |
| - | write(ctx->progress_fd, buf, strlen(buf)); |
| + | xwrite_str(ctx->progress_fd, buf); |
| } else { | |
| percent = calc_percent(&e2fsck_tbl, pass, cur, max); | |
| e2fsck_simple_progress(ctx, ctx->device_name, | |
| @@ -489,6 +489,8 @@ int create_and_bind_dgram_or_die(const char *bindaddr, int port) FAST_FUNC; | |
| int create_and_connect_stream_or_die(const char *peer, int port) FAST_FUNC; | |
| /* Connect to peer identified by lsa */ | |
| int xconnect_stream(const len_and_sockaddr *lsa) FAST_FUNC; | |
| + | /* Get local address of bound or accepted socket */ |
| + | len_and_sockaddr *get_sock_lsa(int fd) FAST_FUNC; |
| /* Return malloc'ed len_and_sockaddr with socket address of host:port | |
| * Currently will return IPv4 or IPv6 sockaddrs only | |
| * (depending on host), but in theory nothing prevents e.g. | |
| @@ -607,6 +609,7 @@ extern ssize_t safe_write(int fd, const void *buf, size_t count) FAST_FUNC; | |
| // if some data was written before error occurred | |
| extern ssize_t full_write(int fd, const void *buf, size_t count) FAST_FUNC; | |
| extern void xwrite(int fd, const void *buf, size_t count) FAST_FUNC; | |
| + | extern void xwrite_str(int fd, const char *str) FAST_FUNC; |
| extern void xopen_xwrite_close(const char* file, const char *str) FAST_FUNC; | |
| /* Reads and prints to stdout till eof, then closes FILE. Exits on error: */ | |
| @@ -99,7 +99,7 @@ static const char *unpack_usage_messages(void) | |
| static void full_write2_str(const char *str) | |
| { | |
| - | full_write(STDERR_FILENO, str, strlen(str)); |
| + | xwrite_str(STDERR_FILENO, str); |
| } | |
| void FAST_FUNC bb_show_usage(void) | |
| @@ -10,11 +10,10 @@ | |
| #include "libbb.h" | |
| /* Open file and write string str to it, close file. | |
| - | * Die on any open or write-error. */ |
| + | * Die on any open or write error. */ |
| void FAST_FUNC xopen_xwrite_close(const char* file, const char* str) | |
| { | |
| int fd = xopen(file, O_WRONLY); | |
| - | |
| - | xwrite(fd, str, strlen(str)); |
| + | xwrite_str(fd, str); |
| close(fd); | |
| } | |
| @@ -35,6 +35,19 @@ int FAST_FUNC setsockopt_bindtodevice(int fd, const char *iface) | |
| return r; | |
| } | |
| + | len_and_sockaddr* FAST_FUNC get_sock_lsa(int fd) |
| + | { |
| + | len_and_sockaddr *lsa; |
| + | socklen_t len = 0; |
| + | |
| + | /* Can be optimized to do only one getsockname() */ |
| + | if (getsockname(fd, NULL, &len) != 0) |
| + | return NULL; |
| + | lsa = xzalloc(LSA_LEN_SIZE + len); |
| + | lsa->len = len; |
| + | getsockname(fd, &lsa->u.sa, &lsa->len); |
| + | return lsa; |
| + | } |
| void FAST_FUNC xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen) | |
| { | |
| @@ -51,8 +64,9 @@ void FAST_FUNC xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen) | |
| /* Return port number for a service. | |
| * If "port" is a number use it as the port. | |
| - | * If "port" is a name it is looked up in /etc/services, if it isnt found return |
| - | * default_port */ |
| + | * If "port" is a name it is looked up in /etc/services, |
| + | * if it isnt found return default_port |
| + | */ |
| unsigned FAST_FUNC bb_lookup_port(const char *port, const char *protocol, unsigned default_port) | |
| { | |
| unsigned port_nr = default_port; | |
| @@ -208,6 +208,10 @@ void FAST_FUNC xwrite(int fd, const void *buf, size_t count) | |
| bb_error_msg_and_die("short write"); | |
| } | |
| } | |
| + | void FAST_FUNC xwrite_str(int fd, const char *str) |
| + | { |
| + | xwrite(fd, str, strlen(str)); |
| + | } |
| // Die with an error message if we can't lseek to the right spot. | |
| off_t FAST_FUNC xlseek(int fd, off_t offset, int whence) | |
| @@ -145,7 +145,7 @@ int adduser_main(int argc UNUSED_PARAM, char **argv) | |
| /*99999,*/ /* sp->sp_max */ | |
| /*7*/ /* sp->sp_warn */ | |
| ); | |
| - | xwrite(fd, s, strlen(s)); |
| + | xwrite_str(fd, s); |
| close(fd); | |
| } | |
| #endif | |
| @@ -713,6 +713,7 @@ int getty_main(int argc UNUSED_PARAM, char **argv) | |
| /* Write the modem init string and DON'T flush the buffers */ | |
| if (options.flags & F_INITSTRING) { | |
| debug("writing init string\n"); | |
| + | /* todo: use xwrite_str? */ |
| full_write(STDOUT_FILENO, options.initstring, strlen(options.initstring)); | |
| } | |
| @@ -3513,7 +3513,7 @@ static void set_tainted(int fd, const char *m_name, | |
| buf[sizeof(buf)-1] = '\0'; | |
| oldval = strtoul(buf, NULL, 10); | |
| sprintf(buf, "%d\n", oldval | taint); | |
| - | write(fd, buf, strlen(buf)); |
| + | xwrite_str(fd, buf); |
| } | |
| } | |
| @@ -107,14 +107,6 @@ struct globals { | |
| #define G (*(struct globals*)&bb_common_bufsiz1) | |
| #define INIT_G() do { } while (0) | |
| - | |
| - | // libbb candidate? |
| - | static void |
| - | xwrite_str(int fd, const char *str) |
| - | { |
| - | xwrite(fd, str, strlen(str)); |
| - | } |
| - | |
| static char * | |
| replace_text(const char *str, const char from, const char *to) | |
| { | |
| @@ -918,20 +910,6 @@ handle_stou(void) | |
| } | |
| #endif /* ENABLE_FEATURE_FTP_WRITE */ | |
| - | /* TODO: libbb candidate (tftp has another copy) */ |
| - | static len_and_sockaddr *get_sock_lsa(int s) |
| - | { |
| - | len_and_sockaddr *lsa; |
| - | socklen_t len = 0; |
| - | |
| - | if (getsockname(s, NULL, &len) != 0) |
| - | return NULL; |
| - | lsa = xzalloc(LSA_LEN_SIZE + len); |
| - | lsa->len = len; |
| - | getsockname(s, &lsa->u.sa, &lsa->len); |
| - | return lsa; |
| - | } |
| - | |
| int ftpd_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | |
| int ftpd_main(int argc UNUSED_PARAM, char **argv) | |
| { | |
| @@ -622,21 +622,6 @@ int tftp_main(int argc UNUSED_PARAM, char **argv) | |
| #endif /* ENABLE_TFTP */ | |
| #if ENABLE_TFTPD | |
| - | |
| - | /* TODO: libbb candidate? */ |
| - | static len_and_sockaddr *get_sock_lsa(int s) |
| - | { |
| - | len_and_sockaddr *lsa; |
| - | socklen_t len = 0; |
| - | |
| - | if (getsockname(s, NULL, &len) != 0) |
| - | return NULL; |
| - | lsa = xzalloc(LSA_LEN_SIZE + len); |
| - | lsa->len = len; |
| - | getsockname(s, &lsa->u.sa, &lsa->len); |
| - | return lsa; |
| - | } |
| - | |
| int tftpd_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | |
| int tftpd_main(int argc UNUSED_PARAM, char **argv) | |
| { | |
| @@ -21,11 +21,6 @@ static int sysctl_display_all(const char *path); | |
| static int sysctl_handle_preload_file(const char *filename); | |
| static void sysctl_dots_to_slashes(char *name); | |
| - | static void dwrite_str(int fd, const char *buf) |
| - | { |
| - | write(fd, buf, strlen(buf)); |
| - | } |
| - | |
| enum { | |
| FLAG_SHOW_KEYS = 1 << 0, | |
| FLAG_SHOW_KEY_ERRORS = 1 << 1, | |
| @@ -147,7 +142,7 @@ static int sysctl_act_on_setting(char *setting) | |
| } | |
| if (option_mask32 & FLAG_WRITE) { | |
| - | dwrite_str(fd, value); |
| + | xwrite_str(fd, value); |
| close(fd); | |
| if (option_mask32 & FLAG_SHOW_KEYS) | |
| printf("%s = ", outname); | |
| @@ -743,7 +743,7 @@ static void print_tree(struct op *head) | |
| static void prs(const char *s) | |
| { | |
| if (*s) | |
| - | write(STDERR_FILENO, s, strlen(s)); |
| + | xwrite_str(STDERR_FILENO, s); |
| } | |
| static void prn(unsigned u) | |
| @@ -3600,7 +3600,7 @@ static int doset(struct op *t UNUSED_PARAM, char **args) | |
| cp = args[1]; | |
| if (cp == NULL) { | |
| for (vp = vlist; vp; vp = vp->next) | |
| - | varput(vp->name, 1); |
| + | varput(vp->name, STDOUT_FILENO); |
| return 0; | |
| } | |
| if (*cp == '-') { | |
| @@ -3639,8 +3639,8 @@ static int doset(struct op *t UNUSED_PARAM, char **args) | |
| static void varput(char *s, int out) | |
| { | |
| if (isalnum(*s) || *s == '_') { | |
| - | write(out, s, strlen(s)); |
| - | write(out, "\n", 1); |
| + | xwrite_str(out, s); |
| + | xwrite(out, "\n", 1); |
| } | |
| } | |