diff options
author | mpi <mpi@openbsd.org> | 2020-01-28 12:13:49 +0000 |
---|---|---|
committer | mpi <mpi@openbsd.org> | 2020-01-28 12:13:49 +0000 |
commit | 88be68db3fba5dfeefe339107566897dd7d709bd (patch) | |
tree | 681cfb15870adc3c8ccb6187e00a5d4dfc0d0000 /usr.sbin/btrace/btrace.c | |
parent | Rename *_concat() into *_append() to match reality. (diff) | |
download | wireguard-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.c | 32 |
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; |