int catv_main(int argc ATTRIBUTE_UNUSED, char **argv) { int retval = EXIT_SUCCESS; int fd; unsigned flags; flags = getopt32(argv, "etv"); #define CATV_OPT_e (1<<0) #define CATV_OPT_t (1<<1) #define CATV_OPT_v (1<<2) flags ^= CATV_OPT_v; argv += optind; /* Read from stdin if there's nothing else to do. */ if (!argv[0]) *--argv = (char*)"-"; do { fd = open_or_warn_stdin(*argv); if (fd < 0) { retval = EXIT_FAILURE; continue; } for (;;) { int i, res; #define read_buf bb_common_bufsiz1 res = read(fd, read_buf, COMMON_BUFSIZE); if (res < 0) retval = EXIT_FAILURE; if (res < 1) break; for (i = 0; i < res; i++) { unsigned char c = read_buf[i]; if (c > 126 && (flags & CATV_OPT_v)) { if (c == 127) { printf("^?"); continue; } printf("M-"); c -= 128; } if (c < 32) { if (c == 10) { if (flags & CATV_OPT_e) bb_putchar('$'); } else if (flags & (c==9 ? CATV_OPT_t : CATV_OPT_v)) { printf("^%c", c+'@'); continue; } } bb_putchar(c); } } if (ENABLE_FEATURE_CLEAN_UP && fd) close(fd); } while (*++argv); fflush_stdout_and_exit(retval); }
static uint8_t *hash_file(const char *filename /*, hash_algo_t hash_algo*/) { int src_fd, hash_len, count; union _ctx_ { sha512_ctx_t sha512; sha256_ctx_t sha256; sha1_ctx_t sha1; md5_ctx_t md5; } context; uint8_t *hash_value = NULL; RESERVE_CONFIG_UBUFFER(in_buf, 4096); void FAST_FUNC (*update)(const void*, size_t, void*); void FAST_FUNC (*final)(void*, void*); hash_algo_t hash_algo = applet_name[3]; src_fd = open_or_warn_stdin(filename); if (src_fd < 0) { return NULL; } /* figure specific hash algorithims */ if (ENABLE_MD5SUM && hash_algo == HASH_MD5) { md5_begin(&context.md5); update = (void*)md5_hash; final = (void*)md5_end;
int catv_main(int argc UNUSED_PARAM, char **argv) { int retval = EXIT_SUCCESS; int fd; unsigned opts; #define CATV_OPT_e (1<<0) #define CATV_OPT_t (1<<1) #define CATV_OPT_v (1<<2) typedef char BUG_const_mismatch[ CATV_OPT_e == VISIBLE_ENDLINE && CATV_OPT_t == VISIBLE_SHOW_TABS ? 1 : -1 ]; opts = getopt32(argv, "etv"); argv += optind; #if 0 /* These consts match, we can just pass "opts" to visible() */ if (opts & CATV_OPT_e) flags |= VISIBLE_ENDLINE; if (opts & CATV_OPT_t) flags |= VISIBLE_SHOW_TABS; #endif /* Read from stdin if there's nothing else to do. */ if (!argv[0]) *--argv = (char*)"-"; do { fd = open_or_warn_stdin(*argv); if (fd < 0) { retval = EXIT_FAILURE; continue; } for (;;) { int i, res; #define read_buf bb_common_bufsiz1 res = read(fd, read_buf, COMMON_BUFSIZE); if (res < 0) retval = EXIT_FAILURE; if (res <= 0) break; for (i = 0; i < res; i++) { unsigned char c = read_buf[i]; if (opts & CATV_OPT_v) { putchar(c); } else { char buf[sizeof("M-^c")]; visible(c, buf, opts); fputs(buf, stdout); } } } if (ENABLE_FEATURE_CLEAN_UP && fd) close(fd); } while (*++argv); fflush_stdout_and_exit(retval); }
static int catv(unsigned opts, char **argv) { int retval = EXIT_SUCCESS; int fd; BUILD_BUG_ON(CATV_OPT_e != VISIBLE_ENDLINE); BUILD_BUG_ON(CATV_OPT_t != VISIBLE_SHOW_TABS); #if 0 /* These consts match, we can just pass "opts" to visible() */ if (opts & CATV_OPT_e) flags |= VISIBLE_ENDLINE; if (opts & CATV_OPT_t) flags |= VISIBLE_SHOW_TABS; #endif /* Read from stdin if there's nothing else to do. */ if (!argv[0]) *--argv = (char*)"-"; #define read_buf bb_common_bufsiz1 setup_common_bufsiz(); do { fd = open_or_warn_stdin(*argv); if (fd < 0) { retval = EXIT_FAILURE; continue; } for (;;) { int i, res; res = read(fd, read_buf, COMMON_BUFSIZE); if (res < 0) retval = EXIT_FAILURE; if (res <= 0) break; for (i = 0; i < res; i++) { unsigned char c = read_buf[i]; char buf[sizeof("M-^c")]; visible(c, buf, opts); fputs(buf, stdout); } } if (ENABLE_FEATURE_CLEAN_UP && fd) close(fd); } while (*++argv); fflush_stdout_and_exit(retval); }
int bb_cat(char **argv) { int fd; int retval = EXIT_SUCCESS; if (!*argv) argv = (char**) &bb_argv_dash; do { fd = open_or_warn_stdin(*argv); if (fd >= 0) { /* This is not a xfunc - never exits */ off_t r = bb_copyfd_eof(fd, STDOUT_FILENO); if (fd != STDIN_FILENO) close(fd); if (r >= 0) continue; } retval = EXIT_FAILURE; } while (*++argv); return retval; }
static uint8_t *hash_file(const char *filename) { int src_fd, hash_len, count; union _ctx_ { sha3_ctx_t sha3; sha512_ctx_t sha512; sha256_ctx_t sha256; sha1_ctx_t sha1; md5_ctx_t md5; } context; uint8_t *hash_value; void FAST_FUNC (*update)(void*, const void*, size_t); void FAST_FUNC (*final)(void*, void*); char hash_algo; src_fd = open_or_warn_stdin(filename); if (src_fd < 0) { return NULL; } hash_algo = applet_name[3]; /* figure specific hash algorithms */ if (ENABLE_MD5SUM && hash_algo == HASH_MD5) { md5_begin(&context.md5); update = (void*)md5_hash; final = (void*)md5_end; hash_len = 16; } else if (ENABLE_SHA1SUM && hash_algo == HASH_SHA1) { sha1_begin(&context.sha1); update = (void*)sha1_hash;
int split_main(int argc UNUSED_PARAM, char **argv) { unsigned suffix_len = 2; char *pfx; char *count_p; const char *sfx; off_t cnt = 1000; off_t remaining = 0; unsigned opt; ssize_t bytes_read, to_write; char *src; opt_complementary = "?2:a+"; /* max 2 args; -a N */ opt = getopt32(argv, "l:b:a:", &count_p, &count_p, &suffix_len); if (opt & SPLIT_OPT_l) cnt = XATOOFF(count_p); if (opt & SPLIT_OPT_b) // FIXME: also needs XATOOFF cnt = xatoull_sfx(count_p, split_suffices); sfx = "x"; argv += optind; if (argv[0]) { int fd; if (argv[1]) sfx = argv[1]; fd = open_or_warn_stdin(argv[0]); if (fd == -1) return EXIT_FAILURE; xmove_fd(fd, STDIN_FILENO); } else { argv[0] = (char *) bb_msg_standard_input; } if (NAME_MAX < strlen(sfx) + suffix_len) bb_error_msg_and_die("suffix too long"); { char *char_p = xzalloc(suffix_len + 1); memset(char_p, 'a', suffix_len); pfx = xasprintf("%s%s", sfx, char_p); if (ENABLE_FEATURE_CLEAN_UP) free(char_p); } while (1) { bytes_read = safe_read(STDIN_FILENO, read_buffer, READ_BUFFER_SIZE); if (!bytes_read) break; if (bytes_read < 0) bb_simple_perror_msg_and_die(argv[0]); src = read_buffer; do { if (!remaining) { if (!pfx) bb_error_msg_and_die("suffixes exhausted"); xmove_fd(xopen(pfx, O_WRONLY | O_CREAT | O_TRUNC), 1); pfx = next_file(pfx, suffix_len); remaining = cnt; } if (opt & SPLIT_OPT_b) { /* split by bytes */ to_write = (bytes_read < remaining) ? bytes_read : remaining; remaining -= to_write; } else { /* split by lines */ /* can be sped up by using _memrchr_ * and writing many lines at once... */ char *end = memchr(src, '\n', bytes_read); if (end) { --remaining; to_write = end - src + 1; } else { to_write = bytes_read; } } xwrite(STDOUT_FILENO, src, to_write); bytes_read -= to_write; src += to_write; } while (bytes_read); } return EXIT_SUCCESS; }