summaryrefslogtreecommitdiffstats
path: root/usr.sbin/btrace/btrace.c
diff options
context:
space:
mode:
authormpi <mpi@openbsd.org>2020-01-28 12:13:49 +0000
committermpi <mpi@openbsd.org>2020-01-28 12:13:49 +0000
commit88be68db3fba5dfeefe339107566897dd7d709bd (patch)
tree681cfb15870adc3c8ccb6187e00a5d4dfc0d0000 /usr.sbin/btrace/btrace.c
parentRename *_concat() into *_append() to match reality. (diff)
downloadwireguard-openbsd-88be68db3fba5dfeefe339107566897dd7d709bd.tar.xz
wireguard-openbsd-88be68db3fba5dfeefe339107566897dd7d709bd.zip
Implement delete() and @map[key] access.
Diffstat (limited to 'usr.sbin/btrace/btrace.c')
-rw-r--r--usr.sbin/btrace/btrace.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/usr.sbin/btrace/btrace.c b/usr.sbin/btrace/btrace.c
index 13175d0dba3..c5048233cf5 100644
--- a/usr.sbin/btrace/btrace.c
+++ b/usr.sbin/btrace/btrace.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: btrace.c,v 1.2 2020/01/27 14:15:25 mpi Exp $ */
+/* $OpenBSD: btrace.c,v 1.3 2020/01/28 12:13:49 mpi Exp $ */
/*
* Copyright (c) 2019 - 2020 Martin Pieuchot <mpi@openbsd.org>
@@ -675,14 +675,16 @@ stmt_clear(struct bt_stmt *bs)
void
stmt_delete(struct bt_stmt *bs, struct dt_evt *dtev)
{
- struct bt_arg *bkey = SLIST_FIRST(&bs->bs_args);
- struct bt_var *bv = bs->bs_var;
-
- assert(SLIST_NEXT(bkey, ba_next) == NULL);
+ struct bt_arg *bkey, *bmap = SLIST_FIRST(&bs->bs_args);
+ struct bt_var *bv = bmap->ba_value;
- map_delete(bv, ba2hash(bkey, dtev));
+ assert(bmap->ba_type == B_AT_MAP);
+ assert(bs->bs_var == NULL);
+ bkey = bmap->ba_key;
debug("map=%p '%s' delete key=%p\n", bv->bv_value, bv->bv_name, bkey);
+
+ map_delete(bv, ba2hash(bkey, dtev));
}
/*
@@ -694,16 +696,18 @@ stmt_delete(struct bt_stmt *bs, struct dt_evt *dtev)
void
stmt_insert(struct bt_stmt *bs, struct dt_evt *dtev)
{
- struct bt_arg *bkey, *bval = SLIST_FIRST(&bs->bs_args);
- struct bt_var *bv = bs->bs_var;
+ struct bt_arg *bkey, *bmap = SLIST_FIRST(&bs->bs_args);
+ struct bt_arg *bval = (struct bt_arg *)bs->bs_var;
+ struct bt_var *bv = bmap->ba_value;
- bkey = SLIST_NEXT(bval, ba_next);
- assert(SLIST_NEXT(bkey, ba_next) == NULL);
-
- map_insert(bv, ba2hash(bkey, dtev), bval);
+ assert(bmap->ba_type == B_AT_MAP);
+ assert(SLIST_NEXT(bval, ba_next) == NULL);
+ bkey = bmap->ba_key;
debug("map=%p '%s' insert key=%p bval=%p\n", bv->bv_value, bv->bv_name,
bkey, bval);
+
+ map_insert(bv, ba2hash(bkey, dtev), bval);
}
/*
@@ -802,6 +806,7 @@ stmt_zero(struct bt_stmt *bs)
debug("map=%p '%s' zero\n", bv->bv_value, bv->bv_name);
}
+
struct bt_arg *
ba_read(struct bt_arg *ba)
{
@@ -936,6 +941,9 @@ ba2str(struct bt_arg *ba, struct dt_evt *dtev)
snprintf(buf, sizeof(buf) - 1, "%ld", (long)dtev->dtev_sysretval);
str = buf;
break;
+ case B_AT_MAP:
+ str = ba2str(map_get(ba->ba_value, ba2str(ba->ba_key, dtev)), dtev);
+ break;
case B_AT_VAR:
str = ba2str(ba_read(ba), dtev);
break;