diff options
Diffstat (limited to 'busybox/debianutils/pipe_progress.c')
-rw-r--r-- | busybox/debianutils/pipe_progress.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/busybox/debianutils/pipe_progress.c b/busybox/debianutils/pipe_progress.c new file mode 100644 index 000000000..ab05202eb --- /dev/null +++ b/busybox/debianutils/pipe_progress.c | |||
@@ -0,0 +1,55 @@ | |||
1 | /* | ||
2 | * Monitor a pipe with a simple progress display. | ||
3 | * | ||
4 | * Copyright (C) 2003 by Rob Landley <rob@landley.net>, Joey Hess | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | * General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | * | ||
20 | */ | ||
21 | |||
22 | #include <stdio.h> | ||
23 | #include <stdlib.h> | ||
24 | #include <unistd.h> | ||
25 | #include <time.h> | ||
26 | |||
27 | #include "busybox.h" | ||
28 | |||
29 | #define PIPE_PROGRESS_SIZE 4096 | ||
30 | |||
31 | /* Read a block of data from stdin, write it to stdout. | ||
32 | * Activity is indicated by a '.' to stderr | ||
33 | */ | ||
34 | extern int pipe_progress_main(int argc, char **argv) | ||
35 | { | ||
36 | RESERVE_CONFIG_BUFFER(buf, PIPE_PROGRESS_SIZE); | ||
37 | time_t t = time(NULL); | ||
38 | size_t len; | ||
39 | |||
40 | while ((len = fread(buf, 1, PIPE_PROGRESS_SIZE, stdin)) > 0) { | ||
41 | time_t new_time = time(NULL); | ||
42 | if (new_time != t) { | ||
43 | t = new_time; | ||
44 | fputc('.', stderr); | ||
45 | } | ||
46 | fwrite(buf, len, 1, stdout); | ||
47 | } | ||
48 | |||
49 | fputc('\n', stderr); | ||
50 | |||
51 | #ifdef CONFIG_FEATURE_CLEAN_UP | ||
52 | RELEASE_CONFIG_BUFFER(buf); | ||
53 | #endif | ||
54 | return 0; | ||
55 | } | ||