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,
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.
// 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: */
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)
#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);
}
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)
{
/* 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;
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)
/*99999,*/ /* sp->sp_max */
/*7*/ /* sp->sp_warn */
);
- xwrite(fd, s, strlen(s));
+ xwrite_str(fd, s);
close(fd);
}
#endif
/* 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));
}
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);
}
}
#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)
{
}
#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)
{
#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)
{
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,
}
if (option_mask32 & FLAG_WRITE) {
- dwrite_str(fd, value);
+ xwrite_str(fd, value);
close(fd);
if (option_mask32 & FLAG_SHOW_KEYS)
printf("%s = ", outname);
static void prs(const char *s)
{
if (*s)
- write(STDERR_FILENO, s, strlen(s));
+ xwrite_str(STDERR_FILENO, s);
}
static void prn(unsigned u)
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 == '-') {
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);
}
}