busybox/debianutils/pipe_progress.c
<<
>>
Prefs
   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 (275 bytes)"
  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 */
  29int pipe_progress_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
  30int 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