blob: 21d330b59453f1fef9c78fa1601b07cc7a839f45
1 | /* vi: set sw=4 ts=4: */ |
2 | /* |
3 | * Monitor a pipe with a simple progress display. |
4 | * |
5 | * Copyright (C) 2003 by Rob Landley <rob@landley.net>, Joey Hess |
6 | * |
7 | * Licensed under GPLv2 or later, see file LICENSE in this source tree. |
8 | */ |
9 | //config:config PIPE_PROGRESS |
10 | //config: bool "pipe_progress" |
11 | //config: default y |
12 | //config: help |
13 | //config: Display a dot to indicate pipe activity. |
14 | |
15 | //applet:IF_PIPE_PROGRESS(APPLET(pipe_progress, BB_DIR_BIN, BB_SUID_DROP)) |
16 | |
17 | //kbuild:lib-$(CONFIG_PIPE_PROGRESS) += pipe_progress.o |
18 | |
19 | //usage:#define pipe_progress_trivial_usage NOUSAGE_STR |
20 | //usage:#define pipe_progress_full_usage "" |
21 | |
22 | #include "libbb.h" |
23 | |
24 | #define PIPE_PROGRESS_SIZE 4096 |
25 | |
26 | /* Read a block of data from stdin, write it to stdout. |
27 | * Activity is indicated by a '.' to stderr |
28 | */ |
29 | int pipe_progress_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
30 | int pipe_progress_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) |
31 | { |
32 | char buf[PIPE_PROGRESS_SIZE]; |
33 | time_t t = time(NULL); |
34 | int len; |
35 | |
36 | while ((len = safe_read(STDIN_FILENO, buf, PIPE_PROGRESS_SIZE)) > 0) { |
37 | time_t new_time = time(NULL); |
38 | if (new_time != t) { |
39 | t = new_time; |
40 | bb_putchar_stderr('.'); |
41 | } |
42 | full_write(STDOUT_FILENO, buf, len); |
43 | } |
44 | |
45 | bb_putchar_stderr('\n'); |
46 | |
47 | return 0; |
48 | } |
49 |