From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3369 invoked by alias); 8 May 2008 15:54:35 -0000 Received: (qmail 3343 invoked by uid 440); 8 May 2008 15:54:35 -0000 Date: Thu, 08 May 2008 15:54:00 -0000 Message-ID: <20080508155435.3327.qmail@sourceware.org> From: scox@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Add test for Environ. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 877c48d4c0643b1841a1f9a962389807d793018f X-Git-Newrev: b43f15763a7f3a1a2582e3bb48e3e5e6d980e0ea 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/msg00204.txt.bz2 The branch, master has been updated via b43f15763a7f3a1a2582e3bb48e3e5e6d980e0ea (commit) from 877c48d4c0643b1841a1f9a962389807d793018f (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit b43f15763a7f3a1a2582e3bb48e3e5e6d980e0ea Author: Stan Cox Date: Thu May 8 11:52:01 2008 -0400 Add test for Environ. * Environ.java (Environ(long)): New. (getEnvHash): New. * cni/Environ.cxx (getEnvironment(long)): New. (putEnvironment): Fix off by one error. * TestEnviron.java: New. ----------------------------------------------------------------------- Summary of changes: frysk-sys/frysk/sys/ChangeLog | 8 +++ frysk-sys/frysk/sys/Environ.java | 20 +++++++- .../sys/{cni/Environ.cxx => TestEnviron.java} | 55 ++++++++++---------- frysk-sys/frysk/sys/cni/Environ.cxx | 12 ++++- 4 files changed, 65 insertions(+), 30 deletions(-) copy frysk-sys/frysk/sys/{cni/Environ.cxx => TestEnviron.java} (68%) First 500 lines of diff: diff --git a/frysk-sys/frysk/sys/ChangeLog b/frysk-sys/frysk/sys/ChangeLog index 7478218..8de64b6 100644 --- a/frysk-sys/frysk/sys/ChangeLog +++ b/frysk-sys/frysk/sys/ChangeLog @@ -1,3 +1,11 @@ +2008-05-08 Stan Cox + + * Environ.java (Environ(long)): New. + (getEnvHash): New. + * cni/Environ.cxx (getEnvironment(long)): New. + (putEnvironment): Fix off by one error. + * TestEnviron.java: New. + 2008-05-07 Andrew Cagney * jni/AuditLibs.cxx: Include jni.hxx; fully qualify jnixx::env. diff --git a/frysk-sys/frysk/sys/Environ.java b/frysk-sys/frysk/sys/Environ.java index 328eab1..ffbec15 100644 --- a/frysk-sys/frysk/sys/Environ.java +++ b/frysk-sys/frysk/sys/Environ.java @@ -1,6 +1,6 @@ // This file is part of the program FRYSK. // -// Copyright 2007 Red Hat Inc. +// Copyright 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 @@ -58,6 +58,23 @@ public class Environ } /** + * Construct an environment hash given an existing environ. Used for testing + */ + Environ (long environ) + { + env = new HashMap(); + getEnvironment(environ); + } + + /** + * Get the environment hash. Used for testing + * @return the array of environment values. + */ + HashMap getEnvHash() { + return env; + } + + /** * Get an environment variable. * @param name is the environment variable name. * @return the value of the variable. @@ -106,5 +123,6 @@ public class Environ } native void getEnvironment(); + native void getEnvironment(long environ); native long putEnvironment(Object[] envs); } diff --git a/frysk-sys/frysk/sys/cni/Environ.cxx b/frysk-sys/frysk/sys/TestEnviron.java similarity index 68% copy from frysk-sys/frysk/sys/cni/Environ.cxx copy to frysk-sys/frysk/sys/TestEnviron.java index 9772dfd..4a5e050 100644 --- a/frysk-sys/frysk/sys/cni/Environ.cxx +++ b/frysk-sys/frysk/sys/TestEnviron.java @@ -37,37 +37,36 @@ // version and license this file solely under the GPL without // exception. -#include +package frysk.sys; -#include "frysk/sys/Environ.h" +import java.util.HashMap; +import java.util.Iterator; +import java.util.Set; +import frysk.junit.TestCase; -void -frysk::sys::Environ::getEnvironment() -{ - extern char **environ; - int env_idx; +/** + * Test environ support + */ +public class TestEnviron extends TestCase { - for (env_idx = 0; environ[env_idx]; env_idx++) - frysk::sys::Environ::addEnviron (JvNewStringUTF (environ[env_idx])); -} - -char **new_environ; - -jlong -frysk::sys::Environ::putEnvironment(jobjectArray envs) -{ - jstring* env_member = (jstring*)elements(envs); - int envs_length = JvGetArrayLength(envs); - new_environ = (char**)JvMalloc(sizeof(void*) * envs_length); - for (int i = 0; i < envs_length; i++) - { - int sym_len = env_member[i]->length (); - char *sym = (char*)JvMalloc(sym_len + 1); - JvGetStringUTFRegion (env_member[i], 0, sym_len, sym); - sym[sym_len] = '\0'; - new_environ[i] = sym; + public void testEnviron() { + Environ env1 = new Environ(); + // Grab the environment hash table + HashMap env1Hash = env1.getEnvHash(); + Set env1Keys = env1Hash.keySet(); + // Load the environment from the environment hash table + long environ = env1.putEnviron(); + // Create a new environment hash table from that environment + Environ env2 = new Environ(environ); + HashMap env2Hash = env2.getEnvHash(); + + // Ensure that both environment hash tables match + Iterator iterator = env1Keys.iterator(); + while(iterator.hasNext()){ + String key = (String) iterator.next(); + assertTrue ("env value test fails for key=" + key, + ((String)env1Hash.get(key)).compareTo((String)env2Hash.get(key)) == 0); + } } - new_environ[envs_length] = NULL; - return (jlong)new_environ; } diff --git a/frysk-sys/frysk/sys/cni/Environ.cxx b/frysk-sys/frysk/sys/cni/Environ.cxx index 9772dfd..839a861 100644 --- a/frysk-sys/frysk/sys/cni/Environ.cxx +++ b/frysk-sys/frysk/sys/cni/Environ.cxx @@ -52,6 +52,16 @@ frysk::sys::Environ::getEnvironment() frysk::sys::Environ::addEnviron (JvNewStringUTF (environ[env_idx])); } +void +frysk::sys::Environ::getEnvironment(jlong environ_p) +{ + int env_idx; + char ** environ = (char **) environ_p; + + for (env_idx = 0; environ[env_idx]; env_idx++) + frysk::sys::Environ::addEnviron (JvNewStringUTF (environ[env_idx])); +} + char **new_environ; jlong @@ -59,7 +69,7 @@ frysk::sys::Environ::putEnvironment(jobjectArray envs) { jstring* env_member = (jstring*)elements(envs); int envs_length = JvGetArrayLength(envs); - new_environ = (char**)JvMalloc(sizeof(void*) * envs_length); + new_environ = (char**)JvMalloc(sizeof(void*) * (envs_length + 1)); for (int i = 0; i < envs_length; i++) { int sym_len = env_member[i]->length (); hooks/post-receive -- frysk system monitor/debugger