Skip to content

Commit b7b52e3

Browse files
committed
Return errors from pcap_dump and pcap_dump_close
1 parent 139a684 commit b7b52e3

File tree

7 files changed

+55
-11
lines changed

7 files changed

+55
-11
lines changed

CHANGES

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
Monthday, Month DD, YYYY:
22
Summary for 1.11.0 libpcap release (so far!)
33
Add LINKTYPE_ETW/DLT_ETW.
4+
Add pcap_dump1 and pcap_dump_close1 functions that propagates
5+
write errors to the caller.
46
Building and testing:
57
Handle some Autoconf/make errors better.
68
Fix "make releasetar" on AIX, OpenBSD and Solaris.

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2772,7 +2772,9 @@ if(NOT MSVC)
27722772
install(FILES ${MAN3PCAP} DESTINATION ${CMAKE_INSTALL_MANDIR}/man3)
27732773
install_manpage_symlink(pcap_datalink_val_to_name.3pcap pcap_datalink_val_to_description.3pcap ${CMAKE_INSTALL_MANDIR}/man3)
27742774
install_manpage_symlink(pcap_datalink_val_to_name.3pcap pcap_datalink_val_to_description_or_dlt.3pcap ${CMAKE_INSTALL_MANDIR}/man3)
2775+
install_manpage_symlink(pcap_dump_close.3pcap pcap_dump_close1.3pcap ${CMAKE_INSTALL_MANDIR}/man3)
27752776
install_manpage_symlink(pcap_dump_open.3pcap pcap_dump_fopen.3pcap ${CMAKE_INSTALL_MANDIR}/man3)
2777+
install_manpage_symlink(pcap_dump.3pcap pcap_dump1.3pcap ${CMAKE_INSTALL_MANDIR}/man3)
27762778
install_manpage_symlink(pcap_findalldevs.3pcap pcap_freealldevs.3pcap ${CMAKE_INSTALL_MANDIR}/man3)
27772779
install_manpage_symlink(pcap_geterr.3pcap pcap_perror.3pcap ${CMAKE_INSTALL_MANDIR}/man3)
27782780
install_manpage_symlink(pcap_inject.3pcap pcap_sendpacket.3pcap ${CMAKE_INSTALL_MANDIR}/man3)

Makefile.in

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,8 +652,12 @@ install: install-shared install-archive libpcap.pc pcap-config @INSTALL_RPCAPD@
652652
rm -f pcap_datalink_val_to_description_or_dlt.3pcap && \
653653
$(LN_S) pcap_datalink_val_to_name.3pcap \
654654
pcap_datalink_val_to_description_or_dlt.3pcap && \
655+
rm -f pcap_dump_close1.3pcap && \
656+
$(LN_S) pcap_dump_close.3pcap pcap_dump_close1.3pcap && \
655657
rm -f pcap_dump_fopen.3pcap && \
656658
$(LN_S) pcap_dump_open.3pcap pcap_dump_fopen.3pcap && \
659+
rm -f pcap_dump1.3pcap && \
660+
$(LN_S) pcap_dump.3pcap pcap_dump1.3pcap && \
657661
rm -f pcap_freealldevs.3pcap && \
658662
$(LN_S) pcap_findalldevs.3pcap pcap_freealldevs.3pcap && \
659663
rm -f pcap_perror.3pcap && \

pcap/pcap.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -738,9 +738,15 @@ PCAP_API int pcap_dump_flush(pcap_dumper_t *);
738738
PCAP_AVAILABLE_0_4
739739
PCAP_API void pcap_dump_close(pcap_dumper_t *);
740740

741+
PCAP_AVAILABLE_1_11
742+
PCAP_API int pcap_dump_close1(pcap_dumper_t *);
743+
741744
PCAP_AVAILABLE_0_4
742745
PCAP_API void pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *);
743746

747+
PCAP_AVAILABLE_1_11
748+
PCAP_API int pcap_dump1(u_char *, const struct pcap_pkthdr *, const u_char *);
749+
744750
PCAP_AVAILABLE_0_7
745751
PCAP_API int pcap_findalldevs(pcap_if_t **, char *);
746752

pcap_dump.3pcap

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
.\"
2020
.TH PCAP_DUMP 3PCAP "8 March 2015"
2121
.SH NAME
22-
pcap_dump \- write a packet to a capture file
22+
pcap_dump, pcap_dump1 \- write a packet to a capture file
2323
.SH SYNOPSIS
2424
.nf
2525
.ft B
@@ -30,6 +30,9 @@ pcap_dump \- write a packet to a capture file
3030
void pcap_dump(u_char *user, struct pcap_pkthdr *h,
3131
.ti +8
3232
u_char *sp);
33+
int pcap_dump(u_char *user, struct pcap_pkthdr *h,
34+
.ti +8
35+
u_char *sp);
3336
.ft
3437
.fi
3538
.SH DESCRIPTION
@@ -46,5 +49,11 @@ parameter is of type
4649
.B pcap_dumper_t
4750
as returned by
4851
.BR pcap_dump_open ().
52+
.SH RETURN VALUE
53+
Returns
54+
.B 0
55+
on success and
56+
.B PCAP_ERROR
57+
on failure.
4958
.SH SEE ALSO
5059
.BR pcap (3PCAP)

pcap_dump_close.3pcap

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
.\"
2020
.TH PCAP_DUMP_CLOSE 3PCAP "3 January 2014"
2121
.SH NAME
22-
pcap_dump_close \- close a savefile being written to
22+
pcap_dump_close, pcap_dump_close1 \- close a savefile being written to
2323
.SH SYNOPSIS
2424
.nf
2525
.ft B
@@ -28,11 +28,18 @@ pcap_dump_close \- close a savefile being written to
2828
.LP
2929
.ft B
3030
void pcap_dump_close(pcap_dumper_t *p);
31+
int pcap_dump_close1(pcap_dumper_t *p);
3132
.ft
3233
.fi
3334
.SH DESCRIPTION
3435
.BR pcap_dump_close ()
3536
closes the ``savefile.''
37+
.SH RETURN VALUE
38+
Returns
39+
.B 0
40+
on success and
41+
.B PCAP_ERROR
42+
on failure.
3643
.SH SEE ALSO
3744
.BR pcap (3PCAP),
3845
.BR pcap_dump_open (3PCAP),

sf-pcap.c

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,12 @@ sf_write_header(pcap_t *p, FILE *fp, int linktype, int snaplen)
743743
*/
744744
void
745745
pcap_dump(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
746+
{
747+
(void)pcap_dump1(user, h, sp);
748+
}
749+
750+
int
751+
pcap_dump1(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
746752
{
747753
register FILE *f;
748754
struct pcap_sf_pkthdr sf_hdr;
@@ -756,9 +762,14 @@ pcap_dump(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
756762
sf_hdr.ts.tv_usec = (bpf_int32)h->ts.tv_usec;
757763
sf_hdr.caplen = h->caplen;
758764
sf_hdr.len = h->len;
759-
/* XXX we should check the return status */
760-
(void)fwrite(&sf_hdr, sizeof(sf_hdr), 1, f);
761-
(void)fwrite(sp, h->caplen, 1, f);
765+
if (fwrite(&sf_hdr, 1, sizeof(sf_hdr), f) != sizeof(sf_hdr)) {
766+
return (-1);
767+
}
768+
if (fwrite(sp, 1, h->caplen, f) != h->caplen) {
769+
return (-1);
770+
}
771+
772+
return (0);
762773
}
763774

764775
static pcap_dumper_t *
@@ -1154,11 +1165,14 @@ pcap_dump_flush(pcap_dumper_t *p)
11541165
void
11551166
pcap_dump_close(pcap_dumper_t *p)
11561167
{
1168+
(void)pcap_dump_close1(p);
1169+
}
11571170

1158-
#ifdef notyet
1159-
if (ferror((FILE *)p))
1160-
return-an-error;
1161-
/* XXX should check return from fclose() too */
1162-
#endif
1163-
(void)fclose((FILE *)p);
1171+
int
1172+
pcap_dump_close1(pcap_dumper_t *p)
1173+
{
1174+
if (fclose((FILE *)p) == EOF) {
1175+
return (-1);
1176+
}
1177+
return (0);
11641178
}

0 commit comments

Comments
 (0)