From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8470 invoked by alias); 21 Jun 2008 03:42:16 -0000 Received: (qmail 8438 invoked by uid 367); 21 Jun 2008 03:42:16 -0000 Date: Sat, 21 Jun 2008 03:42:00 -0000 Message-ID: <20080621034216.8422.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: In ProcBuilder, catch any Throwable; Make FileElements return NULL when no file. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 96412cf7f66a603e6ba048433317aed31c8b1543 X-Git-Newrev: 5539327049ca4af57908f6bd0e90196a20378395 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/msg00396.txt.bz2 The branch, master has been updated via 5539327049ca4af57908f6bd0e90196a20378395 (commit) from 96412cf7f66a603e6ba048433317aed31c8b1543 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 5539327049ca4af57908f6bd0e90196a20378395 Author: Andrew Cagney Date: Fri Jun 20 23:38:33 2008 -0400 In ProcBuilder, catch any Throwable; Make FileElements return NULL when no file. frysk-sys/frysk/sys/proc/ChangeLog 2008-06-20 Andrew Cagney * jni/ProcBuilder.cxx (ProcBuilder::construct): Catch a Throwable. * jni/ProcBuilder.cxx (ProcBuilder::construct): Ditto. frysk-sys/jnixx/ChangeLog 2008-06-20 Andrew Cagney * elements.hxx (slurp): Return the BUF. (FileElements::slurp): Update. * elements.cxx (slurp): Update; when file-not-found return NULL. ----------------------------------------------------------------------- Summary of changes: frysk-sys/frysk/sys/proc/ChangeLog | 5 +++++ frysk-sys/frysk/sys/proc/cni/ProcBuilder.cxx | 4 ++-- frysk-sys/frysk/sys/proc/jni/ProcBuilder.cxx | 4 ++-- frysk-sys/jnixx/ChangeLog | 6 ++++++ frysk-sys/jnixx/elements.cxx | 14 +++++++------- frysk-sys/jnixx/elements.hxx | 11 ++++++++--- 6 files changed, 30 insertions(+), 14 deletions(-) First 500 lines of diff: diff --git a/frysk-sys/frysk/sys/proc/ChangeLog b/frysk-sys/frysk/sys/proc/ChangeLog index 79c61d4..b6ac106 100644 --- a/frysk-sys/frysk/sys/proc/ChangeLog +++ b/frysk-sys/frysk/sys/proc/ChangeLog @@ -1,3 +1,8 @@ +2008-06-20 Andrew Cagney + + * jni/ProcBuilder.cxx (ProcBuilder::construct): Catch a Throwable. + * jni/ProcBuilder.cxx (ProcBuilder::construct): Ditto. + 2008-06-12 Andrew Cagney * Exe.java (getName): Rename get. diff --git a/frysk-sys/frysk/sys/proc/cni/ProcBuilder.cxx b/frysk-sys/frysk/sys/proc/cni/ProcBuilder.cxx index 20c09e6..2b0bc85 100644 --- a/frysk-sys/frysk/sys/proc/cni/ProcBuilder.cxx +++ b/frysk-sys/frysk/sys/proc/cni/ProcBuilder.cxx @@ -97,9 +97,9 @@ frysk::sys::proc::ProcBuilder::construct(jint pid, frysk::rsl::Log* warning) { try { build(frysk::sys::ProcessIdentifierFactory::create(id)); - } catch (java::lang::RuntimeException *e) { + } catch (java::lang::Throwable *t) { ::closedir(proc); - throw e; + throw t; } } diff --git a/frysk-sys/frysk/sys/proc/jni/ProcBuilder.cxx b/frysk-sys/frysk/sys/proc/jni/ProcBuilder.cxx index 866dfd1..2cc52ae 100644 --- a/frysk-sys/frysk/sys/proc/jni/ProcBuilder.cxx +++ b/frysk-sys/frysk/sys/proc/jni/ProcBuilder.cxx @@ -92,9 +92,9 @@ frysk::sys::proc::ProcBuilder::construct(::jnixx::env env, jint pid, try { build(env, frysk::sys::ProcessIdentifierFactory::create(env, id)); - } catch (java::lang::RuntimeException *e) { + } catch (java::lang::Throwable t) { ::closedir(proc); - throw e; + throw t; } } diff --git a/frysk-sys/jnixx/ChangeLog b/frysk-sys/jnixx/ChangeLog index 8a2673e..d9ce902 100644 --- a/frysk-sys/jnixx/ChangeLog +++ b/frysk-sys/jnixx/ChangeLog @@ -1,3 +1,9 @@ +2008-06-20 Andrew Cagney + + * elements.hxx (slurp): Return the BUF. + (FileElements::slurp): Update. + * elements.cxx (slurp): Update; when file-not-found return NULL. + 2008-06-12 Andrew Cagney * exceptions.cxx (userException): Implement. diff --git a/frysk-sys/jnixx/elements.cxx b/frysk-sys/jnixx/elements.cxx index 4a432ae..4200f2f 100644 --- a/frysk-sys/jnixx/elements.cxx +++ b/frysk-sys/jnixx/elements.cxx @@ -102,12 +102,13 @@ chars2strings(::jnixx::env env, char** argv) { return strings; } -void -slurp(jnixx::env env, const char file[], jbyte*& buf, jsize& len) { +jbyte* +slurp(jnixx::env env, const char file[], jsize& len) { // Attempt to open the file. int fd = ::open(file, O_RDONLY); if (fd < 0) { - errnoException(env, errno, "open", "file %s", file); + len = 0; + return NULL; } // Initially allocate space for two BUFSIZE reads (and an extra NUL @@ -117,7 +118,7 @@ slurp(jnixx::env env, const char file[], jbyte*& buf, jsize& len) { // reads are needed to confirm EOF. Allocating 2&BUFSIZE ensures // that there's always space for at least two reads. Ref SW #3370 jsize allocated = BUFSIZ * 2 + 1; - buf = (jbyte*) ::malloc(allocated); + jbyte* buf = (jbyte*) ::malloc(allocated); if (buf == NULL) { errnoException(env, errno, "malloc"); } @@ -131,9 +132,8 @@ slurp(jnixx::env env, const char file[], jbyte*& buf, jsize& len) { ::close(fd); ::free(buf); // Abandon the read with elements == NULL. - buf = NULL; len = 0; - return; + return NULL; } else if (size == 0) { break; } @@ -149,7 +149,6 @@ slurp(jnixx::env env, const char file[], jbyte*& buf, jsize& len) { int err = errno; ::close(fd); ::free(buf); - buf = NULL; len = 0; errnoException(env, err, "realloc"); } @@ -162,4 +161,5 @@ slurp(jnixx::env env, const char file[], jbyte*& buf, jsize& len) { // Guarentee that the buffer is NUL terminated; but don't count that // as part of the buffer. buf[len] = '\0'; + return buf; } diff --git a/frysk-sys/jnixx/elements.hxx b/frysk-sys/jnixx/elements.hxx index 75f137f..dcf8109 100644 --- a/frysk-sys/jnixx/elements.hxx +++ b/frysk-sys/jnixx/elements.hxx @@ -49,7 +49,13 @@ extern char** strings2chars(::jnixx::env, ::jnixx::array); extern ::jnixx::array chars2strings(::jnixx::env, char**); -extern void slurp(::jnixx::env, const char[], jbyte* (&), jsize&); + +/** + * Attempt to read the entire contents of the specified file. Return + * BUF and set LEN, or NULL should the open fail. The BUF will be NUL + * terminated but the NUL will not be included in the character count. + */ +extern jbyte* slurp(::jnixx::env, const char file[], jsize& len); class StringArrayChars { private: @@ -239,9 +245,8 @@ public: } protected: void slurp(jnixx::env& env, type* (&buf), jsize &len) { - jbyte* buffer; jsize length; - ::slurp(env, file, buffer, length); + jbyte* buffer = ::slurp(env, file, length); buf = (type*)buffer; len = length / sizeof(type); } hooks/post-receive -- frysk system monitor/debugger