]> granicus.if.org Git - strace/commitdiff
process.c: move execve and execv parsers to a separate file
authorDmitry V. Levin <ldv@altlinux.org>
Thu, 11 Dec 2014 19:25:02 +0000 (19:25 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Thu, 11 Dec 2014 22:52:03 +0000 (22:52 +0000)
* execve.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* process.c: Move sys_execve, sys_execv, and related code to execve.c.

Makefile.am
execve.c [new file with mode: 0644]
process.c

index ce00548b0521b4bb7fd7687aece7ce92cf73782a..c344338d277522b9d08f3c9a092845554604bea7 100644 (file)
@@ -30,6 +30,7 @@ strace_SOURCES =      \
        count.c         \
        desc.c          \
        dirent.c        \
+       execve.c        \
        fadvise.c       \
        fallocate.c     \
        fanotify.c      \
diff --git a/execve.c b/execve.c
new file mode 100644 (file)
index 0000000..31e80a6
--- /dev/null
+++ b/execve.c
@@ -0,0 +1,86 @@
+#include "defs.h"
+
+static void
+printargv(struct tcb *tcp, long addr)
+{
+       union {
+               unsigned int p32;
+               unsigned long p64;
+               char data[sizeof(long)];
+       } cp;
+       const char *sep;
+       unsigned int n = 0;
+       unsigned wordsize = current_wordsize;
+
+       cp.p64 = 1;
+       for (sep = ""; !abbrev(tcp) || n < max_strlen / 2; sep = ", ", ++n) {
+               if (umoven(tcp, addr, wordsize, cp.data) < 0) {
+                       tprintf("%#lx", addr);
+                       return;
+               }
+               if (wordsize == 4)
+                       cp.p64 = cp.p32;
+               if (cp.p64 == 0)
+                       break;
+               tprints(sep);
+               printstr(tcp, cp.p64, -1);
+               addr += wordsize;
+       }
+       if (cp.p64)
+               tprintf("%s...", sep);
+}
+
+static void
+printargc(const char *fmt, struct tcb *tcp, long addr)
+{
+       int count;
+       char *cp;
+
+       for (count = 0; umove(tcp, addr, &cp) >= 0 && cp != NULL; count++) {
+               addr += sizeof(char *);
+       }
+       tprintf(fmt, count, count == 1 ? "" : "s");
+}
+
+int
+sys_execve(struct tcb *tcp)
+{
+       if (entering(tcp)) {
+               printpath(tcp, tcp->u_arg[0]);
+               if (!verbose(tcp))
+                       tprintf(", %#lx", tcp->u_arg[1]);
+               else {
+                       tprints(", [");
+                       printargv(tcp, tcp->u_arg[1]);
+                       tprints("]");
+               }
+               if (!verbose(tcp))
+                       tprintf(", %#lx", tcp->u_arg[2]);
+               else if (abbrev(tcp))
+                       printargc(", [/* %d var%s */]", tcp, tcp->u_arg[2]);
+               else {
+                       tprints(", [");
+                       printargv(tcp, tcp->u_arg[2]);
+                       tprints("]");
+               }
+       }
+       return 0;
+}
+
+#if defined(SPARC) || defined(SPARC64)
+int
+sys_execv(struct tcb *tcp)
+{
+       if (entering(tcp)) {
+               printpath(tcp, tcp->u_arg[0]);
+               if (!verbose(tcp))
+                       tprintf(", %#lx", tcp->u_arg[1]);
+               else {
+                       tprints(", [");
+                       printargv(tcp, tcp->u_arg[1]);
+                       tprints("]");
+               }
+       }
+       return 0;
+}
+#endif /* SPARC || SPARC64 */
index 908adf638e56d82bf2f54b1bfa1023214f67aa3d..cd0c516d58fe85730477b760c4e658d7e68592f2 100644 (file)
--- a/process.c
+++ b/process.c
@@ -574,91 +574,6 @@ sys_getgroups32(struct tcb *tcp)
        return 0;
 }
 
-static void
-printargv(struct tcb *tcp, long addr)
-{
-       union {
-               unsigned int p32;
-               unsigned long p64;
-               char data[sizeof(long)];
-       } cp;
-       const char *sep;
-       unsigned int n = 0;
-       unsigned wordsize = current_wordsize;
-
-       cp.p64 = 1;
-       for (sep = ""; !abbrev(tcp) || n < max_strlen / 2; sep = ", ", ++n) {
-               if (umoven(tcp, addr, wordsize, cp.data) < 0) {
-                       tprintf("%#lx", addr);
-                       return;
-               }
-               if (wordsize == 4)
-                       cp.p64 = cp.p32;
-               if (cp.p64 == 0)
-                       break;
-               tprints(sep);
-               printstr(tcp, cp.p64, -1);
-               addr += wordsize;
-       }
-       if (cp.p64)
-               tprintf("%s...", sep);
-}
-
-static void
-printargc(const char *fmt, struct tcb *tcp, long addr)
-{
-       int count;
-       char *cp;
-
-       for (count = 0; umove(tcp, addr, &cp) >= 0 && cp != NULL; count++) {
-               addr += sizeof(char *);
-       }
-       tprintf(fmt, count, count == 1 ? "" : "s");
-}
-
-#if defined(SPARC) || defined(SPARC64)
-int
-sys_execv(struct tcb *tcp)
-{
-       if (entering(tcp)) {
-               printpath(tcp, tcp->u_arg[0]);
-               if (!verbose(tcp))
-                       tprintf(", %#lx", tcp->u_arg[1]);
-               else {
-                       tprints(", [");
-                       printargv(tcp, tcp->u_arg[1]);
-                       tprints("]");
-               }
-       }
-       return 0;
-}
-#endif
-
-int
-sys_execve(struct tcb *tcp)
-{
-       if (entering(tcp)) {
-               printpath(tcp, tcp->u_arg[0]);
-               if (!verbose(tcp))
-                       tprintf(", %#lx", tcp->u_arg[1]);
-               else {
-                       tprints(", [");
-                       printargv(tcp, tcp->u_arg[1]);
-                       tprints("]");
-               }
-               if (!verbose(tcp))
-                       tprintf(", %#lx", tcp->u_arg[2]);
-               else if (abbrev(tcp))
-                       printargc(", [/* %d var%s */]", tcp, tcp->u_arg[2]);
-               else {
-                       tprints(", [");
-                       printargv(tcp, tcp->u_arg[2]);
-                       tprints("]");
-               }
-       }
-       return 0;
-}
-
 #include "xlat/ptrace_cmds.h"
 #include "xlat/ptrace_setoptions_flags.h"
 #include "xlat/nt_descriptor_types.h"