From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29756 invoked by alias); 20 May 2008 13:19:16 -0000 Received: (qmail 29467 invoked by uid 367); 20 May 2008 13:18:54 -0000 Date: Tue, 20 May 2008 13:19:00 -0000 Message-ID: <20080520131853.29452.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Implement jni/CmdLineBuilder. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 24e628ca394f14d40fb4b297b2ad949cba3c2fa6 X-Git-Newrev: 131f1576b9fea62702a2a776e569b444cd7a0630 Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q2/txt/msg00252.txt.bz2 The branch, master has been updated via 131f1576b9fea62702a2a776e569b444cd7a0630 (commit) from 24e628ca394f14d40fb4b297b2ad949cba3c2fa6 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 131f1576b9fea62702a2a776e569b444cd7a0630 Author: Andrew Cagney Date: Tue May 20 09:17:36 2008 -0400 Implement jni/CmdLineBuilder. frysk-core/frysk/isa/corefiles/ChangeLog 2008-05-20 Andrew Cagney * IA32LinuxElfCorefile.java (buildBuffer(byte[])): Delete. * X8664LinuxElfCorefile.java: Ditto. * PPC32LinuxElfCorefile.java: Ditto. * PPC64LinuxElfCorefile.java: Ditto. frysk-core/frysk/proc/live/ChangeLog 2008-05-20 Andrew Cagney * LinuxPtraceProc.java (buildBuffer(byte[])): Delete. frysk-sys/frysk/sys/proc/ChangeLog 2008-05-20 Andrew Cagney * jni/CmdLineBuilder.cxx: Implement. * CmdLineBuilder.java (buildBuffer(byte[])): Delete. * TestCmdLine.java: Update. * cni/CmdLineBuilder.cxx: Update. ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/isa/corefiles/ChangeLog | 7 +++ .../frysk/isa/corefiles/IA32LinuxElfCorefile.java | 4 -- .../frysk/isa/corefiles/PPC32LinuxElfCorefile.java | 4 -- .../frysk/isa/corefiles/PPC64LinuxElfCorefile.java | 4 -- .../frysk/isa/corefiles/X8664LinuxElfCorefile.java | 4 -- frysk-core/frysk/proc/live/ChangeLog | 4 ++ frysk-core/frysk/proc/live/LinuxPtraceProc.java | 2 - frysk-sys/frysk/sys/proc/ChangeLog | 5 ++ frysk-sys/frysk/sys/proc/CmdLineBuilder.java | 6 -- frysk-sys/frysk/sys/proc/TestCmdLine.java | 3 - frysk-sys/frysk/sys/proc/cni/CmdLineBuilder.cxx | 3 +- frysk-sys/frysk/sys/proc/jni/CmdLineBuilder.cxx | 54 +++++++++++++++++++- 12 files changed, 70 insertions(+), 30 deletions(-) First 500 lines of diff: diff --git a/frysk-core/frysk/isa/corefiles/ChangeLog b/frysk-core/frysk/isa/corefiles/ChangeLog index bb8140c..a0afb19 100644 --- a/frysk-core/frysk/isa/corefiles/ChangeLog +++ b/frysk-core/frysk/isa/corefiles/ChangeLog @@ -1,3 +1,10 @@ +2008-05-20 Andrew Cagney + + * IA32LinuxElfCorefile.java (buildBuffer(byte[])): Delete. + * X8664LinuxElfCorefile.java: Ditto. + * PPC32LinuxElfCorefile.java: Ditto. + * PPC64LinuxElfCorefile.java: Ditto. + 2008-03-11 Andrew Cagney * TestLinuxElfCorefile.java: Update to match Offspring. diff --git a/frysk-core/frysk/isa/corefiles/IA32LinuxElfCorefile.java b/frysk-core/frysk/isa/corefiles/IA32LinuxElfCorefile.java index 56d0b77..d7aa00d 100644 --- a/frysk-core/frysk/isa/corefiles/IA32LinuxElfCorefile.java +++ b/frysk-core/frysk/isa/corefiles/IA32LinuxElfCorefile.java @@ -129,10 +129,6 @@ public class IA32LinuxElfCorefile extends LinuxElfCorefile { class BuildCmdLine extends CmdLineBuilder { String prettyArgs = ""; - public void buildBuffer(byte[] buf) { - - } - public void buildArgv(String[] argv) { for (int i = 0; i < argv.length; i++) diff --git a/frysk-core/frysk/isa/corefiles/PPC32LinuxElfCorefile.java b/frysk-core/frysk/isa/corefiles/PPC32LinuxElfCorefile.java index 2f2e5c7..bbab7c2 100644 --- a/frysk-core/frysk/isa/corefiles/PPC32LinuxElfCorefile.java +++ b/frysk-core/frysk/isa/corefiles/PPC32LinuxElfCorefile.java @@ -135,10 +135,6 @@ public class PPC32LinuxElfCorefile extends LinuxElfCorefile { class BuildCmdLine extends CmdLineBuilder { String prettyArgs = ""; - public void buildBuffer(byte[] buf) { - - } - public void buildArgv(String[] argv) { for (int i = 0; i < argv.length; i++) diff --git a/frysk-core/frysk/isa/corefiles/PPC64LinuxElfCorefile.java b/frysk-core/frysk/isa/corefiles/PPC64LinuxElfCorefile.java index f1d2ad4..0e977f9 100644 --- a/frysk-core/frysk/isa/corefiles/PPC64LinuxElfCorefile.java +++ b/frysk-core/frysk/isa/corefiles/PPC64LinuxElfCorefile.java @@ -133,10 +133,6 @@ public class PPC64LinuxElfCorefile extends LinuxElfCorefile { class BuildCmdLine extends CmdLineBuilder { String prettyArgs = ""; - public void buildBuffer(byte[] buf) { - - } - public void buildArgv(String[] argv) { for (int i = 0; i < argv.length; i++) diff --git a/frysk-core/frysk/isa/corefiles/X8664LinuxElfCorefile.java b/frysk-core/frysk/isa/corefiles/X8664LinuxElfCorefile.java index f5079dd..d18fe0d 100644 --- a/frysk-core/frysk/isa/corefiles/X8664LinuxElfCorefile.java +++ b/frysk-core/frysk/isa/corefiles/X8664LinuxElfCorefile.java @@ -128,10 +128,6 @@ public class X8664LinuxElfCorefile extends LinuxElfCorefile { class BuildCmdLine extends CmdLineBuilder { String prettyArgs = ""; - public void buildBuffer(byte[] buf) { - - } - public void buildArgv(String[] argv) { for (int i = 0; i < argv.length; i++) diff --git a/frysk-core/frysk/proc/live/ChangeLog b/frysk-core/frysk/proc/live/ChangeLog index 5c4a96f..211ec66 100644 --- a/frysk-core/frysk/proc/live/ChangeLog +++ b/frysk-core/frysk/proc/live/ChangeLog @@ -1,3 +1,7 @@ +2008-05-20 Andrew Cagney + + * LinuxPtraceProc.java (buildBuffer(byte[])): Delete. + 2008-05-14 Phil Muldoon * LinuxPtraceTaskState.java (Running.checkWatchpoint): Check watchpoint diff --git a/frysk-core/frysk/proc/live/LinuxPtraceProc.java b/frysk-core/frysk/proc/live/LinuxPtraceProc.java index f789d84..d05466b 100644 --- a/frysk-core/frysk/proc/live/LinuxPtraceProc.java +++ b/frysk-core/frysk/proc/live/LinuxPtraceProc.java @@ -197,8 +197,6 @@ public class LinuxPtraceProc extends LiveProc { if (cmdLine == null) { class BuildCmdLine extends CmdLineBuilder { String[] argv; - public void buildBuffer (byte[] buf) { - } public void buildArgv (String[] argv) { this.argv = argv; } diff --git a/frysk-sys/frysk/sys/proc/ChangeLog b/frysk-sys/frysk/sys/proc/ChangeLog index cabdfac..0bf727e 100644 --- a/frysk-sys/frysk/sys/proc/ChangeLog +++ b/frysk-sys/frysk/sys/proc/ChangeLog @@ -1,5 +1,10 @@ 2008-05-20 Andrew Cagney + * jni/CmdLineBuilder.cxx: Implement. + * CmdLineBuilder.java (buildBuffer(byte[])): Delete. + * TestCmdLine.java: Update. + * cni/CmdLineBuilder.cxx: Update. + * jni/AuxvBuilder.cxx: Implement. 2008-05-14 Andrew Cagney diff --git a/frysk-sys/frysk/sys/proc/CmdLineBuilder.java b/frysk-sys/frysk/sys/proc/CmdLineBuilder.java index 61a9a7a..9869dbc 100644 --- a/frysk-sys/frysk/sys/proc/CmdLineBuilder.java +++ b/frysk-sys/frysk/sys/proc/CmdLineBuilder.java @@ -72,12 +72,6 @@ public abstract class CmdLineBuilder { public final native boolean construct (byte[] cmdline); /** - * Called with the raw byte buffer slurped by {@link - * #construct(int)}. - */ - abstract public void buildBuffer (byte[] cmdline); - - /** * Build the argument vector corresponding to cmdline. */ abstract public void buildArgv (String[] argv); diff --git a/frysk-sys/frysk/sys/proc/TestCmdLine.java b/frysk-sys/frysk/sys/proc/TestCmdLine.java index f108d34..a7f8a08 100644 --- a/frysk-sys/frysk/sys/proc/TestCmdLine.java +++ b/frysk-sys/frysk/sys/proc/TestCmdLine.java @@ -60,9 +60,6 @@ public class TestCmdLine extends CmdLineBuilder { String[] argv; - public void buildBuffer (byte[] auxv) - { - } public void buildArgv (String[] argv) { this.argv = argv; diff --git a/frysk-sys/frysk/sys/proc/cni/CmdLineBuilder.cxx b/frysk-sys/frysk/sys/proc/cni/CmdLineBuilder.cxx index a7dc5f7..7798feb 100644 --- a/frysk-sys/frysk/sys/proc/cni/CmdLineBuilder.cxx +++ b/frysk-sys/frysk/sys/proc/cni/CmdLineBuilder.cxx @@ -1,6 +1,6 @@ // This file is part of the program FRYSK. // -// Copyright 2006, Red Hat Inc. +// Copyright 2006, 2008, Red Hat Inc. // // FRYSK is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by @@ -50,7 +50,6 @@ frysk::sys::proc::CmdLineBuilder::construct (jint pid) jbyteArray buf = slurp (pid, "cmdline"); if (buf == NULL) return false; - buildBuffer (buf); return construct (buf); } diff --git a/frysk-sys/frysk/sys/proc/jni/CmdLineBuilder.cxx b/frysk-sys/frysk/sys/proc/jni/CmdLineBuilder.cxx index b358932..8a432db 100644 --- a/frysk-sys/frysk/sys/proc/jni/CmdLineBuilder.cxx +++ b/frysk-sys/frysk/sys/proc/jni/CmdLineBuilder.cxx @@ -1,6 +1,6 @@ // This file is part of the program FRYSK. // -// Copyright 2008, Red Hat Inc. +// Copyright 2006, 2008, Red Hat Inc. // // FRYSK is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by @@ -38,3 +38,55 @@ // exception. #include "jni.hxx" + +#include "jnixx/exceptions.hxx" +#include "jnixx/elements.hxx" + +using namespace java::lang; + +static bool +construct(jnixx::env env, frysk::sys::proc::CmdLineBuilder* builder, + Bytes& bytes) { + // Count the number of parameters. + int argc = 0; + for (int i = 0; i < bytes.length; i++) { + if (bytes.elements[i] == '\0') + argc++; + } + + // Create the array. + jnixx::array argv + = jnixx::array::NewObjectArray(env, argc); + + // Copy over the strings. + int start = 0; + argc = 0; + for (int i = 0; i < bytes.length; i++) { + if (bytes.elements[i] == '\0') { + argv.SetObjectArrayElement(env, argc, String::NewStringUTF(env, (const char*)bytes.elements + start)); + start = i + 1; + argc++; + } + } + builder->buildArgv(env, argv); + return true; +} + +bool +frysk::sys::proc::CmdLineBuilder::construct(jnixx::env env, jint pid) { + FileBytes bytes = FileBytes(env, pid, "cmdline"); + if (bytes.elements == NULL) + return false; + bool ok = ::construct(env, this, bytes); + bytes.release(); + return ok; +} + +bool +frysk::sys::proc::CmdLineBuilder::construct(jnixx::env env, + jnixx::byteArray buf) { + ArrayBytes bytes = ArrayBytes(env, buf); + bool ok = ::construct(env, this, bytes); + bytes.release(); + return ok; +} hooks/post-receive -- frysk system monitor/debugger