xref: /freebsd/cddl/usr.sbin/dwatch/libexec/open (revision 22cf89c938886d14f5796fc49f9f020c23ea8eaf)
1# -*- tab-width: 4 -*- ;; Emacs
2# vi: set filetype=sh tabstop=8 shiftwidth=8 noexpandtab :: Vi/ViM
3############################################################ IDENT(1)
4#
5# $Title: dwatch(8) module for open[at](2) [or similar] entry $
6# $Copyright: 2014-2018 Devin Teske. All rights reserved. $
7#
8############################################################ DESCRIPTION
9#
10# Print path being passed to open(2), openat(2), or similar
11#
12############################################################ PROBE
13
14case "$PROFILE" in
15open) : ${PROBE:=syscall::open:entry, syscall::openat:entry} ;;
16   *) : ${PROBE:=syscall::$PROFILE:entry}
17esac
18
19############################################################ ACTIONS
20
21exec 9<<EOF
22this string path;
23this u_char at;
24
25$PROBE /* probe ID $ID */
26{${TRACE:+
27	printf("<$ID>");
28}
29	/*
30	 * Should we expect the first argument to be a file descriptor?
31	 * NB: Based on probefunc ending in "at" (e.g., openat(2))
32	 */
33	this->at = strstr(probefunc, "at") ==
34		(probefunc + strlen(probefunc) - 2) ? 1 : 0;
35
36	this->path = copyinstr(this->at ? arg1 : arg0);
37}
38EOF
39ACTIONS=$( cat <&9 )
40ID=$(( $ID + 1 ))
41
42############################################################ EVENT DETAILS
43
44if [ ! "$CUSTOM_DETAILS" ]; then
45exec 9<<EOF
46	/*
47	 * Print path details
48	 */
49	printf("%s", this->path);
50EOF
51EVENT_DETAILS=$( cat <&9 )
52fi
53
54################################################################################
55# END
56################################################################################
57