From: Jeff Mahoney <je...@suse.com> * btrfs.c (btrfs_print_tree_search): don't use print_array. The buffer represents a series of variable sized records, not an array. --- btrfs.c | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-)
diff --git a/btrfs.c b/btrfs.c index af0645c..04c71fc 100644 --- a/btrfs.c +++ b/btrfs.c @@ -401,21 +401,6 @@ print_key_value_internal(struct tcb *tcp, const char *name, uint64_t value) #define print_key_value(tcp, key, name) \ print_key_value_internal((tcp), #name, (key)->name) -static bool -print_btrfs_ioctl_search_header(struct tcb *tcp, void *elem_buf, - size_t elem_size, void *data) -{ - const struct btrfs_ioctl_search_header *sh = elem_buf; - - tprintf("{transid=%" PRI__u64 ", objectid=", sh->transid); - btrfs_print_objectid(sh->objectid); - tprintf(", offset=%" PRI__u64 ", type=", sh->offset); - btrfs_print_key_type(sh->type); - tprintf(", len=%u}", sh->len); - - return true; -} - static void btrfs_print_tree_search(struct tcb *tcp, struct btrfs_ioctl_search_key *key, uint64_t buf_addr, uint64_t buf_size, bool print_size) @@ -457,12 +442,29 @@ btrfs_print_tree_search(struct tcb *tcp, struct btrfs_ioctl_search_key *key, if (abbrev(tcp)) tprints("..."); else { - struct btrfs_ioctl_search_header sh; + uint64_t i; + uint64_t off = 0; + tprints("["); + for (i = 0; i < key->nr_items; i++) { + struct btrfs_ioctl_search_header sh; + uint64_t addr = buf_addr + off; + if (i) + tprints(", "); + if (i > max_strlen || + umove(tcp, addr, &sh)) { + tprints("..."); + break; + } + tprintf("{transid=%" PRI__u64 ", objectid=", + sh.transid); + btrfs_print_objectid(sh.objectid); + tprintf(", offset=%" PRI__u64 ", type=", sh.offset); + btrfs_print_key_type(sh.type); + tprintf(", len=%u}", sh.len); + off += sizeof(sh) + sh.len; - print_array(tcp, buf_addr, key->nr_items, - &sh, sizeof(sh), - umoven_or_printaddr, - print_btrfs_ioctl_search_header, 0); + } + tprints("]"); } tprints("}"); } -- 2.7.1 ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel