diff --git a/src/include/pv-internal.h b/src/include/pv-internal.h index df51834..7955144 100644 --- a/src/include/pv-internal.h +++ b/src/include/pv-internal.h @@ -142,7 +142,6 @@ struct pvstate_s { * Program status * ******************/ struct pvprogramstatus_s { - /*@only@*/ char *program_name; /* program name for error reporting */ char cwd[PV_SIZEOF_CWD]; /* current working directory for relative path */ int current_input_file; /* index of current file being read */ int exit_status; /* exit status to give (0=OK) */ @@ -505,7 +504,7 @@ struct pvwatchfd_s { }; typedef struct pvwatchfd_s *pvwatchfd_t; -void pv_error(pvstate_t, char *, ...); +void pv_error(char *, ...); int pv_main_loop(pvstate_t); void pv_calculate_transfer_rate(pvtransfercalc_t, readonly_pvtransferstate_t, readonly_pvcontrol_t, readonly_pvdisplay_t, bool); diff --git a/src/include/pv.h b/src/include/pv.h index 9d9c429..55aeb9a 100644 --- a/src/include/pv.h +++ b/src/include/pv.h @@ -175,10 +175,15 @@ void pv_nanosleep(long long); * Main PV functions. */ +/* + * Set the prefix (program name) for any PV error messages. + */ +extern void pv_set_error_prefix(/*@unique@ */ const char *); + /* * Create a new state structure, and return it, or 0 (NULL) on error. */ -extern /*@null@*/ /*@only@*/ pvstate_t pv_state_alloc(const char *); +extern /*@null@*/ /*@only@*/ pvstate_t pv_state_alloc(void); /* * Clear the calculated parts of a state structure. diff --git a/src/main/main.c b/src/main/main.c index 9077b61..4184440 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -314,10 +314,13 @@ int main(int argc, char **argv) return 0; } + /* Set the error message prefix. */ + pv_set_error_prefix(opts->program_name); + /* * Allocate our internal state buffer. */ - state = pv_state_alloc(opts->program_name); + state = pv_state_alloc(); if (NULL == state) { /*@-mustfreefresh@ */ /* diff --git a/src/main/remote.c b/src/main/remote.c index fdfd56f..4bcd15f 100644 --- a/src/main/remote.c +++ b/src/main/remote.c @@ -22,7 +22,7 @@ #include #ifdef PV_REMOTE_CONTROL -void pv_error(pvstate_t, char *, ...); +void pv_error(char *, ...); struct remote_msg { bool progress; /* progress bar flag */ @@ -161,7 +161,7 @@ int pv_remote_set(opts_t opts, pvstate_t state) * Check that the remote process exists. */ if (kill((pid_t) (opts->remote), 0) != 0) { - pv_error(state, "%u: %s", opts->remote, strerror(errno)); + pv_error("%u: %s", opts->remote, strerror(errno)); return PV_ERROREXIT_REMOTE_OR_PID; } @@ -225,7 +225,7 @@ int pv_remote_set(opts_t opts, pvstate_t state) memset(control_filename, 0, sizeof(control_filename)); control_fptr = pv__control_file(control_filename, sizeof(control_filename), (pid_t) getpid(), true); if (NULL == control_fptr) { - pv_error(state, "%s", strerror(errno)); + pv_error("%s", strerror(errno)); return PV_ERROREXIT_REMOTE_OR_PID; } @@ -234,14 +234,14 @@ int pv_remote_set(opts_t opts, pvstate_t state) * it. */ if (1 != fwrite(&msgbuf, sizeof(msgbuf), 1, control_fptr)) { - pv_error(state, "%s", strerror(errno)); + pv_error("%s", strerror(errno)); (void) fclose(control_fptr); (void) remove(control_filename); return PV_ERROREXIT_REMOTE_OR_PID; } if (0 != fclose(control_fptr)) { - pv_error(state, "%s", strerror(errno)); + pv_error("%s", strerror(errno)); (void) remove(control_filename); return PV_ERROREXIT_REMOTE_OR_PID; } @@ -253,7 +253,7 @@ int pv_remote_set(opts_t opts, pvstate_t state) signal_sender = 0; (void) pv_sigusr2_received(state, &signal_sender); if (kill((pid_t) (opts->remote), SIGUSR2) != 0) { - pv_error(state, "%u: %s", opts->remote, strerror(errno)); + pv_error("%u: %s", opts->remote, strerror(errno)); (void) remove(control_filename); return PV_ERROREXIT_REMOTE_OR_PID; } @@ -291,7 +291,7 @@ int pv_remote_set(opts_t opts, pvstate_t state) * Remove the remote control file. */ if (0 != remove(control_filename)) { - pv_error(state, "%s", strerror(errno)); + pv_error("%s", strerror(errno)); } /* @@ -306,7 +306,7 @@ int pv_remote_set(opts_t opts, pvstate_t state) * warnings, but in this case it's unavoidable, and mitigated by the * fact we only translate each string once. */ - pv_error(state, "%u: %s", opts->remote, _("message not received")); + pv_error("%u: %s", opts->remote, _("message not received")); return PV_ERROREXIT_REMOTE_OR_PID; /*@+mustfreefresh @ */ } @@ -338,7 +338,7 @@ void pv_remote_check(pvstate_t state) memset(control_filename, 0, sizeof(control_filename)); control_fptr = pv__control_file(control_filename, sizeof(control_filename), signal_sender, false); if (NULL == control_fptr) { - pv_error(state, "%s: %s", control_filename, strerror(errno)); + pv_error("%s: %s", control_filename, strerror(errno)); return; } @@ -347,13 +347,13 @@ void pv_remote_check(pvstate_t state) * it. */ if (1 != fread(&msgbuf, sizeof(msgbuf), 1, control_fptr)) { - pv_error(state, "%s", strerror(errno)); + pv_error("%s", strerror(errno)); (void) fclose(control_fptr); return; } if (0 != fclose(control_fptr)) { - pv_error(state, "%s", strerror(errno)); + pv_error("%s", strerror(errno)); return; } diff --git a/src/pv/cursor.c b/src/pv/cursor.c index 8f47f9a..77c4e5f 100644 --- a/src/pv/cursor.c +++ b/src/pv/cursor.c @@ -58,7 +58,7 @@ static void pv_crs_open_lockfile(pvstate_t state, int fd) ttydev = ttyname(fd); if (!ttydev) { if (!state->control.force) { - pv_error(state, "%s: %s", _("failed to get terminal name"), strerror(errno)); + pv_error("%s: %s", _("failed to get terminal name"), strerror(errno)); } /* * If we don't know our terminal name, we can neither do IPC @@ -103,7 +103,7 @@ static void pv_crs_open_lockfile(pvstate_t state, int fd) */ if (state->cursor.lock_fd < 0) { - pv_error(state, "%s: %s: %s", state->cursor.lock_file, _("failed to open lock file"), strerror(errno)); + pv_error("%s: %s: %s", state->cursor.lock_file, _("failed to open lock file"), strerror(errno)); state->control.cursor = 0; return; } @@ -136,7 +136,7 @@ static void pv_crs_lock(pvstate_t state, int fd) lock_fd = state->cursor.lock_fd; } } else { - pv_error(state, "%s: %s", _("lock attempt failed"), strerror(errno)); + pv_error("%s: %s", _("lock attempt failed"), strerror(errno)); return; } } @@ -397,7 +397,7 @@ void pv_crs_init(pvstate_t state) */ if (terminalfd < 0) { - pv_error(state, "%s: %s: %s", _("failed to open terminal"), ttyfile, strerror(errno)); + pv_error("%s: %s: %s", _("failed to open terminal"), ttyfile, strerror(errno)); state->control.cursor = false; return; } diff --git a/src/pv/display.c b/src/pv/display.c index 985bb69..453ea54 100644 --- a/src/pv/display.c +++ b/src/pv/display.c @@ -49,17 +49,53 @@ #include #endif +/* + * The error prefix for messages (the program name); whether it has been + * set; and whether any output has been displayed yet, indicating whether + * any errors must be preceded by a newline. + */ +static char pv__error_prefix[64]; /* flawfinder: ignore */ +static bool pv__error_prefix_set = false; +static bool pv__output_produced = false; + +/* + * flawfinder rationale: zeroed before use, string copy is bounded to 1 less + * than size so it always has \0 termination. Not used unless initialised, + * by checking pv__error_prefix_set. + */ + +/* + * Set the error message prefix. + */ +void pv_set_error_prefix( /*@unique@ */ const char *prefix) +{ + if (NULL == prefix) + return; + memset(pv__error_prefix, 0, sizeof(pv__error_prefix)); + strncpy(pv__error_prefix, prefix, sizeof(pv__error_prefix) - 1); /* flawfinder: ignore */ + pv__error_prefix_set = true; + /* + * flawfinder rationale: strncpy's pointers are as valid as we can + * make them since the first is a static buffer and the second is + * caller-supplied. The caller must \0-terminate the string but in + * any case it is bounded to 1 less than the size of the + * destination. The destination is zeroed before use so the result + * is guaranteed to be \0-terminated. + */ +} + /* * Output an error message. If we've displayed anything to the terminal * already, then put a newline before our error so we don't write over what * we've written. */ -void pv_error(pvstate_t state, char *format, ...) +void pv_error(char *format, ...) { va_list ap; - if (state->display.output_produced) + if (pv__output_produced) fprintf(stderr, "\n"); - fprintf(stderr, "%s: ", state->status.program_name); + if (pv__error_prefix_set) + fprintf(stderr, "%s: ", pv__error_prefix); va_start(ap, format); (void) vfprintf(stderr, format, ap); /* flawfinder: ignore */ va_end(ap); @@ -1005,7 +1041,7 @@ bool pv_format(pvstate_t state, pvcontrol_t control, readonly_pvtransferstate_t new_buffer = malloc(new_size + 16); if (NULL == new_buffer) { - pv_error(state, "%s: %s", _("buffer allocation failed"), strerror(errno)); + pv_error("%s: %s", _("buffer allocation failed"), strerror(errno)); state->status.exit_status |= PV_ERROREXIT_MEMORY; display->display_buffer = NULL; return false; @@ -1253,6 +1289,7 @@ void pv_display(pvstate_t state, bool final) if (state->control.force || pv_in_foreground()) { pv_crs_update(state, state->display.display_buffer); state->display.output_produced = true; + pv__output_produced = true; } } else { if (state->control.force || pv_in_foreground()) { @@ -1260,6 +1297,7 @@ void pv_display(pvstate_t state, bool final) state->display.display_string_bytes); pv_tty_write(&(state->flags), "\r", 1); state->display.output_produced = true; + pv__output_produced = true; } } diff --git a/src/pv/file.c b/src/pv/file.c index 5f75295..d71c903 100644 --- a/src/pv/file.c +++ b/src/pv/file.c @@ -144,7 +144,7 @@ static off_t pv_calc_total_bytes(pvstate_t state) total = end_position; } if (lseek(state->control.output_fd, 0, SEEK_SET) != 0) { - pv_error(state, "%s: %s: %s", + pv_error("%s: %s: %s", NULL == state->control.output_name ? "(null)" : state->control.output_name, _("failed to seek to start of output"), strerror(errno)); state->status.exit_status |= PV_ERROREXIT_ACCESS; @@ -228,7 +228,7 @@ static off_t pv_calc_total_lines(pvstate_t state) * OK. */ if (numread < 0) { - pv_error(state, "%s: %s", state->files.filename[file_idx], strerror(errno)); + pv_error("%s: %s", state->files.filename[file_idx], strerror(errno)); state->status.exit_status |= PV_ERROREXIT_ACCESS; break; } else if (0 == numread) { @@ -246,7 +246,7 @@ static off_t pv_calc_total_lines(pvstate_t state) } if (0 != lseek(fd, 0, SEEK_SET)) { - pv_error(state, "%s: %s", state->files.filename[file_idx], strerror(errno)); + pv_error("%s: %s", state->files.filename[file_idx], strerror(errno)); state->status.exit_status |= PV_ERROREXIT_ACCESS; } @@ -291,7 +291,7 @@ int pv_next_file(pvstate_t state, unsigned int filenum, int oldfd) if (oldfd >= 0) { if (0 != close(oldfd)) { - pv_error(state, "%s: %s", _("failed to close file"), strerror(errno)); + pv_error("%s: %s", _("failed to close file"), strerror(errno)); state->status.exit_status |= PV_ERROREXIT_TRANSITION; return -1; } @@ -313,7 +313,7 @@ int pv_next_file(pvstate_t state, unsigned int filenum, int oldfd) * to open symlinks etc as that would be counterintuitive. */ if (fd < 0) { - pv_error(state, "%s: %s: %s", + pv_error("%s: %s: %s", _("failed to read file"), state->files.filename[filenum], strerror(errno)); state->status.exit_status |= PV_ERROREXIT_ACCESS; return -1; @@ -321,7 +321,7 @@ int pv_next_file(pvstate_t state, unsigned int filenum, int oldfd) } if (0 != fstat(fd, &isb)) { - pv_error(state, "%s: %s: %s", _("failed to stat file"), + pv_error("%s: %s: %s", _("failed to stat file"), NULL == state->files.filename ? "-" : state->files.filename[filenum], strerror(errno)); (void) close(fd); state->status.exit_status |= PV_ERROREXIT_ACCESS; @@ -329,7 +329,7 @@ int pv_next_file(pvstate_t state, unsigned int filenum, int oldfd) } if (0 != fstat(state->control.output_fd, &osb)) { - pv_error(state, "%s: %s", _("failed to stat output file"), strerror(errno)); + pv_error("%s: %s", _("failed to stat output file"), strerror(errno)); (void) close(fd); state->status.exit_status |= PV_ERROREXIT_ACCESS; return -1; @@ -351,7 +351,7 @@ int pv_next_file(pvstate_t state, unsigned int filenum, int oldfd) input_file_is_output = false; if (input_file_is_output) { - pv_error(state, "%s: %s", _("input file is output file"), + pv_error("%s: %s", _("input file is output file"), NULL == state->files.filename ? "-" : state->files.filename[filenum]); (void) close(fd); state->status.exit_status |= PV_ERROREXIT_OUROBOROS; diff --git a/src/pv/loop.c b/src/pv/loop.c index 675eeca..08fde7a 100644 --- a/src/pv/loop.c +++ b/src/pv/loop.c @@ -781,7 +781,7 @@ int pv_watchpid_loop(pvstate_t state) * it's not there at the start. */ if (kill(state->control.watch_pid, 0) != 0) { - pv_error(state, "%s %u: %s", _("pid"), state->control.watch_pid, strerror(errno)); + pv_error("%s %u: %s", _("pid"), state->control.watch_pid, strerror(errno)); state->status.exit_status |= PV_ERROREXIT_ACCESS; return PV_ERROREXIT_ACCESS; } @@ -832,7 +832,7 @@ int pv_watchpid_loop(pvstate_t state) if (kill(state->control.watch_pid, 0) != 0) { if (first_pass) { - pv_error(state, "%s %u: %s", _("pid"), state->control.watch_pid, strerror(errno)); + pv_error("%s %u: %s", _("pid"), state->control.watch_pid, strerror(errno)); state->status.exit_status |= PV_ERROREXIT_ACCESS; if (NULL != info_array) free(info_array); @@ -885,7 +885,7 @@ int pv_watchpid_loop(pvstate_t state) rc = pv_watchpid_scanfds(state, state->control.watch_pid, &array_length, &info_array, fd_to_idx); if (rc != 0) { if (first_pass) { - pv_error(state, "%s %u: %s", _("pid"), state->control.watch_pid, strerror(errno)); + pv_error("%s %u: %s", _("pid"), state->control.watch_pid, strerror(errno)); state->status.exit_status |= PV_ERROREXIT_ACCESS; if (NULL != info_array) free(info_array); diff --git a/src/pv/state.c b/src/pv/state.c index e84995e..48e267a 100644 --- a/src/pv/state.c +++ b/src/pv/state.c @@ -36,8 +36,7 @@ static void pv_alloc_history(pvstate_t state) * leak warnings, but in this case it's unavoidable, and * mitigated by the fact we only translate each string once. */ - fprintf(stderr, "%s: %s: %s\n", state->status.program_name, - _("history structure allocation failed"), strerror(errno)); + pv_error("%s: %s", _("history structure allocation failed"), strerror(errno)); /*@+mustfreefresh@ */ return; } @@ -108,7 +107,7 @@ void pv_state_reset(pvstate_t state) /* * Create a new state structure, and return it, or 0 (NULL) on error. */ -pvstate_t pv_state_alloc(const char *program_name) +pvstate_t pv_state_alloc(void) { pvstate_t state; @@ -117,17 +116,6 @@ pvstate_t pv_state_alloc(const char *program_name) return NULL; memset(state, 0, sizeof(*state)); - /* splint 3.1.2 thinks this is required for some reason. */ - if (NULL != state->status.program_name) { - free(state->status.program_name); - } - - state->status.program_name = pv_strdup(program_name); - if (NULL == state->status.program_name) { - free(state); - return NULL; - } - state->control.watch_pid = 0; state->control.watch_fd = -1; state->control.output_fd = -1; @@ -172,9 +160,9 @@ void pv_state_free(pvstate_t state) if (state->control.output_fd >= 0) { if (STDOUT_FILENO != state->control.output_fd) { if (close(state->control.output_fd) < 0) { - fprintf(stderr, "%s: %s: %s\n", state->status.program_name, - NULL == state->control.output_name ? "(null)" : state->control.output_name, - strerror(errno)); + pv_error("%s: %s", + NULL == state->control.output_name ? "(null)" : state->control.output_name, + strerror(errno)); } } state->control.output_fd = -1; @@ -185,10 +173,6 @@ void pv_state_free(pvstate_t state) state->control.output_name = NULL; } - if (NULL != state->status.program_name) - free(state->status.program_name); - state->status.program_name = NULL; - if (NULL != state->display.display_buffer) free(state->display.display_buffer); state->display.display_buffer = NULL; @@ -549,9 +533,9 @@ void pv_state_output_set(pvstate_t state, int fd, const char *name) */ if (state->control.output_fd >= 0 && state->control.output_fd != STDOUT_FILENO) { if (close(state->control.output_fd) < 0) { - fprintf(stderr, "%s: %s: %s\n", state->status.program_name, - NULL == state->control.output_name ? "(null)" : state->control.output_name, - strerror(errno)); + pv_error("%s: %s", + NULL == state->control.output_name ? "(null)" : state->control.output_name, + strerror(errno)); } } if (NULL != state->control.output_name) @@ -614,8 +598,7 @@ void pv_state_inputfiles(pvstate_t state, unsigned int input_file_count, const c state->files.filename = calloc((size_t) (input_file_count + 1), sizeof(char *)); if (NULL == state->files.filename) { /*@-mustfreefresh@ *//* see similar _() issue above */ - fprintf(stderr, "%s: %s: %s\n", state->status.program_name, _("file list allocation failed"), - strerror(errno)); + pv_error("%s: %s", _("file list allocation failed"), strerror(errno)); /*@+mustfreefresh@ */ return; } @@ -624,8 +607,7 @@ void pv_state_inputfiles(pvstate_t state, unsigned int input_file_count, const c state->files.filename[file_idx] = pv_strdup(input_files[file_idx]); if (NULL == state->files.filename[file_idx]) { /*@-mustfreefresh@ *//* see similar _() issue above */ - fprintf(stderr, "%s: %s: %s\n", state->status.program_name, - _("file list allocation failed"), strerror(errno)); + pv_error("%s: %s", _("file list allocation failed"), strerror(errno)); /*@+mustfreefresh@ */ return; } diff --git a/src/pv/transfer.c b/src/pv/transfer.c index 24de0af..1da1f94 100644 --- a/src/pv/transfer.c +++ b/src/pv/transfer.c @@ -460,7 +460,7 @@ static int pv__transfer_read(pvstate_t state, int fd, bool *eof_in, bool *eof_ou * reached the end of this file. */ if (do_not_skip_errors) { - pv_error(state, "%s: %s: %s", pv_current_file_name(state), _("read failed"), strerror(errno)); + pv_error("%s: %s: %s", pv_current_file_name(state), _("read failed"), strerror(errno)); *eof_in = true; if (state->transfer.write_position >= state->transfer.read_position) { *eof_out = true; @@ -476,7 +476,7 @@ static int pv__transfer_read(pvstate_t state, int fd, bool *eof_in, bool *eof_ou if (!state->transfer.read_error_warning_shown) { /*@-compdef@ */ - pv_error(state, "%s: %s: %s", pv_current_file_name(state), _("warning: read errors detected"), + pv_error("%s: %s: %s", pv_current_file_name(state), _("warning: read errors detected"), strerror(errno)); /*@+compdef@ */ /* splint - see previous pv_current_file_name() call. */ @@ -492,7 +492,7 @@ static int pv__transfer_read(pvstate_t state, int fd, bool *eof_in, bool *eof_ou */ if (0 > orig_offset) { /*@-compdef@ */ - pv_error(state, "%s: %s: %s", pv_current_file_name(state), _("file is not seekable"), strerror(errno)); + pv_error("%s: %s: %s", pv_current_file_name(state), _("file is not seekable"), strerror(errno)); /*@+compdef@ */ /* splint - see previous pv_current_file_name() calls. */ *eof_in = true; @@ -569,8 +569,7 @@ static int pv__transfer_read(pvstate_t state, int fd, bool *eof_in, bool *eof_ou */ if (EINVAL != errno) { /*@-compdef@ */ - pv_error(state, - "%s: %s: %s", pv_current_file_name(state), _("failed to seek past error"), + pv_error("%s: %s: %s", pv_current_file_name(state), _("failed to seek past error"), strerror(errno)); /*@+compdef@ */ /* splint - see previous pv_current_file_name() calls. */ @@ -588,7 +587,7 @@ static int pv__transfer_read(pvstate_t state, int fd, bool *eof_in, bool *eof_ou state->transfer.read_position += amount_skipped; if (state->control.skip_errors < 2) { /*@-compdef@ */ - pv_error(state, "%s: %s: %ld - %ld (%ld %s)", + pv_error("%s: %s: %ld - %ld (%ld %s)", pv_current_file_name(state), _("skipped past read error"), (long) orig_offset, (long) skip_offset, (long) amount_skipped, _("B")); @@ -631,7 +630,7 @@ static int pv__transfer_write(pvstate_t state, bool *eof_in, bool *eof_out, long int write_errno; if (NULL == state->transfer.transfer_buffer) { - pv_error(state, "%s", _("no transfer buffer allocated")); + pv_error("%s", _("no transfer buffer allocated")); state->status.exit_status |= PV_ERROREXIT_MEMORY; *eof_out = true; state->transfer.written = -1; @@ -673,7 +672,7 @@ static int pv__transfer_write(pvstate_t state, bool *eof_in, bool *eof_out, long (long) (new_timer.it_value.tv_usec)); if (0 != setitimer(ITIMER_REAL, &new_timer, NULL)) { - pv_error(state, "%s: %s", _("failed to set interval timer"), strerror(errno)); + pv_error("%s: %s", _("failed to set interval timer"), strerror(errno)); } #else /* ! HAVE_SETITIMER */ @@ -699,7 +698,7 @@ static int pv__transfer_write(pvstate_t state, bool *eof_in, bool *eof_out, long new_timer.it_value.tv_sec = 0; new_timer.it_value.tv_usec = 0; if (0 != setitimer(ITIMER_REAL, &new_timer, NULL)) { - pv_error(state, "%s: %s", _("failed to clear interval timer"), strerror(errno)); + pv_error("%s: %s", _("failed to clear interval timer"), strerror(errno)); } /*@+unrecog@ */ @@ -741,7 +740,7 @@ static int pv__transfer_write(pvstate_t state, bool *eof_in, bool *eof_out, long state->transfer.line_positions = calloc((size_t) (state->transfer.line_positions_capacity), sizeof(off_t)); if (NULL == state->transfer.line_positions) { - pv_error(state, "%s: %s", _("line position buffer allocation failed"), + pv_error("%s: %s", _("line position buffer allocation failed"), strerror(errno)); } /*@+mustfreeonly@ */ @@ -915,7 +914,7 @@ static int pv__transfer_write(pvstate_t state, bool *eof_in, bool *eof_out, long return 0; } - pv_error(state, "%s: %s", _("write failed"), strerror(write_errno)); + pv_error("%s: %s", _("write failed"), strerror(write_errno)); state->status.exit_status |= PV_ERROREXIT_TRANSFER; *eof_out = true; state->transfer.written = -1; @@ -1054,7 +1053,7 @@ ssize_t pv_transfer(pvstate_t state, int fd, bool *eof_in, bool *eof_out, off_t state->transfer.transfer_buffer = pv__allocate_aligned_buffer(state->control.output_fd, fd, state->control.target_buffer_size + 32); if (NULL == state->transfer.transfer_buffer) { - pv_error(state, "%s: %s", _("buffer allocation failed"), strerror(errno)); + pv_error("%s: %s", _("buffer allocation failed"), strerror(errno)); state->status.exit_status |= PV_ERROREXIT_MEMORY; return -1; } @@ -1156,8 +1155,7 @@ ssize_t pv_transfer(pvstate_t state, int fd, bool *eof_in, bool *eof_out, off_t * Any other error is a problem and we must report back. */ /*@-compdef@ */ - pv_error(state, "%s: %s: %d: %s", pv_current_file_name(state), _("select call failed"), n, - strerror(errno)); + pv_error("%s: %s: %d: %s", pv_current_file_name(state), _("select call failed"), n, strerror(errno)); /*@+compdef@ */ /* splint - see previous pv_current_file_name() calls. */ diff --git a/src/pv/watchpid.c b/src/pv/watchpid.c index cf9990a..6045c40 100644 --- a/src/pv/watchpid.c +++ b/src/pv/watchpid.c @@ -96,7 +96,7 @@ int pv_watchfd_info(pvstate_t state, pvwatchfd_t info, bool automatic) if (kill(info->watch_pid, 0) != 0) { if (!automatic) - pv_error(state, "%s %u: %s", _("pid"), info->watch_pid, strerror(errno)); + pv_error("%s %u: %s", _("pid"), info->watch_pid, strerror(errno)); return 1; } @@ -105,8 +105,7 @@ int pv_watchfd_info(pvstate_t state, pvwatchfd_t info, bool automatic) PROC_PIDFDVNODEPATHINFO, &vnodeInfo, PROC_PIDFDVNODEPATHINFO_SIZE); if (size != PROC_PIDFDVNODEPATHINFO_SIZE) { - pv_error(state, "%s %u: %s %d: %s", - _("pid"), info->watch_pid, _("fd"), info->watch_fd, strerror(errno)); + pv_error("%s %u: %s %d: %s", _("pid"), info->watch_pid, _("fd"), info->watch_fd, strerror(errno)); return 3; } @@ -116,7 +115,7 @@ int pv_watchfd_info(pvstate_t state, pvwatchfd_t info, bool automatic) if (!(0 == stat(info->file_fdpath, &(info->sb_fd)))) { if (!automatic) - pv_error(state, "%s %u: %s %d: %s: %s", + pv_error("%s %u: %s %d: %s: %s", _("pid"), info->watch_pid, _("fd"), info->watch_fd, info->file_fdpath, strerror(errno)); return 3; @@ -124,7 +123,7 @@ int pv_watchfd_info(pvstate_t state, pvwatchfd_t info, bool automatic) if (!filesize(info)) { if (!automatic) - pv_error(state, "%s %u: %s %d: %s: %s", + pv_error("%s %u: %s %d: %s: %s", _("pid"), info->watch_pid, _("fd"), info->watch_fd, info->file_fdpath, _("not a regular file or block device")); @@ -162,7 +161,7 @@ int pv_watchfd_info(pvstate_t state, pvwatchfd_t info, bool automatic) if (kill(info->watch_pid, 0) != 0) { if (!automatic) - pv_error(state, "%s %u: %s", _("pid"), info->watch_pid, strerror(errno)); + pv_error("%s %u: %s", _("pid"), info->watch_pid, strerror(errno)); return 1; } (void) pv_snprintf(info->file_fdinfo, PV_SIZEOF_FILE_FDINFO, @@ -180,7 +179,7 @@ int pv_watchfd_info(pvstate_t state, pvwatchfd_t info, bool automatic) * and then only if it's a block device - see filesize(). */ if (!automatic) - pv_error(state, "%s %u: %s %d: %s", + pv_error("%s %u: %s %d: %s", _("pid"), info->watch_pid, _("fd"), info->watch_fd, strerror(errno)); return 2; } @@ -188,7 +187,7 @@ int pv_watchfd_info(pvstate_t state, pvwatchfd_t info, bool automatic) if (!((0 == stat(info->file_fd, &(info->sb_fd))) && (0 == lstat(info->file_fd, &(info->sb_fd_link))))) { if (!automatic) - pv_error(state, "%s %u: %s %d: %s: %s", + pv_error("%s %u: %s %d: %s: %s", _("pid"), info->watch_pid, _("fd"), info->watch_fd, info->file_fdpath, strerror(errno)); return 3; @@ -198,7 +197,7 @@ int pv_watchfd_info(pvstate_t state, pvwatchfd_t info, bool automatic) if (!filesize(info)) { if (!automatic) - pv_error(state, "%s %u: %s %d: %s: %s", + pv_error("%s %u: %s %d: %s: %s", _("pid"), info->watch_pid, _("fd"), info->watch_fd, info->file_fdpath, _("not a regular file or block device")); @@ -297,7 +296,7 @@ static int pidfds(pvstate_t state, unsigned int pid, struct proc_fdinfo **fds, i { int size_needed = proc_pidinfo(pid, PROC_PIDLISTFDS, 0, 0, 0); if (size_needed == -1) { - pv_error(state, "%s: unable to list pid fds: %s", _("pid"), strerror(errno)); + pv_error("%s: unable to list pid fds: %s", _("pid"), strerror(errno)); return -1; } @@ -305,7 +304,7 @@ static int pidfds(pvstate_t state, unsigned int pid, struct proc_fdinfo **fds, i *fds = (struct proc_fdinfo *) malloc(size_needed); if (*fds == NULL) { - pv_error(state, "%s: alloc failed: %s", _("pid"), strerror(errno)); + pv_error("%s: alloc failed: %s", _("pid"), strerror(errno)); return -1; } memset(*fds, 0, size_needed); @@ -382,7 +381,7 @@ int pv_watchpid_scanfds(pvstate_t state, int fd_infos_count = 0; if (pidfds(state, watch_pid, &fd_infos, &fd_infos_count) != 0) { - pv_error(state, "%s: pidfds failed", _("pid")); + pv_error("%s: pidfds failed", _("pid")); return -1; } #else @@ -403,7 +402,7 @@ int pv_watchpid_scanfds(pvstate_t state, #ifdef __APPLE__ if (fd_infos_count < 1) { - pv_error(state, "%s: no fds found", _("pid")); + pv_error("%s: no fds found", _("pid")); return -1; } for (int i = 0; i < fd_infos_count; i++) { @@ -468,7 +467,7 @@ int pv_watchpid_scanfds(pvstate_t state, /* Allocate new display state. */ /*@-mustfreeonly@ *//* splint - this is not a leak, this is a new entry. */ - info_array[use_idx].state = pv_state_alloc(state->status.program_name); + info_array[use_idx].state = pv_state_alloc(); /*@+mustfreeonly@ */ if (NULL == info_array[use_idx].state) return 2;