From bb476b46eb2bb39ed8c5e6b428e3091cde7a4ba6 Mon Sep 17 00:00:00 2001
From: Peeter <karu.pruun@gmail.com>
Date: Mon, 21 Apr 2014 12:37:03 +0900
Subject: [PATCH] Bring in some changes from FreeBSD

---
 usr.sbin/pflogd/pflogd.c | 40 ++++++++++++++++++++++++++++++++++++----
 1 file changed, 36 insertions(+), 4 deletions(-)

diff --git a/usr.sbin/pflogd/pflogd.c b/usr.sbin/pflogd/pflogd.c
index 86a43af..6753da8 100644
--- a/usr.sbin/pflogd/pflogd.c
+++ b/usr.sbin/pflogd/pflogd.c
@@ -441,18 +441,35 @@ void
 dump_packet_nobuf(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
 {
 	FILE *f = (FILE *)user;
-
+#if defined(__DragonFly__) || defined(__FreeBSD__)
+    struct pcap_sf_pkthdr sh;
+#endif
+    
 	if (suspended) {
 		packets_dropped++;
 		return;
 	}
 
-	if (fwrite(h, sizeof(*h), 1, f) != 1) {
+#if defined(__DragonFly__) || defined(__FreeBSD__)
+    sh.ts.tv_sec = (bpf_int32)h->ts.tv_sec;
+	sh.ts.tv_usec = (bpf_int32)h->ts.tv_usec;
+	sh.caplen = h->caplen;
+	sh.len = h->len;
+    
+	if (fwrite((char *)&sh, sizeof(sh), 1, f) != 1) {
+#else
+        if (fwrite(h, sizeof(*h), 1, f) != 1) {
+#endif
 		off_t pos = ftello(f);
 
 		/* try to undo header to prevent corruption */
-		if ((size_t)pos < sizeof(*h) ||
-		    ftruncate(fileno(f), pos - sizeof(*h))) {
+#if defined(__DragonFly__) || defined(__FreeBSD__)
+        if ((size_t)pos < sizeof(sh) ||
+            ftruncate(fileno(f), pos - sizeof(sh))) {
+#else
+        if ((size_t)pos < sizeof(*h) ||
+            ftruncate(fileno(f), pos - sizeof(*h))) {
+#endif
 			logmsg(LOG_ERR, "Write failed, corrupted logfile!");
 			set_suspended(1);
 			gotsig_close = 1;
@@ -521,7 +538,12 @@ void
 dump_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
 {
 	FILE *f = (FILE *)user;
+#if defined(__DragonFly__) || defined(__FreeBSD__)
+	struct pcap_sf_pkthdr sh;
+	size_t len = sizeof(sh) + h->caplen;
+#else
 	size_t len = sizeof(*h) + h->caplen;
+#endif
 
 	if (len < sizeof(*h) || h->caplen > (size_t)cur_snaplen) {
 		logmsg(LOG_NOTICE, "invalid size %zd (%u/%u), packet dropped",
@@ -549,8 +571,18 @@ dump_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
 	}
 
  append:
+#if defined(__DragonFly__) || defined(__FreeBSD__)
+	sh.ts.tv_sec = (bpf_int32)h->ts.tv_sec;
+	sh.ts.tv_usec = (bpf_int32)h->ts.tv_usec;
+	sh.caplen = h->caplen;
+	sh.len = h->len;
+    
+	memcpy(bufpos, &sh, sizeof(sh));
+	memcpy(bufpos + sizeof(sh), sp, h->caplen);
+#else
 	memcpy(bufpos, h, sizeof(*h));
 	memcpy(bufpos + sizeof(*h), sp, h->caplen);
+#endif
 
 	bufpos += len;
 	bufleft -= len;
-- 
1.9.0

