Addressed more issues raised by splint.

This commit is contained in:
Andrew Wood
2023-09-05 23:36:01 +01:00
parent 8bc088d016
commit 2a8e6b36b3
3 changed files with 52 additions and 25 deletions
+1 -1
View File
@@ -24,7 +24,7 @@ if test "$USE_NLS" = "yes"; then
fi
AC_CHECK_FUNCS([getopt_long])
AC_CHECK_HEADERS([getopt.h])
AC_CHECK_FUNCS([memcpy basename vsnprintf strlcat])
AC_CHECK_FUNCS([memcpy basename vsnprintf strlcat strtoul])
AC_CHECK_FUNCS([fdatasync])
AC_CHECK_FUNCS([fpathconf sysconf posix_memalign posix_fadvise])
AC_SEARCH_LIBS([clock_gettime],[rt])
+3
View File
@@ -97,6 +97,9 @@
/* Define to 1 if you have the `strlcat' function. */
#undef HAVE_STRLCAT
/* Define to 1 if you have the `strtoul' function. */
#undef HAVE_STRTOUL
/* Define to 1 if you have the `sysconf' function. */
#undef HAVE_SYSCONF
+48 -24
View File
@@ -66,10 +66,10 @@ bool pv_in_foreground(void)
return true;
}
/*@-type@*/ /* __pid_t vs pid_t, not significant */
/*@-type@ *//* __pid_t vs pid_t, not significant */
our_process_group = getpgrp();
tty_process_group = tcgetpgrp(STDERR_FILENO);
/*@+type@*/
/*@+type@ */
if (tty_process_group == -1 && errno == ENOTTY) {
debug("%s: true: %s", "pv_in_foreground", "tty_process_group is -1, errno is ENOTTY");
@@ -145,8 +145,8 @@ static long pv__calc_eta(const long long so_far, const long long total, const lo
* Types of transfer count - bytes or lines.
*/
typedef enum {
PV_TRANSFERCOUNT_BYTES,
PV_TRANSFERCOUNT_LINES
PV_TRANSFERCOUNT_BYTES,
PV_TRANSFERCOUNT_LINES
} pv__transfercount_t;
/*
@@ -309,7 +309,7 @@ static void pv__si_prefix(long double *value, char *prefix, const long double ra
* The "format" string is in sprintf format and must contain exactly one %
* parameter (a %s) which will expand to the string described above.
*/
static void pv__sizestr(char *buffer, int bufsize, char *format,
static void pv__sizestr(char *buffer, size_t bufsize, char *format,
long double amount, char *suffix_basic, char *suffix_bytes, pv__transfercount_t count_type)
{
char sizestr_buffer[256];
@@ -413,16 +413,34 @@ static void pv__format_init(pvstate_t state)
* these segments together.
*/
segment = 0;
for (strpos = 0; formatstr[strpos] != 0 && segment < 99; strpos++, segment++) {
for (strpos = 0; formatstr[strpos] != '\0' && segment < 99; strpos++, segment++) {
if ('%' == formatstr[strpos]) {
unsigned int num;
unsigned long number_prefix;
#if HAVE_STRTOUL
char *number_end_ptr;
#endif
strpos++;
num = 0;
/*
* Check for a numeric prefix between the % and the
* format character - currently only used with "%A".
*/
#if HAVE_STRTOUL
number_end_ptr = NULL;
number_prefix = strtoul(&(formatstr[strpos]), &number_end_ptr, 10);
if ((NULL == number_end_ptr) || (number_end_ptr[0] == '\0'))
break;
if (number_end_ptr > &(formatstr[strpos]))
strpos += (number_end_ptr - &(formatstr[strpos]));
#else /* !HAVE_STRTOUL */
while (isdigit((int) (formatstr[strpos]))) {
num = num * 10;
num += formatstr[strpos] - '0';
number_prefix = number_prefix * 10;
number_prefix += formatstr[strpos] - '0';
strpos++;
}
#endif /* !HAVE_STRTOUL */
switch (formatstr[strpos]) {
case 'p':
state->format[segment].string = state->str_progress;
@@ -447,11 +465,11 @@ static void pv__format_init(pvstate_t state)
case 'A':
state->format[segment].string = state->str_lastoutput;
state->format[segment].length = 0;
if (num > PV_SIZEOF_LASTOUTPUT_BUFFER)
num = PV_SIZEOF_LASTOUTPUT_BUFFER;
if (num < 1)
num = 1;
state->lastoutput_length = num;
if (number_prefix > PV_SIZEOF_LASTOUTPUT_BUFFER)
number_prefix = PV_SIZEOF_LASTOUTPUT_BUFFER;
if (number_prefix < 1)
number_prefix = 1;
state->lastoutput_length = number_prefix;
state->components_used |= PV_DISPLAY_OUTPUTBUF;
break;
case 'r':
@@ -476,7 +494,7 @@ static void pv__format_init(pvstate_t state)
break;
case 'N':
state->format[segment].string = state->str_name;
state->format[segment].length = strlen(state->str_name);
state->format[segment].length = (int) strlen(state->str_name);
state->components_used |= PV_DISPLAY_NAME;
break;
case '%':
@@ -500,7 +518,7 @@ static void pv__format_init(pvstate_t state)
int foundlength;
searchptr = strchr(&(formatstr[strpos]), '%');
if (NULL == searchptr) {
foundlength = strlen(&(formatstr[strpos]));
foundlength = (int) strlen(&(formatstr[strpos]));
} else {
foundlength = searchptr - &(formatstr[strpos]);
}
@@ -562,7 +580,7 @@ static void update_history_avg_rate(pvstate_t state, long long total_bytes, long
} else {
long long bytes = (state->history[last].total_bytes - state->history[first].total_bytes);
long double sec = (state->history[last].elapsed_sec - state->history[first].elapsed_sec);
state->current_avg_rate = bytes / sec;
state->current_avg_rate = (long double) bytes / sec;
}
}
@@ -742,11 +760,13 @@ static const char *pv__format(pvstate_t state,
if ((state->components_used & PV_DISPLAY_BYTES) != 0) {
if (state->bits && !state->linemode) {
pv__sizestr(state->str_transferred,
PV_SIZEOF_STR_TRANSFERRED, "%s", (long double) total_bytes * 8, "", _("b"), PV_TRANSFERCOUNT_BYTES);
PV_SIZEOF_STR_TRANSFERRED, "%s", (long double) total_bytes * 8, "", _("b"),
PV_TRANSFERCOUNT_BYTES);
} else {
pv__sizestr(state->str_transferred,
PV_SIZEOF_STR_TRANSFERRED, "%s",
(long double) total_bytes, "", _("B"), state->linemode ? PV_TRANSFERCOUNT_LINES : PV_TRANSFERCOUNT_BYTES);
(long double) total_bytes, "", _("B"),
state->linemode ? PV_TRANSFERCOUNT_LINES : PV_TRANSFERCOUNT_BYTES);
}
}
@@ -797,10 +817,12 @@ static const char *pv__format(pvstate_t state,
/* Rate - set up the display string. */
if ((state->components_used & PV_DISPLAY_RATE) != 0) {
if (state->bits && !state->linemode) {
pv__sizestr(state->str_rate, PV_SIZEOF_STR_RATE, "[%s]", 8 * rate, "", _("b/s"), PV_TRANSFERCOUNT_BYTES);
pv__sizestr(state->str_rate, PV_SIZEOF_STR_RATE, "[%s]", 8 * rate, "", _("b/s"),
PV_TRANSFERCOUNT_BYTES);
} else {
pv__sizestr(state->str_rate,
PV_SIZEOF_STR_RATE, "[%s]", rate, _("/s"), _("B/s"), state->linemode ? PV_TRANSFERCOUNT_LINES : PV_TRANSFERCOUNT_BYTES);
PV_SIZEOF_STR_RATE, "[%s]", rate, _("/s"), _("B/s"),
state->linemode ? PV_TRANSFERCOUNT_LINES : PV_TRANSFERCOUNT_BYTES);
}
}
@@ -808,11 +830,13 @@ static const char *pv__format(pvstate_t state,
if ((state->components_used & PV_DISPLAY_AVERAGERATE) != 0) {
if (state->bits && !state->linemode) {
pv__sizestr(state->str_average_rate,
PV_SIZEOF_STR_AVERAGE_RATE, "[%s]", 8 * average_rate, "", _("b/s"), PV_TRANSFERCOUNT_BYTES);
PV_SIZEOF_STR_AVERAGE_RATE, "[%s]", 8 * average_rate, "", _("b/s"),
PV_TRANSFERCOUNT_BYTES);
} else {
pv__sizestr(state->str_average_rate,
PV_SIZEOF_STR_AVERAGE_RATE,
"[%s]", average_rate, _("/s"), _("B/s"), state->linemode ? PV_TRANSFERCOUNT_LINES : PV_TRANSFERCOUNT_BYTES);
"[%s]", average_rate, _("/s"), _("B/s"),
state->linemode ? PV_TRANSFERCOUNT_LINES : PV_TRANSFERCOUNT_BYTES);
}
}