blob: 75d26e20ffd40b3ddfacf820e63014629397c146 [file] [log] [blame]
Bernhard Reutner-Fischere15d7572006-06-02 20:56:16 +00001/* vi: set sw=4 ts=4: */
Glenn L McGrathe9080c92003-11-14 10:04:33 +00002/*
3 * Monitor a pipe with a simple progress display.
4 *
5 * Copyright (C) 2003 by Rob Landley <rob@landley.net>, Joey Hess
6 *
Bernhard Reutner-Fischere15d7572006-06-02 20:56:16 +00007 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
Glenn L McGrathe9080c92003-11-14 10:04:33 +00008 */
9
Bernhard Reutner-Fischere15d7572006-06-02 20:56:16 +000010#include "busybox.h"
Glenn L McGrathe9080c92003-11-14 10:04:33 +000011#include <stdio.h>
Glenn L McGrathd0550d82003-11-21 21:54:07 +000012#include <stdlib.h>
Glenn L McGrathe9080c92003-11-14 10:04:33 +000013#include <unistd.h>
14#include <time.h>
15
Glenn L McGrathe9080c92003-11-14 10:04:33 +000016#define PIPE_PROGRESS_SIZE 4096
17
Bernhard Reutner-Fischere15d7572006-06-02 20:56:16 +000018/* Read a block of data from stdin, write it to stdout.
19 * Activity is indicated by a '.' to stderr
Glenn L McGrathe9080c92003-11-14 10:04:33 +000020 */
Rob Landleydfba7412006-03-06 20:47:33 +000021int pipe_progress_main(int argc, char **argv)
Glenn L McGrathe9080c92003-11-14 10:04:33 +000022{
23 RESERVE_CONFIG_BUFFER(buf, PIPE_PROGRESS_SIZE);
24 time_t t = time(NULL);
25 size_t len;
26
27 while ((len = fread(buf, 1, PIPE_PROGRESS_SIZE, stdin)) > 0) {
28 time_t new_time = time(NULL);
29 if (new_time != t) {
30 t = new_time;
31 fputc('.', stderr);
32 }
33 fwrite(buf, len, 1, stdout);
34 }
35
36 fputc('\n', stderr);
37
Bernhard Reutner-Fischere15d7572006-06-02 20:56:16 +000038 if (ENABLE_FEATURE_CLEAN_UP)
39 RELEASE_CONFIG_BUFFER(buf);
40
Glenn L McGrathe9080c92003-11-14 10:04:33 +000041 return 0;
42}