1330559Sdteske# -*- tab-width: 4 -*- ;; Emacs
2330559Sdteske# vi: set filetype=sh tabstop=8 shiftwidth=8 noexpandtab :: Vi/ViM
3330559Sdteske############################################################ IDENT(1)
4330559Sdteske#
5330559Sdteske# $Title: dwatch(8) module for open[at](2) [or similar] entry $
6330559Sdteske# $Copyright: 2014-2018 Devin Teske. All rights reserved. $
7330559Sdteske# $FreeBSD: stable/11/cddl/usr.sbin/dwatch/libexec/open 333617 2018-05-15 00:00:44Z dteske $
8330559Sdteske#
9330559Sdteske############################################################ DESCRIPTION
10330559Sdteske#
11330559Sdteske# Print path being passed to open(2), openat(2), or similar
12330559Sdteske#
13330559Sdteske############################################################ PROBE
14330559Sdteske
15330559Sdteskecase "$PROFILE" in
16330559Sdteskeopen) : ${PROBE:=syscall::open:entry, syscall::openat:entry} ;;
17330559Sdteske   *) : ${PROBE:=syscall::$PROFILE:entry}
18330559Sdteskeesac
19330559Sdteske
20330559Sdteske############################################################ ACTIONS
21330559Sdteske
22330559Sdteskeexec 9<<EOF
23330559Sdteskethis string path;
24330559Sdteskethis u_char at;
25330559Sdteske
26330559Sdteske$PROBE /* probe ID $ID */
27330559Sdteske{${TRACE:+
28330559Sdteske	printf("<$ID>");
29330559Sdteske}
30330559Sdteske	/*
31330559Sdteske	 * Should we expect the first argument to be a file descriptor?
32330559Sdteske	 * NB: Based on probefunc ending in "at" (e.g., openat(2))
33330559Sdteske	 */
34330559Sdteske	this->at = strstr(probefunc, "at") ==
35330559Sdteske		(probefunc + strlen(probefunc) - 2) ? 1 : 0;
36330559Sdteske
37330559Sdteske	this->path = copyinstr(this->at ? arg1 : arg0);
38330559Sdteske}
39330559SdteskeEOF
40330559SdteskeACTIONS=$( cat <&9 )
41330559SdteskeID=$(( $ID + 1 ))
42330559Sdteske
43330559Sdteske############################################################ EVENT DETAILS
44330559Sdteske
45333617Sdteskeif [ ! "$CUSTOM_DETAILS" ]; then
46330559Sdteskeexec 9<<EOF
47330559Sdteske	/*
48330559Sdteske	 * Print path details
49330559Sdteske	 */
50330559Sdteske	printf("%s", this->path);
51330559SdteskeEOF
52330559SdteskeEVENT_DETAILS=$( cat <&9 )
53333617Sdteskefi
54330559Sdteske
55330559Sdteske################################################################################
56330559Sdteske# END
57330559Sdteske################################################################################
58