]> granicus.if.org Git - strace/blobdiff - util.c
io: change size types from unsigned long to kernel_ureg_t
[strace] / util.c
diff --git a/util.c b/util.c
index 02bb3bc1fcee31c13895f498919dc94a76ee47d8..72c5251efd05ae68d190919eb8c199f62dfdc73a 100644 (file)
--- a/util.c
+++ b/util.c
@@ -472,7 +472,8 @@ printaddr_klu(const kernel_ulong_t addr)
 
 #define DEF_PRINTNUM(name, type) \
 bool                                                                   \
-printnum_ ## name(struct tcb *tcp, const long addr, const char *fmt)   \
+printnum_ ## name(struct tcb *const tcp, const kernel_ureg_t addr,     \
+                 const char *const fmt)                                \
 {                                                                      \
        type num;                                                       \
        if (umove_or_printaddr(tcp, addr, &num))                        \
@@ -485,7 +486,8 @@ printnum_ ## name(struct tcb *tcp, const long addr, const char *fmt)        \
 
 #define DEF_PRINTPAIR(name, type) \
 bool                                                                   \
-printpair_ ## name(struct tcb *tcp, const long addr, const char *fmt)  \
+printpair_ ## name(struct tcb *const tcp, const kernel_ureg_t addr,    \
+                  const char *const fmt)                               \
 {                                                                      \
        type pair[2];                                                   \
        if (umove_or_printaddr(tcp, addr, &pair))                       \
@@ -506,8 +508,8 @@ DEF_PRINTPAIR(int64, uint64_t)
 
 #if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
 bool
-printnum_long_int(struct tcb *tcp, const long addr,
-                 const char *fmt_long, const char *fmt_int)
+printnum_long_int(struct tcb *const tcp, const kernel_ureg_t addr,
+                 const char *const fmt_long, const char *const fmt_int)
 {
        if (current_wordsize > sizeof(int)) {
                return printnum_int64(tcp, addr, fmt_long);
@@ -813,7 +815,7 @@ print_quoted_string(const char *str, unsigned int size,
  * If path length exceeds `n', append `...' to the output.
  */
 void
-printpathn(struct tcb *tcp, long addr, unsigned int n)
+printpathn(struct tcb *const tcp, const kernel_ureg_t addr, unsigned int n)
 {
        char path[PATH_MAX + 1];
        int nul_seen;
@@ -840,7 +842,7 @@ printpathn(struct tcb *tcp, long addr, unsigned int n)
 }
 
 void
-printpath(struct tcb *tcp, long addr)
+printpath(struct tcb *const tcp, const kernel_ureg_t addr)
 {
        /* Size must correspond to char path[] size in printpathn */
        printpathn(tcp, addr, PATH_MAX);
@@ -848,15 +850,15 @@ printpath(struct tcb *tcp, long addr)
 
 /*
  * Print string specified by address `addr' and length `len'.
- * If `len' == -1, set QUOTE_0_TERMINATED bit in `user_style'.
  * If `user_style' has QUOTE_0_TERMINATED bit set, treat the string
  * as a NUL-terminated string.
  * Pass `user_style' on to `string_quote'.
  * Append `...' to the output if either the string length exceeds `max_strlen',
- * or `len' != -1 and the string length exceeds `len'.
+ * or QUOTE_0_TERMINATED bit is set and the string length exceeds `len'.
  */
 void
-printstr_ex(struct tcb *tcp, long addr, long len, unsigned int user_style)
+printstr_ex(struct tcb *const tcp, const kernel_ureg_t addr,
+           const kernel_ureg_t len, const unsigned int user_style)
 {
        static char *str = NULL;
        static char *outstr;
@@ -879,22 +881,16 @@ printstr_ex(struct tcb *tcp, long addr, long len, unsigned int user_style)
                outstr = xmalloc(outstr_size);
        }
 
+       /* Fetch one byte more because string_quote may look one byte ahead. */
        size = max_strlen + 1;
-       if (len == -1) {
-               /*
-                * Treat as a NUL-terminated string: fetch one byte more
-                * because string_quote may look one byte ahead.
-                */
-               style |= QUOTE_0_TERMINATED;
+
+       if (size > len)
+               size = len;
+       if (style & QUOTE_0_TERMINATED)
                rc = umovestr(tcp, addr, size, str);
-       } else {
-               if (size > (unsigned long) len)
-                       size = (unsigned long) len;
-               if (style & QUOTE_0_TERMINATED)
-                       rc = umovestr(tcp, addr, size, str);
-               else
-                       rc = umoven(tcp, addr, size, str);
-       }
+       else
+               rc = umoven(tcp, addr, size, str);
+
        if (rc < 0) {
                printaddr(addr);
                return;
@@ -911,7 +907,7 @@ printstr_ex(struct tcb *tcp, long addr, long len, unsigned int user_style)
        ellipsis = string_quote(str, outstr, size, style)
                   && len
                   && ((style & QUOTE_0_TERMINATED)
-                      || (unsigned long) len > max_strlen);
+                      || len > max_strlen);
 
        tprints(outstr);
        if (ellipsis)
@@ -919,7 +915,8 @@ printstr_ex(struct tcb *tcp, long addr, long len, unsigned int user_style)
 }
 
 void
-dumpiov_upto(struct tcb *tcp, int len, long addr, unsigned long data_size)
+dumpiov_upto(struct tcb *const tcp, const int len, const kernel_ureg_t addr,
+            unsigned long data_size)
 {
 #if SUPPORTED_PERSONALITIES > 1
        union {
@@ -971,7 +968,7 @@ dumpiov_upto(struct tcb *tcp, int len, long addr, unsigned long data_size)
 }
 
 void
-dumpstr(struct tcb *tcp, long addr, int len)
+dumpstr(struct tcb *const tcp, const kernel_ureg_t addr, const int len)
 {
        static int strsize = -1;
        static unsigned char *str;