summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2020-07-08 08:00:00 +0000
committerDmitry V. Levin <ldv@altlinux.org>2020-07-08 08:00:00 +0000
commit1253dbc1efb35238347ac16b58874b1514bb77ff (patch)
treec155ece8cdf3371abddf2f7d0d3fc146b0f92ad0
parentac50c254ce492be16777f54929f9a73848a5c02b (diff)
downloadstrace-1253dbc1efb35238347ac16b58874b1514bb77ff.tar.gz
loop: factor out print_loop_info64
It is going to be used to implement LOOP_CONFIGURE decoding. * loop.c (print_loop_info64): New function. (decode_loop_info64): Use it.
-rw-r--r--loop.c54
1 files changed, 29 insertions, 25 deletions
diff --git a/loop.c b/loop.c
index b3efe4432..56ac6b8f7 100644
--- a/loop.c
+++ b/loop.c
@@ -77,53 +77,57 @@ decode_loop_info(struct tcb *const tcp, const kernel_ulong_t addr)
}
static void
-decode_loop_info64(struct tcb *const tcp, const kernel_ulong_t addr)
+print_loop_info64(struct tcb *const tcp, const struct loop_info64 *const info64)
{
- struct loop_info64 info64;
-
- tprints(", ");
- if (umove_or_printaddr(tcp, addr, &info64))
- return;
-
if (!abbrev(tcp)) {
- PRINT_FIELD_DEV("{", info64, lo_device);
- PRINT_FIELD_U(", ", info64, lo_inode);
- PRINT_FIELD_DEV(", ", info64, lo_rdevice);
- PRINT_FIELD_X(", ", info64, lo_offset);
- PRINT_FIELD_U(", ", info64, lo_sizelimit);
- PRINT_FIELD_U(", ", info64, lo_number);
+ PRINT_FIELD_DEV("{", *info64, lo_device);
+ PRINT_FIELD_U(", ", *info64, lo_inode);
+ PRINT_FIELD_DEV(", ", *info64, lo_rdevice);
+ PRINT_FIELD_X(", ", *info64, lo_offset);
+ PRINT_FIELD_U(", ", *info64, lo_sizelimit);
+ PRINT_FIELD_U(", ", *info64, lo_number);
} else {
- PRINT_FIELD_X("{", info64, lo_offset);
- PRINT_FIELD_U(", ", info64, lo_number);
+ PRINT_FIELD_X("{", *info64, lo_offset);
+ PRINT_FIELD_U(", ", *info64, lo_number);
}
- if (!abbrev(tcp) || info64.lo_encrypt_type != LO_CRYPT_NONE) {
- PRINT_FIELD_XVAL(", ", info64, lo_encrypt_type,
+ if (!abbrev(tcp) || info64->lo_encrypt_type != LO_CRYPT_NONE) {
+ PRINT_FIELD_XVAL(", ", *info64, lo_encrypt_type,
loop_crypt_type_options, "LO_CRYPT_???");
- PRINT_FIELD_U(", ", info64, lo_encrypt_key_size);
+ PRINT_FIELD_U(", ", *info64, lo_encrypt_key_size);
}
- PRINT_FIELD_FLAGS(", ", info64, lo_flags,
+ PRINT_FIELD_FLAGS(", ", *info64, lo_flags,
loop_flags_options, "LO_FLAGS_???");
- PRINT_FIELD_CSTRING(", ", info64, lo_file_name);
+ PRINT_FIELD_CSTRING(", ", *info64, lo_file_name);
- if (!abbrev(tcp) || info64.lo_encrypt_type != LO_CRYPT_NONE) {
- PRINT_FIELD_CSTRING(", ", info64, lo_crypt_name);
+ if (!abbrev(tcp) || info64->lo_encrypt_type != LO_CRYPT_NONE) {
+ PRINT_FIELD_CSTRING(", ", *info64, lo_crypt_name);
const unsigned int lo_encrypt_key_size =
- MIN((unsigned) info64.lo_encrypt_key_size, LO_KEY_SIZE);
- PRINT_FIELD_STRING(", ", info64, lo_encrypt_key,
+ MIN((unsigned) info64->lo_encrypt_key_size, LO_KEY_SIZE);
+ PRINT_FIELD_STRING(", ", *info64, lo_encrypt_key,
lo_encrypt_key_size, 0);
}
if (!abbrev(tcp))
- PRINT_FIELD_X_ARRAY(", ", info64, lo_init);
+ PRINT_FIELD_X_ARRAY(", ", *info64, lo_init);
else
tprints(", ...");
tprints("}");
}
+static void
+decode_loop_info64(struct tcb *const tcp, const kernel_ulong_t addr)
+{
+ struct loop_info64 info64;
+
+ tprints(", ");
+ if (!umove_or_printaddr(tcp, addr, &info64))
+ print_loop_info64(tcp, &info64);
+}
+
MPERS_PRINTER_DECL(int, loop_ioctl,
struct tcb *tcp, const unsigned int code,
const kernel_ulong_t arg)