summaryrefslogtreecommitdiffstats
path: root/freebsd
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2022-05-11 08:14:56 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2022-05-12 07:48:02 +0200
commitc9b44ba907c959630286886b8a98bc848ecd9a70 (patch)
tree2438e98a922e9b10b2b2f1843050d0d4c9def379 /freebsd
parenttcpdump: Close pcap dumper at program exit (diff)
downloadrtems-libbsd-c9b44ba907c959630286886b8a98bc848ecd9a70.tar.bz2
tcpdump: No loop monitor if reading from file
Update #4650.
Diffstat (limited to 'freebsd')
-rw-r--r--freebsd/contrib/tcpdump/tcpdump.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/freebsd/contrib/tcpdump/tcpdump.c b/freebsd/contrib/tcpdump/tcpdump.c
index 982a2574..90f587eb 100644
--- a/freebsd/contrib/tcpdump/tcpdump.c
+++ b/freebsd/contrib/tcpdump/tcpdump.c
@@ -1255,8 +1255,8 @@ pcap_loop_monitor(rtems_task_argument arg)
rtems_task_exit();
}
-static int
-pcap_loop_wrapper(pcap_t *pd, int cnt, pcap_handler cb, u_char *ud)
+static void
+pcap_create_loop_monitor(pcap_t *pd)
{
rtems_status_code sc;
rtems_task_priority priority;
@@ -1271,9 +1271,8 @@ pcap_loop_wrapper(pcap_t *pd, int cnt, pcap_handler cb, u_char *ud)
RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES, &id);
if (sc != RTEMS_SUCCESSFUL) {
- fprintf(stderr, "tcpdump: cannot create helper thread: %s\n",
+ error("cannot create pcap loop monitor thread: %s\n",
rtems_status_text(sc));
- return (-1);
}
fprintf(stdout, "tcpdump: press <ENTER> or 'q' or 'Q' to quit\n");
@@ -1287,12 +1286,8 @@ pcap_loop_wrapper(pcap_t *pd, int cnt, pcap_handler cb, u_char *ud)
sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
assert(sc == RTEMS_SUCCESSFUL);
-
- return (pcap_loop(pd, cnt, cb, ud));
}
-#define pcap_loop(pd, cnt, cb, ud) pcap_loop_wrapper(pd, cnt, cb, ud)
-
static void
destroy_pcap_dumper(void *arg)
{
@@ -2234,6 +2229,11 @@ main(int argc, char **argv)
#endif /* HAVE_CAPSICUM */
do {
+#ifdef __rtems__
+ if (RFileName == NULL) {
+ pcap_create_loop_monitor(pd);
+ }
+#endif /* __rtems__ */
status = pcap_loop(pd, cnt, callback, pcap_userdata);
if (WFileName == NULL) {
/*