Put all terminal writes through the same pv_write_retry function for consistency and to clear up compiler warnings.

This commit is contained in:
Andrew Wood
2023-07-22 23:22:34 +01:00
parent 9783f7ebef
commit e94600d7a4
5 changed files with 35 additions and 29 deletions
+1
View File
@@ -9,6 +9,7 @@
* cleanup: skip test 10 (for *SIGPIPE*) if GNU "`head`" is not available, so "`make test`" on stock OpenBSD 7.3 works
* cleanup: replace all calls to `sprintf()` and `snprintf()` with a new wrapper function `pv_snprintf()` to centralise compatibility changes
* cleanup: tidy up and fix compilation warning in "`--watchfd`" code
* cleanup: replace all `write()` calls to the terminal with a wrapper `pv_write_retry()` for consistency
1.7.0 - 17 July 2023
* dropped: support for Red Hat Enterprise Linux and its derivatives has been dropped; removed the RPM spec file, and will no longer build binaries
+4 -1
View File
@@ -9,6 +9,7 @@
#ifndef _PV_INTERNAL_H
#define _PV_INTERNAL_H 1
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/time.h>
@@ -249,9 +250,11 @@ long pv_transfer(pvstate_t, int, int *, int *, unsigned long long, long *);
void pv_set_buffer_size(unsigned long long, int);
int pv_next_file(pvstate_t, int, int);
void pv_write_retry(int, const char *, size_t);
void pv_crs_fini(pvstate_t);
void pv_crs_init(pvstate_t);
void pv_crs_update(pvstate_t, char *);
void pv_crs_update(pvstate_t, const char *);
#ifdef HAVE_IPC
void pv_crs_needreinit(pvstate_t);
#endif
+9 -9
View File
@@ -45,7 +45,7 @@
* Write the given buffer to the given file descriptor, retrying until all
* bytes have been written or an error has occurred.
*/
static void write_retry(int fd, const char *buf, size_t count)
void pv_write_retry(int fd, const char *buf, size_t count)
{
while (count > 0) {
ssize_t nwritten;
@@ -251,7 +251,7 @@ static int pv_crs_get_ypos(int terminalfd)
debug("%s: %s", "tcsetattr (1) failed", strerror(errno));
}
write_retry(terminalfd, "\033[6n", 4);
pv_write_retry(terminalfd, "\033[6n", 4);
memset(cpr, 0, sizeof(cpr));
@@ -436,7 +436,7 @@ void pv_crs_init(pvstate_t state)
* initial ypos.
*/
if (state->crs_y_start > 0)
write_retry(STDERR_FILENO, "\n", 1);
pv_write_retry(STDERR_FILENO, "\n", 1);
pv_crs_unlock(state, fd);
if (state->crs_y_start < 1)
@@ -497,7 +497,7 @@ void pv_crs_reinit(pvstate_t state)
* Output a single-line update, moving the cursor to the correct position to
* do so.
*/
void pv_crs_update(pvstate_t state, char *str)
void pv_crs_update(pvstate_t state, const char *str)
{
char pos[32];
int y;
@@ -552,9 +552,9 @@ void pv_crs_update(pvstate_t state, char *str)
memset(pos, 0, sizeof(pos));
(void) pv_snprintf(pos, sizeof(pos), "\033[%u;1H",
state->height);
write_retry(STDERR_FILENO, pos, strlen(pos));
pv_write_retry(STDERR_FILENO, pos, strlen(pos));
for (; offs > 0; offs--) {
write_retry(STDERR_FILENO, "\n", 1);
pv_write_retry(STDERR_FILENO, "\n", 1);
}
pv_crs_unlock(state, STDERR_FILENO);
@@ -579,8 +579,8 @@ void pv_crs_update(pvstate_t state, char *str)
pv_crs_lock(state, STDERR_FILENO);
write_retry(STDERR_FILENO, pos, strlen(pos));
write_retry(STDERR_FILENO, str, strlen(str));
pv_write_retry(STDERR_FILENO, pos, strlen(pos));
pv_write_retry(STDERR_FILENO, str, strlen(str));
pv_crs_unlock(state, STDERR_FILENO);
}
@@ -617,7 +617,7 @@ void pv_crs_fini(pvstate_t state)
pv_crs_lock(state, STDERR_FILENO);
write_retry(STDERR_FILENO, pos, strlen(pos));
pv_write_retry(STDERR_FILENO, pos, strlen(pos));
#ifdef HAVE_IPC
pv_crs_ipccount(state);
+10 -8
View File
@@ -520,9 +520,10 @@ static void update_history_avg_rate(pvstate_t state, long long total_bytes,
* If "total_bytes" is negative, then free all allocated memory and return
* NULL.
*/
static char *pv__format(pvstate_t state,
long double elapsed_sec,
long long bytes_since_last, long long total_bytes)
static const char *pv__format(pvstate_t state,
long double elapsed_sec,
long long bytes_since_last,
long long total_bytes)
{
long double time_since_last, rate, average_rate;
long eta;
@@ -672,7 +673,7 @@ static char *pv__format(pvstate_t state,
}
} else {
(void) pv_snprintf(state->display_buffer,
sizeof(state->display_buffer),
state->display_buffer_size,
"%.99s%ld\n", numericprefix,
state->percentage);
}
@@ -1094,7 +1095,7 @@ static char *pv__format(pvstate_t state,
void pv_display(pvstate_t state, long double esec, long long sl,
long long tot)
{
char *display;
const char *display;
if (NULL == state)
return;
@@ -1115,7 +1116,7 @@ void pv_display(pvstate_t state, long double esec, long long sl,
return;
if (state->numeric) {
write(STDERR_FILENO, display, strlen(display));
pv_write_retry(STDERR_FILENO, display, strlen(display));
} else if (state->cursor) {
if (state->force || pv_in_foreground()) {
pv_crs_update(state, display);
@@ -1123,8 +1124,9 @@ void pv_display(pvstate_t state, long double esec, long long sl,
}
} else {
if (state->force || pv_in_foreground()) {
write(STDERR_FILENO, display, strlen(display));
write(STDERR_FILENO, "\r", 1);
pv_write_retry(STDERR_FILENO, display,
strlen(display));
pv_write_retry(STDERR_FILENO, "\r", 1);
state->display_visible = true;
}
}
+11 -11
View File
@@ -334,7 +334,7 @@ int pv_main_loop(pvstate_t state)
} else {
if ((!state->numeric) && (!state->no_op)
&& (state->display_visible))
write(STDERR_FILENO, "\n", 1);
pv_write_retry(STDERR_FILENO, "\n", 1);
}
if (state->pv_sig_abort)
@@ -494,7 +494,7 @@ int pv_watchfd_loop(pvstate_t state)
}
if (!state->numeric)
write(STDERR_FILENO, "\n", 1);
pv_write_retry(STDERR_FILENO, "\n", 1);
if (state->pv_sig_abort)
state->exit_status |= 32;
@@ -727,7 +727,7 @@ int pv_watchpid_loop(pvstate_t state)
if (displayed_lines > 0) {
debug("%s", "adding newline");
write(STDERR_FILENO, "\n", 1);
pv_write_retry(STDERR_FILENO, "\n", 1);
}
debug("%s %d [%d]: %Lf / %Ld / %Ld", "fd", fd, idx,
@@ -751,10 +751,10 @@ int pv_watchpid_loop(pvstate_t state)
while (blank_lines > 0) {
unsigned int x;
if (displayed_lines > 0)
write(STDERR_FILENO, "\n", 1);
pv_write_retry(STDERR_FILENO, "\n", 1);
for (x = 0; x < state->width; x++)
write(STDERR_FILENO, " ", 1);
write(STDERR_FILENO, "\r", 1);
pv_write_retry(STDERR_FILENO, " ", 1);
pv_write_retry(STDERR_FILENO, "\r", 1);
blank_lines--;
displayed_lines++;
}
@@ -762,7 +762,7 @@ int pv_watchpid_loop(pvstate_t state)
debug("%s: %d", "displayed lines", displayed_lines);
while (displayed_lines > 1) {
write(STDERR_FILENO, "\033[A", 3);
pv_write_retry(STDERR_FILENO, "\033[A", 3);
displayed_lines--;
}
}
@@ -774,14 +774,14 @@ int pv_watchpid_loop(pvstate_t state)
while (blank_lines > 0) {
unsigned int x;
for (x = 0; x < state->width; x++)
write(STDERR_FILENO, " ", 1);
write(STDERR_FILENO, "\r", 1);
pv_write_retry(STDERR_FILENO, " ", 1);
pv_write_retry(STDERR_FILENO, "\r", 1);
blank_lines--;
if (blank_lines > 0)
write(STDERR_FILENO, "\n", 1);
pv_write_retry(STDERR_FILENO, "\n", 1);
}
while (prev_displayed_lines > 1) {
write(STDERR_FILENO, "\033[A", 3);
pv_write_retry(STDERR_FILENO, "\033[A", 3);
prev_displayed_lines--;
}