Macroize conditional signed widening operation
* defs.h: Define widen_to_long() macro.
* signal.c (sys_kill): Use it instead of open-coding it.
(sys_tgkill): Use widen_to_long() on pids.
* resource.c (decode_rlimit): Formatting fix.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
diff --git a/defs.h b/defs.h
index 7702aae..c607dfd 100644
--- a/defs.h
+++ b/defs.h
@@ -723,6 +723,16 @@
# endif
#endif
+/* In many, many places we play fast and loose and use
+ * tprintf("%d", (int) tcp->u_arg[N]) to print fds, pids etc.
+ * We probably need to use widen_to_long() instead:
+ */
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
+# define widen_to_long(v) (current_wordsize == 4 ? (long)(int32_t)(v) : (long)(v))
+#else
+# define widen_to_long(v) ((long)(v))
+#endif
+
struct sysent {
unsigned nargs;
int sys_flags;
diff --git a/resource.c b/resource.c
index 5a51d8c..657e63d 100644
--- a/resource.c
+++ b/resource.c
@@ -173,8 +173,7 @@
{
if (!addr)
tprints("NULL");
- else if (!verbose(tcp) ||
- (exiting(tcp) && syserror(tcp)))
+ else if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)))
tprintf("%#lx", addr);
else {
# if SIZEOF_RLIM_T == 4
diff --git a/signal.c b/signal.c
index 55ff3ed..11d49d3 100644
--- a/signal.c
+++ b/signal.c
@@ -1117,13 +1117,10 @@
sys_kill(struct tcb *tcp)
{
if (entering(tcp)) {
- long pid = tcp->u_arg[0];
-#if SUPPORTED_PERSONALITIES > 1
- /* Sign-extend a 32-bit value when that's what it is. */
- if (current_wordsize < sizeof pid)
- pid = (long) (int) pid;
-#endif
- tprintf("%ld, %s", pid, signame(tcp->u_arg[1]));
+ tprintf("%ld, %s",
+ widen_to_long(tcp->u_arg[0]),
+ signame(tcp->u_arg[1])
+ );
}
return 0;
}
@@ -1133,7 +1130,10 @@
{
if (entering(tcp)) {
tprintf("%ld, %ld, %s",
- tcp->u_arg[0], tcp->u_arg[1], signame(tcp->u_arg[2]));
+ widen_to_long(tcp->u_arg[0]),
+ widen_to_long(tcp->u_arg[1]),
+ signame(tcp->u_arg[2])
+ );
}
return 0;
}