- (djm) OpenBSD CVS Sync
- jaredy@cvs.openbsd.org 2005/06/07 13:25:23 [progressmeter.c] catch SIGWINCH and resize progress meter accordingly; ok markus dtucker
This commit is contained in:
parent
488d602618
commit
05656967b1
|
@ -1,3 +1,10 @@
|
||||||
|
20050616
|
||||||
|
- (djm) OpenBSD CVS Sync
|
||||||
|
- jaredy@cvs.openbsd.org 2005/06/07 13:25:23
|
||||||
|
[progressmeter.c]
|
||||||
|
catch SIGWINCH and resize progress meter accordingly; ok markus dtucker
|
||||||
|
|
||||||
|
|
||||||
20050609
|
20050609
|
||||||
- (dtucker) [cipher.c openbsd-compat/Makefile.in
|
- (dtucker) [cipher.c openbsd-compat/Makefile.in
|
||||||
openbsd-compat/openbsd-compat.h openbsd-compat/openssl-compat.{c,h}]
|
openbsd-compat/openbsd-compat.h openbsd-compat/openssl-compat.{c,h}]
|
||||||
|
@ -2692,4 +2699,4 @@
|
||||||
- (djm) Trim deprecated options from INSTALL. Mention UsePAM
|
- (djm) Trim deprecated options from INSTALL. Mention UsePAM
|
||||||
- (djm) Fix quote handling in sftp; Patch from admorten AT umich.edu
|
- (djm) Fix quote handling in sftp; Patch from admorten AT umich.edu
|
||||||
|
|
||||||
$Id: ChangeLog,v 1.3815 2005/06/09 13:40:39 dtucker Exp $
|
$Id: ChangeLog,v 1.3816 2005/06/16 03:18:04 djm Exp $
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
RCSID("$OpenBSD: progressmeter.c,v 1.23 2005/04/28 10:17:56 moritz Exp $");
|
RCSID("$OpenBSD: progressmeter.c,v 1.24 2005/06/07 13:25:23 jaredy Exp $");
|
||||||
|
|
||||||
#include "progressmeter.h"
|
#include "progressmeter.h"
|
||||||
#include "atomicio.h"
|
#include "atomicio.h"
|
||||||
|
@ -42,6 +42,10 @@ static int can_output(void);
|
||||||
static void format_size(char *, int, off_t);
|
static void format_size(char *, int, off_t);
|
||||||
static void format_rate(char *, int, off_t);
|
static void format_rate(char *, int, off_t);
|
||||||
|
|
||||||
|
/* window resizing */
|
||||||
|
static void sig_winch(int);
|
||||||
|
static void setscreensize(void);
|
||||||
|
|
||||||
/* updates the progressmeter to reflect the current state of the transfer */
|
/* updates the progressmeter to reflect the current state of the transfer */
|
||||||
void refresh_progress_meter(void);
|
void refresh_progress_meter(void);
|
||||||
|
|
||||||
|
@ -57,6 +61,7 @@ static volatile off_t *counter; /* progress counter */
|
||||||
static long stalled; /* how long we have been stalled */
|
static long stalled; /* how long we have been stalled */
|
||||||
static int bytes_per_second; /* current speed in bytes per second */
|
static int bytes_per_second; /* current speed in bytes per second */
|
||||||
static int win_size; /* terminal window size */
|
static int win_size; /* terminal window size */
|
||||||
|
static volatile sig_atomic_t win_resized; /* for window resizing */
|
||||||
|
|
||||||
/* units for format_size */
|
/* units for format_size */
|
||||||
static const char unit[] = " KMGT";
|
static const char unit[] = " KMGT";
|
||||||
|
@ -217,6 +222,10 @@ update_progress_meter(int ignore)
|
||||||
|
|
||||||
save_errno = errno;
|
save_errno = errno;
|
||||||
|
|
||||||
|
if (win_resized) {
|
||||||
|
setscreensize();
|
||||||
|
win_resized = 0;
|
||||||
|
}
|
||||||
if (can_output())
|
if (can_output())
|
||||||
refresh_progress_meter();
|
refresh_progress_meter();
|
||||||
|
|
||||||
|
@ -228,8 +237,6 @@ update_progress_meter(int ignore)
|
||||||
void
|
void
|
||||||
start_progress_meter(char *f, off_t filesize, off_t *ctr)
|
start_progress_meter(char *f, off_t filesize, off_t *ctr)
|
||||||
{
|
{
|
||||||
struct winsize winsize;
|
|
||||||
|
|
||||||
start = last_update = time(NULL);
|
start = last_update = time(NULL);
|
||||||
file = f;
|
file = f;
|
||||||
end_pos = filesize;
|
end_pos = filesize;
|
||||||
|
@ -238,20 +245,12 @@ start_progress_meter(char *f, off_t filesize, off_t *ctr)
|
||||||
stalled = 0;
|
stalled = 0;
|
||||||
bytes_per_second = 0;
|
bytes_per_second = 0;
|
||||||
|
|
||||||
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &winsize) != -1 &&
|
setscreensize();
|
||||||
winsize.ws_col != 0) {
|
|
||||||
if (winsize.ws_col > MAX_WINSIZE)
|
|
||||||
win_size = MAX_WINSIZE;
|
|
||||||
else
|
|
||||||
win_size = winsize.ws_col;
|
|
||||||
} else
|
|
||||||
win_size = DEFAULT_WINSIZE;
|
|
||||||
win_size += 1; /* trailing \0 */
|
|
||||||
|
|
||||||
if (can_output())
|
if (can_output())
|
||||||
refresh_progress_meter();
|
refresh_progress_meter();
|
||||||
|
|
||||||
signal(SIGALRM, update_progress_meter);
|
signal(SIGALRM, update_progress_meter);
|
||||||
|
signal(SIGWINCH, sig_winch);
|
||||||
alarm(UPDATE_INTERVAL);
|
alarm(UPDATE_INTERVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,3 +268,25 @@ stop_progress_meter(void)
|
||||||
|
|
||||||
atomicio(vwrite, STDOUT_FILENO, "\n", 1);
|
atomicio(vwrite, STDOUT_FILENO, "\n", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sig_winch(int sig)
|
||||||
|
{
|
||||||
|
win_resized = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
setscreensize(void)
|
||||||
|
{
|
||||||
|
struct winsize winsize;
|
||||||
|
|
||||||
|
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &winsize) != -1 &&
|
||||||
|
winsize.ws_col != 0) {
|
||||||
|
if (winsize.ws_col > MAX_WINSIZE)
|
||||||
|
win_size = MAX_WINSIZE;
|
||||||
|
else
|
||||||
|
win_size = winsize.ws_col;
|
||||||
|
} else
|
||||||
|
win_size = DEFAULT_WINSIZE;
|
||||||
|
win_size += 1; /* trailing \0 */
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue