aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2014-12-17 16:02:50 -0800
committerGuy Harris <guy@alum.mit.edu>2014-12-18 00:03:26 +0000
commit51522b33723dec4dd0481dcabc261010be39937c (patch)
tree4c772ba5dd3a61a470784464e39573ca27c5028c /wiretap
parent8ce0f122011f26ab4e81172e9899ed27a5508abd (diff)
Handle "I can't map this for that file format" better.
For cases where record (meta)data is something that can't be written out in a particular file format, return WTAP_ERR_UNWRITABLE_REC_DATA along with an err_info string. Report (and free) that err_info string in cases where WTAP_ERR_UNWRITABLE_REC_DATA is returned. Clean up some other error reporting cases, and flag with an XXX some cases where we aren't reporting errors at all, while we're at it. Change-Id: I91d02093af0d42c24ec4634c2c773b30f3d39ab3 Reviewed-on: https://code.wireshark.org/review/5823 Reviewed-by: Guy Harris <guy@alum.mit.edu>
Diffstat (limited to 'wiretap')
-rw-r--r--wiretap/5views.c4
-rw-r--r--wiretap/btsnoop.c19
-rw-r--r--wiretap/catapult_dct2000.c4
-rw-r--r--wiretap/commview.c4
-rw-r--r--wiretap/erf.c3
-rw-r--r--wiretap/eyesdn.c4
-rw-r--r--wiretap/file_access.c4
-rw-r--r--wiretap/k12.c2
-rw-r--r--wiretap/k12text.l2
-rw-r--r--wiretap/lanalyzer.c2
-rw-r--r--wiretap/libpcap.c4
-rw-r--r--wiretap/logcat.c2
-rw-r--r--wiretap/logcat_text.c6
-rw-r--r--wiretap/netmon.c4
-rw-r--r--wiretap/netscaler.c4
-rw-r--r--wiretap/nettl.c4
-rw-r--r--wiretap/network_instruments.c4
-rw-r--r--wiretap/netxray.c8
-rw-r--r--wiretap/ngsniffer.c4
-rw-r--r--wiretap/pcapng.c2
-rw-r--r--wiretap/snoop.c4
-rw-r--r--wiretap/visual.c4
-rw-r--r--wiretap/wtap-int.h2
-rw-r--r--wiretap/wtap.c5
-rw-r--r--wiretap/wtap.h6
25 files changed, 63 insertions, 48 deletions
diff --git a/wiretap/5views.c b/wiretap/5views.c
index aa5dd9afa9..67de759c1d 100644
--- a/wiretap/5views.c
+++ b/wiretap/5views.c
@@ -106,7 +106,7 @@ static gboolean _5views_seek_read(wtap *wth, gint64 seek_off,
static int _5views_read_header(wtap *wth, FILE_T fh, t_5VW_TimeStamped_Header *hdr,
struct wtap_pkthdr *phdr, int *err, gchar **err_info);
-static gboolean _5views_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr, const guint8 *pd, int *err);
+static gboolean _5views_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr, const guint8 *pd, int *err, gchar **err_info);
static gboolean _5views_dump_close(wtap_dumper *wdh, int *err);
@@ -351,7 +351,7 @@ gboolean _5views_dump_open(wtap_dumper *wdh, int *err)
Returns TRUE on success, FALSE on failure. */
static gboolean _5views_dump(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
_5views_dump_t *_5views = (_5views_dump_t *)wdh->priv;
t_5VW_TimeStamped_Header HeaderFrame;
diff --git a/wiretap/btsnoop.c b/wiretap/btsnoop.c
index af10c3c86d..ee6231e3b2 100644
--- a/wiretap/btsnoop.c
+++ b/wiretap/btsnoop.c
@@ -281,10 +281,10 @@ static guint8 btsnoop_lookup_flags(guint8 hci_type, gboolean sent, guint8 *flags
return FALSE;
}
-static gboolean btsnoop_dump_partial_rec_hdr(wtap_dumper *wdh _U_,
+static gboolean btsnoop_format_partial_rec_hdr(
const struct wtap_pkthdr *phdr,
const union wtap_pseudo_header *pseudo_header,
- const guint8 *pd, int *err,
+ const guint8 *pd, int *err, gchar **err_info,
struct btsnooprec_hdr *rec_hdr)
{
gint64 ts_usec;
@@ -292,7 +292,10 @@ static gboolean btsnoop_dump_partial_rec_hdr(wtap_dumper *wdh _U_,
guint8 flags = 0;
if (!btsnoop_lookup_flags(*pd, pseudo_header->p2p.sent, &flags)) {
- *err = WTAP_ERR_UNSUPPORTED;
+ *err = WTAP_ERR_UNWRITABLE_REC_DATA;
+ *err_info = g_strdup_printf("btsnoop: hci_type 0x%02x for %s data isn't supported",
+ *pd,
+ pseudo_header->p2p.sent ? "sent" : "received");
return FALSE;
}
@@ -310,7 +313,7 @@ static gboolean btsnoop_dump_partial_rec_hdr(wtap_dumper *wdh _U_,
/* FIXME: How do we support multiple backends?*/
static gboolean btsnoop_dump_h1(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info)
{
const union wtap_pseudo_header *pseudo_header = &phdr->pseudo_header;
struct btsnooprec_hdr rec_hdr;
@@ -330,7 +333,8 @@ static gboolean btsnoop_dump_h1(wtap_dumper *wdh,
return FALSE;
}
- if (!btsnoop_dump_partial_rec_hdr(wdh, phdr, pseudo_header, pd, err, &rec_hdr))
+ if (!btsnoop_format_partial_rec_hdr(phdr, pseudo_header, pd, err, err_info,
+ &rec_hdr))
return FALSE;
rec_hdr.incl_len = GUINT32_TO_BE(phdr->caplen-1);
@@ -354,7 +358,7 @@ static gboolean btsnoop_dump_h1(wtap_dumper *wdh,
static gboolean btsnoop_dump_h4(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info)
{
const union wtap_pseudo_header *pseudo_header = &phdr->pseudo_header;
struct btsnooprec_hdr rec_hdr;
@@ -371,7 +375,8 @@ static gboolean btsnoop_dump_h4(wtap_dumper *wdh,
return FALSE;
}
- if (!btsnoop_dump_partial_rec_hdr(wdh, phdr, pseudo_header, pd, err, &rec_hdr))
+ if (!btsnoop_format_partial_rec_hdr(phdr, pseudo_header, pd, err, err_info,
+ &rec_hdr))
return FALSE;
rec_hdr.incl_len = GUINT32_TO_BE(phdr->caplen);
diff --git a/wiretap/catapult_dct2000.c b/wiretap/catapult_dct2000.c
index 28c60093b0..59ed3958df 100644
--- a/wiretap/catapult_dct2000.c
+++ b/wiretap/catapult_dct2000.c
@@ -111,7 +111,7 @@ static gboolean catapult_dct2000_seek_read(wtap *wth, gint64 seek_off,
static void catapult_dct2000_close(wtap *wth);
static gboolean catapult_dct2000_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err);
+ const guint8 *pd, int *err, gchar **err_info);
/************************************************************/
@@ -586,7 +586,7 @@ catapult_dct2000_dump_can_write_encap(int encap)
static gboolean
catapult_dct2000_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
const union wtap_pseudo_header *pseudo_header = &phdr->pseudo_header;
guint32 n;
diff --git a/wiretap/commview.c b/wiretap/commview.c
index c82fdbb51a..6c410f950e 100644
--- a/wiretap/commview.c
+++ b/wiretap/commview.c
@@ -86,7 +86,7 @@ static gboolean commview_seek_read(wtap *wth, gint64 seek_off,
static gboolean commview_read_header(commview_header_t *cv_hdr, FILE_T fh,
int *err, gchar **err_info);
static gboolean commview_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err);
+ const guint8 *pd, int *err, gchar **err_info);
wtap_open_return_val commview_open(wtap *wth, int *err, gchar **err_info)
{
@@ -314,7 +314,7 @@ gboolean commview_dump_open(wtap_dumper *wdh, int *err _U_)
* Returns TRUE on success, FALSE on failure. */
static gboolean commview_dump(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
commview_header_t cv_hdr;
struct tm *tm;
diff --git a/wiretap/erf.c b/wiretap/erf.c
index b6a984a82e..acf06057f6 100644
--- a/wiretap/erf.c
+++ b/wiretap/erf.c
@@ -592,7 +592,8 @@ static gboolean erf_dump(
wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
const guint8 *pd,
- int *err)
+ int *err,
+ gchar **err_info _U_)
{
const union wtap_pseudo_header *pseudo_header = &phdr->pseudo_header;
union wtap_pseudo_header other_phdr;
diff --git a/wiretap/eyesdn.c b/wiretap/eyesdn.c
index 83daf82186..25e046edd6 100644
--- a/wiretap/eyesdn.c
+++ b/wiretap/eyesdn.c
@@ -356,7 +356,7 @@ esc_write(wtap_dumper *wdh, const guint8 *buf, int len, int *err)
static gboolean eyesdn_dump(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err);
+ const guint8 *pd, int *err, gchar **err_info);
gboolean eyesdn_dump_open(wtap_dumper *wdh, int *err)
{
@@ -393,7 +393,7 @@ int eyesdn_dump_can_write_encap(int encap)
* Returns TRUE on success, FALSE on failure. */
static gboolean eyesdn_dump(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
static const guint8 start_flag = 0xff;
const union wtap_pseudo_header *pseudo_header = &phdr->pseudo_header;
diff --git a/wiretap/file_access.c b/wiretap/file_access.c
index 018045cf61..c475ffd6a6 100644
--- a/wiretap/file_access.c
+++ b/wiretap/file_access.c
@@ -2316,9 +2316,9 @@ wtap_dump_open_finish(wtap_dumper *wdh, int file_type_subtype, gboolean compress
gboolean
wtap_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info)
{
- return (wdh->subtype_write)(wdh, phdr, pd, err);
+ return (wdh->subtype_write)(wdh, phdr, pd, err, err_info);
}
void
diff --git a/wiretap/k12.c b/wiretap/k12.c
index 934e8d4ec5..af1f4d84ca 100644
--- a/wiretap/k12.c
+++ b/wiretap/k12.c
@@ -1249,7 +1249,7 @@ static void k12_dump_src_setting(gpointer k _U_, gpointer v, gpointer p) {
}
static gboolean k12_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err) {
+ const guint8 *pd, int *err, gchar **err_info _U_) {
const union wtap_pseudo_header *pseudo_header = &phdr->pseudo_header;
k12_dump_t *k12 = (k12_dump_t *)wdh->priv;
guint32 len;
diff --git a/wiretap/k12text.l b/wiretap/k12text.l
index f203fa7edb..f5192cadd0 100644
--- a/wiretap/k12text.l
+++ b/wiretap/k12text.l
@@ -369,7 +369,7 @@ static const struct { int e; const char* s; } encaps[] = {
static gboolean
k12text_dump(wtap_dumper *wdh _U_, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err) {
+ const guint8 *pd, int *err, gchar **err_info _U_) {
#define K12BUF_SIZE 196808
char *buf;
size_t left = K12BUF_SIZE;
diff --git a/wiretap/lanalyzer.c b/wiretap/lanalyzer.c
index bac54fa204..26655cdb12 100644
--- a/wiretap/lanalyzer.c
+++ b/wiretap/lanalyzer.c
@@ -625,7 +625,7 @@ static void my_timersub(const struct timeval *a,
*---------------------------------------------------*/
static gboolean lanalyzer_dump(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
double x;
int i;
diff --git a/wiretap/libpcap.c b/wiretap/libpcap.c
index c6141cd1db..0aebcc30c7 100644
--- a/wiretap/libpcap.c
+++ b/wiretap/libpcap.c
@@ -67,7 +67,7 @@ static gboolean libpcap_seek_read(wtap *wth, gint64 seek_off,
static gboolean libpcap_read_packet(wtap *wth, FILE_T fh,
struct wtap_pkthdr *phdr, Buffer *buf, int *err, gchar **err_info);
static gboolean libpcap_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err);
+ const guint8 *pd, int *err, gchar **err_info);
static int libpcap_read_header(wtap *wth, FILE_T fh, int *err, gchar **err_info,
struct pcaprec_ss990915_hdr *hdr);
@@ -889,7 +889,7 @@ gboolean libpcap_dump_open(wtap_dumper *wdh, int *err)
Returns TRUE on success, FALSE on failure. */
static gboolean libpcap_dump(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
const union wtap_pseudo_header *pseudo_header = &phdr->pseudo_header;
struct pcaprec_ss990915_hdr rec_hdr;
diff --git a/wiretap/logcat.c b/wiretap/logcat.c
index a10cc7544e..de11a42958 100644
--- a/wiretap/logcat.c
+++ b/wiretap/logcat.c
@@ -312,7 +312,7 @@ int logcat_dump_can_write_encap(int encap)
static gboolean logcat_binary_dump(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
int caplen;
diff --git a/wiretap/logcat_text.c b/wiretap/logcat_text.c
index 96ec2cb656..c7bad0d7cf 100644
--- a/wiretap/logcat_text.c
+++ b/wiretap/logcat_text.c
@@ -404,7 +404,7 @@ int logcat_text_long_dump_can_write_encap(int encap) {
static gboolean logcat_text_dump_text(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info)
{
gchar *buf;
gint length;
@@ -474,7 +474,9 @@ static gboolean logcat_text_dump_text(wtap_dumper *wdh,
msg_pre_skip = 1 + (gint) strlen(tag) + 1;
msg_begin = msg_payload + msg_pre_skip;
} else {
- *err = WTAP_ERR_UNSUPPORTED;
+ *err = WTAP_ERR_UNWRITABLE_REC_DATA;
+ *err_info = g_strdup_printf("logcat: version %d isn't supported",
+ logcat_version);
return FALSE;
}
diff --git a/wiretap/netmon.c b/wiretap/netmon.c
index e9f50ce204..a8648493da 100644
--- a/wiretap/netmon.c
+++ b/wiretap/netmon.c
@@ -183,7 +183,7 @@ static gboolean netmon_read_atm_pseudoheader(FILE_T fh,
union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info);
static void netmon_sequential_close(wtap *wth);
static gboolean netmon_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err);
+ const guint8 *pd, int *err, gchar **err_info);
static gboolean netmon_dump_close(wtap_dumper *wdh, int *err);
wtap_open_return_val netmon_open(wtap *wth, int *err, gchar **err_info)
@@ -993,7 +993,7 @@ gboolean netmon_dump_open(wtap_dumper *wdh, int *err)
/* Write a record for a packet to a dump file.
Returns TRUE on success, FALSE on failure. */
static gboolean netmon_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
const union wtap_pseudo_header *pseudo_header = &phdr->pseudo_header;
netmon_dump_t *netmon = (netmon_dump_t *)wdh->priv;
diff --git a/wiretap/netscaler.c b/wiretap/netscaler.c
index 7d3fb9da6b..e8a0eb5ae5 100644
--- a/wiretap/netscaler.c
+++ b/wiretap/netscaler.c
@@ -640,7 +640,7 @@ static gboolean nstrace_set_start_time(wtap *wth);
static guint64 ns_hrtime2nsec(guint32 tm);
static gboolean nstrace_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err);
+ const guint8 *pd, int *err, gchar **err_info);
/*
@@ -1784,7 +1784,7 @@ nstrace_add_abstime(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
/* Write a record for a packet to a dump file.
Returns TRUE on success, FALSE on failure. */
static gboolean nstrace_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
nstrace_dump_t *nstrace = (nstrace_dump_t *)wdh->priv;
diff --git a/wiretap/nettl.c b/wiretap/nettl.c
index 88d42e6e8f..cb885661f9 100644
--- a/wiretap/nettl.c
+++ b/wiretap/nettl.c
@@ -183,7 +183,7 @@ static gboolean nettl_seek_read(wtap *wth, gint64 seek_off,
static gboolean nettl_read_rec(wtap *wth, FILE_T fh, struct wtap_pkthdr *phdr,
Buffer *buf, int *err, gchar **err_info);
static gboolean nettl_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err);
+ const guint8 *pd, int *err, gchar **err_info);
wtap_open_return_val nettl_open(wtap *wth, int *err, gchar **err_info)
{
@@ -682,7 +682,7 @@ gboolean nettl_dump_open(wtap_dumper *wdh, int *err)
Returns TRUE on success, FALSE on failure. */
static gboolean nettl_dump(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
const union wtap_pseudo_header *pseudo_header = &phdr->pseudo_header;
struct nettlrec_hdr rec_hdr;
diff --git a/wiretap/network_instruments.c b/wiretap/network_instruments.c
index 7eb647b575..bf96b30cf8 100644
--- a/wiretap/network_instruments.c
+++ b/wiretap/network_instruments.c
@@ -108,7 +108,7 @@ static int read_packet_data(FILE_T fh, int offset_to_frame, int current_offset_f
static gboolean skip_to_next_packet(wtap *wth, int offset_to_next_packet,
int current_offset_from_packet_header, int *err, char **err_info);
static gboolean observer_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err);
+ const guint8 *pd, int *err, gchar **err_info);
static gint observer_to_wtap_encap(int observer_encap);
static gint wtap_to_observer_encap(int wtap_encap);
@@ -668,7 +668,7 @@ gboolean network_instruments_dump_open(wtap_dumper *wdh, int *err)
Returns TRUE on success, FALSE on failure. */
static gboolean observer_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
const guint8 *pd,
- int *err)
+ int *err, gchar **err_info _U_)
{
observer_dump_private_state * private_state = NULL;
packet_entry_header packet_header;
diff --git a/wiretap/netxray.c b/wiretap/netxray.c
index fa047ccaca..69136373e0 100644
--- a/wiretap/netxray.c
+++ b/wiretap/netxray.c
@@ -412,11 +412,11 @@ static void netxray_guess_atm_type(wtap *wth, struct wtap_pkthdr *phdr,
Buffer *buf);
static gboolean netxray_dump_1_1(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err);
+ const guint8 *pd, int *err, gchar **err_info);
static gboolean netxray_dump_close_1_1(wtap_dumper *wdh, int *err);
static gboolean netxray_dump_2_0(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err);
+ const guint8 *pd, int *err, gchar **err_info);
static gboolean netxray_dump_close_2_0(wtap_dumper *wdh, int *err);
wtap_open_return_val
@@ -1728,7 +1728,7 @@ netxray_dump_open_1_1(wtap_dumper *wdh, int *err)
static gboolean
netxray_dump_1_1(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
netxray_dump_t *netxray = (netxray_dump_t *)wdh->priv;
guint64 timestamp;
@@ -1906,7 +1906,7 @@ netxray_dump_open_2_0(wtap_dumper *wdh, int *err)
static gboolean
netxray_dump_2_0(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
const union wtap_pseudo_header *pseudo_header = &phdr->pseudo_header;
netxray_dump_t *netxray = (netxray_dump_t *)wdh->priv;
diff --git a/wiretap/ngsniffer.c b/wiretap/ngsniffer.c
index 06ba78468b..60ad2e113e 100644
--- a/wiretap/ngsniffer.c
+++ b/wiretap/ngsniffer.c
@@ -528,7 +528,7 @@ static int fix_pseudo_header(int encap, Buffer *buf, int len,
static void ngsniffer_sequential_close(wtap *wth);
static void ngsniffer_close(wtap *wth);
static gboolean ngsniffer_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err);
+ const guint8 *pd, int *err, gchar **err_info);
static gboolean ngsniffer_dump_close(wtap_dumper *wdh, int *err);
static int SnifferDecompress( unsigned char * inbuf, size_t inlen,
unsigned char * outbuf, size_t outlen, int *err, gchar **err_info );
@@ -1993,7 +1993,7 @@ ngsniffer_dump_open(wtap_dumper *wdh, int *err)
Returns TRUE on success, FALSE on failure. */
static gboolean
ngsniffer_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
const union wtap_pseudo_header *pseudo_header = &phdr->pseudo_header;
ngsniffer_dump_t *ngsniffer = (ngsniffer_dump_t *)wdh->priv;
diff --git a/wiretap/pcapng.c b/wiretap/pcapng.c
index 41edb34007..5ad679091a 100644
--- a/wiretap/pcapng.c
+++ b/wiretap/pcapng.c
@@ -3694,7 +3694,7 @@ pcapng_write_name_resolution_block(wtap_dumper *wdh, int *err)
static gboolean pcapng_dump(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
const union wtap_pseudo_header *pseudo_header = &phdr->pseudo_header;
#ifdef HAVE_PLUGINS
diff --git a/wiretap/snoop.c b/wiretap/snoop.c
index 88aecaf7a8..67816b438c 100644
--- a/wiretap/snoop.c
+++ b/wiretap/snoop.c
@@ -96,7 +96,7 @@ static gboolean snoop_read_shomiti_wireless_pseudoheader(FILE_T fh,
union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info,
int *header_size);
static gboolean snoop_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err);
+ const guint8 *pd, int *err, gchar **err_info);
/*
* See
@@ -813,7 +813,7 @@ gboolean snoop_dump_open(wtap_dumper *wdh, int *err)
Returns TRUE on success, FALSE on failure. */
static gboolean snoop_dump(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
const union wtap_pseudo_header *pseudo_header = &phdr->pseudo_header;
struct snooprec_hdr rec_hdr;
diff --git a/wiretap/visual.c b/wiretap/visual.c
index 02acaf711b..01b353446b 100644
--- a/wiretap/visual.c
+++ b/wiretap/visual.c
@@ -165,7 +165,7 @@ static gboolean visual_seek_read(wtap *wth, gint64 seek_off,
static gboolean visual_read_packet(wtap *wth, FILE_T fh,
struct wtap_pkthdr *phdr, Buffer *buf, int *err, gchar **err_info);
static gboolean visual_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err);
+ const guint8 *pd, int *err, gchar **err_info);
static gboolean visual_dump_close(wtap_dumper *wdh, int *err);
static void visual_dump_free(wtap_dumper *wdh);
@@ -642,7 +642,7 @@ gboolean visual_dump_open(wtap_dumper *wdh, int *err)
/* Write a packet to a Visual dump file.
Returns TRUE on success, FALSE on failure. */
static gboolean visual_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guint8 *pd, int *err)
+ const guint8 *pd, int *err, gchar **err_info _U_)
{
const union wtap_pseudo_header *pseudo_header = &phdr->pseudo_header;
struct visual_write_info * visual = (struct visual_write_info *)wdh->priv;
diff --git a/wiretap/wtap-int.h b/wiretap/wtap-int.h
index c550502b81..6f63cfe939 100644
--- a/wiretap/wtap-int.h
+++ b/wiretap/wtap-int.h
@@ -95,7 +95,7 @@ typedef void *WFILE_T;
typedef gboolean (*subtype_write_func)(struct wtap_dumper*,
const struct wtap_pkthdr*,
- const guint8*, int*);
+ const guint8*, int*, gchar**);
typedef gboolean (*subtype_close_func)(struct wtap_dumper*, int*);
struct wtap_dumper {
diff --git a/wiretap/wtap.c b/wiretap/wtap.c
index 74cab0901c..40cabd0821 100644
--- a/wiretap/wtap.c
+++ b/wiretap/wtap.c
@@ -883,7 +883,10 @@ static const char *wtap_errlist[] = {
NULL,
/* WTAP_ERR_REC_TYPE_UNSUPPORTED */
- "That record type cannot be written in that format"
+ "That record type cannot be written in that format",
+
+ /* WTAP_ERR_UNWRITABLE_REC_DATA */
+ "That record can't be written in that format"
};
#define WTAP_ERRLIST_SIZE (sizeof wtap_errlist / sizeof wtap_errlist[0])
diff --git a/wiretap/wtap.h b/wiretap/wtap.h
index e7d80da355..5e707a24db 100644
--- a/wiretap/wtap.h
+++ b/wiretap/wtap.h
@@ -1562,7 +1562,8 @@ wtap_dumper* wtap_dump_fdopen_ng(int fd, int filetype, int encap, int snaplen,
WS_DLL_PUBLIC
-gboolean wtap_dump(wtap_dumper *, const struct wtap_pkthdr *, const guint8 *, int *err);
+gboolean wtap_dump(wtap_dumper *, const struct wtap_pkthdr *, const guint8 *,
+ int *err, gchar **err_info);
WS_DLL_PUBLIC
void wtap_dump_flush(wtap_dumper *);
WS_DLL_PUBLIC
@@ -1738,6 +1739,9 @@ int wtap_register_encap_type(const char* name, const char* short_name);
#define WTAP_ERR_REC_TYPE_UNSUPPORTED -24
/** Specified record type can't be written to that file type */
+#define WTAP_ERR_UNWRITABLE_REC_DATA -25
+ /** Something in the record data can't be written to that file type */
+
#ifdef __cplusplus
}
#endif /* __cplusplus */