Signed-off-by: Vitezslav Samel <vitezslav(a)samel.cz>
---
src/error.c | 10 +++++++---
src/error.h | 2 +-
src/fltedit.c | 5 +----
src/fltlist.c | 4 +---
src/fltmgr.c | 3 +--
src/hostmon.c | 5 +----
src/ifstats.c | 12 +++---------
src/instances.c | 8 ++------
src/itrafmon.c | 9 +++------
src/log.c | 6 ++++--
src/log.h | 2 +-
src/pktsize.c | 5 +----
src/promisc.c | 9 ++-------
src/serv.c | 5 +----
src/tui/msgboxes.c | 19 +++++++++++--------
src/tui/tui.h | 3 ++-
16 files changed, 42 insertions(+), 65 deletions(-)
diff --git a/src/error.c b/src/error.c
index cd0e312..92ee71d 100644
--- a/src/error.c
+++ b/src/error.c
@@ -25,10 +25,14 @@ details.
extern int daemonized;
-void write_error(char *msg)
+void write_error(char *msg, ...)
{
+ va_list vararg;
+
+ va_start(vararg, msg);
if (daemonized)
- write_daemon_err(msg);
+ write_daemon_err(msg, vararg);
else
- tui_error(ANYKEY_MSG, msg);
+ tui_error_va(ANYKEY_MSG, msg, vararg);
+ va_end(vararg);
}
diff --git a/src/error.h b/src/error.h
index 0b070f6..7881c41 100644
--- a/src/error.h
+++ b/src/error.h
@@ -1,6 +1,6 @@
#ifndef IPTRAF_NG_ERROR_H
#define IPTRAF_NG_ERROR_H
-void write_error(char *msg);
+void write_error(char *msg, ...) __attribute__((format (printf, 1, 2)));
#endif /* IPTRAF_NG_ERROR_H */
diff --git a/src/fltedit.c b/src/fltedit.c
index d0a8c43..46cdb3d 100644
--- a/src/fltedit.c
+++ b/src/fltedit.c
@@ -45,16 +45,13 @@ int loadfilter(char *filename, struct filterlist *fl, int resolve)
unsigned int idx = 0;
int br;
int resolv_err = 0;
- char err_msg[80];
init_filter_table(fl);
pfd = open(filename, O_RDONLY);
if (pfd < 0) {
- memset(err_msg, 0, 80);
- snprintf(err_msg, 80, "Error opening IP filter data file");
- write_error(err_msg);
+ write_error("Error opening IP filter data file");
fl->head = NULL;
return 1;
}
diff --git a/src/fltlist.c b/src/fltlist.c
index c869755..bae5b68 100644
--- a/src/fltlist.c
+++ b/src/fltlist.c
@@ -21,9 +21,7 @@ int loadfilter(char *filename, struct filterlist *fl, int resolve)
pfd = open(filename, O_RDONLY);
if (pfd < 0) {
- memset(err_msg, 0, 80);
- snprintf(err_msg, 80, "Error opening IP filter data file");
- write_error(err_msg);
+ write_error("Error opening IP filter data file");
fl->head = NULL;
return 1;
}
diff --git a/src/fltmgr.c b/src/fltmgr.c
index d9f7b38..2853c26 100644
--- a/src/fltmgr.c
+++ b/src/fltmgr.c
@@ -95,8 +95,7 @@ unsigned long int nametoaddr(char *ascname, int *err)
if (he != NULL)
bcopy((he->h_addr_list)[0], &result, he->h_length);
else {
- snprintf(imsg, 45, "Unable to resolve %s", ascname);
- write_error(imsg);
+ write_error("Unable to resolve %s", ascname);
*err = 1;
return (-1);
}
diff --git a/src/hostmon.c b/src/hostmon.c
index 087efc9..ff28fb3 100644
--- a/src/hostmon.c
+++ b/src/hostmon.c
@@ -700,7 +700,6 @@ void hostmon(const struct OPTIONS *options, int facilitytime, char
*ifptr,
int keymode = 0;
int instance_id;
- char msgstring[80];
int fd;
@@ -709,10 +708,8 @@ void hostmon(const struct OPTIONS *options, int facilitytime, char
*ifptr,
if (!facility_active(LANMONIDFILE, ifptr))
mark_facility(LANMONIDFILE, "LAN monitor", ifptr);
else {
- snprintf(msgstring, 80,
- "LAN station monitor already running on %s",
+ write_error("LAN station monitor already running on %s",
gen_iface_msg(ifptr));
- write_error(msgstring);
return;
}
diff --git a/src/ifstats.c b/src/ifstats.c
index 619cab5..f398749 100644
--- a/src/ifstats.c
+++ b/src/ifstats.c
@@ -208,8 +208,7 @@ void destroyiflist(struct iflist *list)
void no_ifaces_error(void)
{
- write_error
- ("No active interfaces. Check their status or the /proc filesystem");
+ write_error("No active interfaces. Check their status or the /proc
filesystem");
}
void updaterates(struct iftab *table, int unit, time_t starttime, time_t now,
@@ -426,8 +425,7 @@ void ifstats(const struct OPTIONS *options, struct filterstate
*ofilter,
if (!facility_active(GSTATIDFILE, ""))
mark_facility(GSTATIDFILE, "general interface statistics", "");
else {
- write_error
- ("General interface stats already active in another process");
+ write_error("General interface stats already active in another process");
return;
}
@@ -784,7 +782,6 @@ void detstats(char *iface, const struct OPTIONS *options, int
facilitytime,
float peakpps_out = 0;
struct promisc_states *promisc_list;
- char err_msg[80];
int fd;
/*
@@ -795,10 +792,7 @@ void detstats(char *iface, const struct OPTIONS *options, int
facilitytime,
mark_facility(DSTATIDFILE, "detailed interface statistics",
iface);
else {
- snprintf(err_msg, 80,
- "Detailed interface stats already monitoring %s",
- iface);
- write_error(err_msg);
+ write_error("Detailed interface stats already monitoring %s", iface);
return;
}
diff --git a/src/instances.c b/src/instances.c
index 2f4150c..b15f64b 100644
--- a/src/instances.c
+++ b/src/instances.c
@@ -33,16 +33,12 @@ void gen_lockfile_name(char *tagfile, char *iface, char *result)
void mark_facility(char *tagfile, char *facility, char *iface)
{
int fd;
- char errstring[80];
char lockfile[64];
gen_lockfile_name(tagfile, iface, lockfile);
fd = open(lockfile, O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR | S_IWUSR);
- if (fd < 0) {
- snprintf(errstring, 80, "Warning: unable to lock %s on %s",
- facility, iface);
- write_error(errstring);
- }
+ if (fd < 0)
+ write_error("Warning: unable to lock %s on %s", facility, iface);
close(fd);
}
diff --git a/src/itrafmon.c b/src/itrafmon.c
index 4bc8572..ae6cbb1 100644
--- a/src/itrafmon.c
+++ b/src/itrafmon.c
@@ -517,7 +517,7 @@ int checkrvnamed(void)
die("unable execvp() rvnamed-ng");
} else if (cpid == -1) {
- write_error ("Can't spawn new process; lookups will block");
+ write_error("Can't spawn new process; lookups will block");
return 0;
} else {
while (waitpid(cpid, &cstat, 0) < 0)
@@ -525,7 +525,7 @@ int checkrvnamed(void)
break;
if (WEXITSTATUS(cstat) == 1) {
- write_error ("Can't start rvnamed; lookups will block");
+ write_error("Can't start rvnamed; lookups will block");
return 0;
} else {
sleep(1);
@@ -648,10 +648,7 @@ void ipmon(struct OPTIONS *options, struct filterstate *ofilter,
if (!facility_active(IPMONIDFILE, ifptr))
mark_facility(IPMONIDFILE, "IP traffic monitor", ifptr);
else {
- snprintf(msgstring, 80,
- "IP Traffic Monitor already listening on %s",
- gen_iface_msg(ifptr));
- write_error(msgstring);
+ write_error("IP Traffic Monitor already listening on %s",
gen_iface_msg(ifptr));
return;
}
diff --git a/src/log.c b/src/log.c
index f12e460..3a2061e 100644
--- a/src/log.c
+++ b/src/log.c
@@ -129,14 +129,16 @@ void writelog(int logging, FILE * fd, char *msg)
fflush(fd);
}
-void write_daemon_err(char *msg)
+void write_daemon_err(char *msg, va_list vararg)
{
char atime[TIME_TARGET_MAX];
FILE *fd;
genatime(time((time_t *) NULL), atime);
fd = fopen(DAEMONLOG, "a");
- fprintf(fd, "%s iptraf[%u]: %s\n", atime, getpid(), msg);
+ fprintf(fd, "%s iptraf[%u]: ", atime, getpid());
+ vfprintf(fd, msg, vararg);
+ fprintf(fd, "\n");
fclose(fd);
}
diff --git a/src/log.h b/src/log.h
index ff3c2b8..222d892 100644
--- a/src/log.h
+++ b/src/log.h
@@ -13,7 +13,7 @@ char *gen_instance_logname(char *template, int instance_id);
void input_logfile(char *target, int *aborted);
void opentlog(FILE ** fd, char *logfilename);
void writelog(int logging, FILE * fd, char *msg);
-void write_daemon_err(char *msg);
+void write_daemon_err(char *msg, va_list vararg);
void rotate_logfile(FILE ** fd, char *name);
void check_rotate_flag(FILE ** fd, int logging);
void announce_rotate_prepare(FILE * fd);
diff --git a/src/pktsize.c b/src/pktsize.c
index 94e2ea6..091e239 100644
--- a/src/pktsize.c
+++ b/src/pktsize.c
@@ -172,15 +172,12 @@ void packet_size_breakdown(struct OPTIONS *options, char *ifname,
struct promisc_states *promisc_list;
- char msgstring[80];
int fd;
if (!facility_active(PKTSIZEIDFILE, ifname))
mark_facility(PKTSIZEIDFILE, "Packet size breakdown", ifname);
else {
- snprintf(msgstring, 80,
- "Packet sizes already being monitored on %s", ifname);
- write_error(msgstring);
+ write_error("Packet sizes already being monitored on %s", ifname);
return;
}
diff --git a/src/promisc.c b/src/promisc.c
index 9aabe75..ab28f16 100644
--- a/src/promisc.c
+++ b/src/promisc.c
@@ -42,7 +42,6 @@ void init_promisc_list(struct promisc_states **list)
struct promisc_states *tail = NULL;
struct ifreq ifr;
int istat;
- char err_msg[80];
ifd = socket(PF_INET, SOCK_DGRAM, 0);
@@ -84,10 +83,8 @@ void init_promisc_list(struct promisc_states **list)
istat = ioctl(ifd, SIOCGIFFLAGS, &ifr);
if (istat < 0) {
- sprintf(err_msg,
- "Unable to obtain interface parameters for %s",
+ write_error("Unable to obtain interface parameters for %s",
buf);
- write_error(err_msg);
ptmp->params.state_valid = 0;
} else {
ptmp->params.saved_state =
@@ -175,7 +172,6 @@ void srpromisc(int mode, struct promisc_states *list)
struct ifreq ifr;
struct promisc_states *ptmp;
int istat;
- char fullmsg[PROMISC_MSG_MAX];
ptmp = list;
@@ -207,9 +203,8 @@ void srpromisc(int mode, struct promisc_states *list)
istat = ioctl(fd, SIOCSIFFLAGS, &ifr);
if (istat < 0) {
- sprintf(fullmsg, "Promisc change failed for %s",
+ write_error("Promisc change failed for %s",
ptmp->params.ifname);
- write_error(fullmsg);
}
}
ptmp = ptmp->next_entry;
diff --git a/src/serv.c b/src/serv.c
index e9d41dd..e15986c 100644
--- a/src/serv.c
+++ b/src/serv.c
@@ -729,7 +729,6 @@ void servmon(char *ifname, struct porttab *ports, const struct OPTIONS
*options,
WINDOW *statwin;
PANEL *statpanel;
- char msgstring[80];
char sp_buf[10];
const int statx = 1;
@@ -743,9 +742,7 @@ void servmon(char *ifname, struct porttab *ports, const struct OPTIONS
*options,
if (!facility_active(TCPUDPIDFILE, ifname))
mark_facility(TCPUDPIDFILE, "TCP/UDP monitor", ifname);
else {
- snprintf(msgstring, 80, "TCP/UDP monitor already running on %s",
- ifname);
- write_error(msgstring);
+ write_error("TCP/UDP monitor already running on %s", ifname);
return;
}
diff --git a/src/tui/msgboxes.c b/src/tui/msgboxes.c
index 1447d9f..0aca08a 100644
--- a/src/tui/msgboxes.c
+++ b/src/tui/msgboxes.c
@@ -31,7 +31,7 @@ void tx_init_info_attrs(int border, int text, int prompt)
INFO_PROMPT_ATTR = prompt;
}
-void tui_error(const char *prompt, const char *err, ...)
+void tui_error_va(const char *prompt, const char *err, va_list vararg)
{
WINDOW *win = newwin(4, 70, (LINES - 4) / 2, (COLS - 70) / 2);
PANEL *panel = new_panel(win);
@@ -45,14 +45,8 @@ void tui_error(const char *prompt, const char *err, ...)
wattrset(win, ERR_TEXT_ATTR);
wmove(win, 1, 2);
- va_list params;
- va_start(params, err);
- char msg[4096];
-
- vsnprintf(msg, sizeof(msg), err, params);
- wprintw(win, "%s", msg);
- va_end(params);
+ vw_printw(win, err, vararg);
update_panels();
doupdate();
@@ -71,6 +65,15 @@ void tui_error(const char *prompt, const char *err, ...)
doupdate();
}
+void tui_error(const char *prompt, const char *err, ...)
+{
+ va_list params;
+
+ va_start(params, err);
+ tui_error_va(prompt, err, params);
+ va_end(params);
+}
+
void tx_infobox(char *text, char *prompt)
{
WINDOW *win;
diff --git a/src/tui/tui.h b/src/tui/tui.h
index 07fc121..d25556e 100644
--- a/src/tui/tui.h
+++ b/src/tui/tui.h
@@ -21,6 +21,7 @@
#define ANYKEY_MSG "Press a key to continue"
-extern void tui_error(const char *prompt, const char *err, ...);
+extern void tui_error(const char *prompt, const char *err, ...) __attribute((format
(printf, 2, 3)));
+extern void tui_error_va(const char *prompt, const char *err, va_list vararg);
#endif /* IPTRAF_NG_TUI_TUI_H */
--
1.7.8.4