You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pylucene-commits@lucene.apache.org by va...@apache.org on 2010/05/18 03:04:03 UTC
svn commit: r945445 - in /lucene/pylucene/branches/branch_3x/jcc: CHANGES
jcc/sources/JCCEnv.cpp jcc/sources/JCCEnv.h jcc/sources/jcc.cpp
Author: vajda
Date: Tue May 18 01:04:02 2010
New Revision: 945445
URL: http://svn.apache.org/viewvc?rev=945445&view=rev
Log:
added read-only env.classpath property
Modified:
lucene/pylucene/branches/branch_3x/jcc/CHANGES
lucene/pylucene/branches/branch_3x/jcc/jcc/sources/JCCEnv.cpp
lucene/pylucene/branches/branch_3x/jcc/jcc/sources/JCCEnv.h
lucene/pylucene/branches/branch_3x/jcc/jcc/sources/jcc.cpp
Modified: lucene/pylucene/branches/branch_3x/jcc/CHANGES
URL: http://svn.apache.org/viewvc/lucene/pylucene/branches/branch_3x/jcc/CHANGES?rev=945445&r1=945444&r2=945445&view=diff
==============================================================================
--- lucene/pylucene/branches/branch_3x/jcc/CHANGES (original)
+++ lucene/pylucene/branches/branch_3x/jcc/CHANGES Tue May 18 01:04:02 2010
@@ -18,6 +18,7 @@ Version 2.5 ->
- added JCC_VERSION string to modules using JCC
- added support for --resources
- added support for --import
+ - added read-only env.classpath property
-
Version 2.4 -> 2.5
Modified: lucene/pylucene/branches/branch_3x/jcc/jcc/sources/JCCEnv.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/branches/branch_3x/jcc/jcc/sources/JCCEnv.cpp?rev=945445&r1=945444&r2=945445&view=diff
==============================================================================
--- lucene/pylucene/branches/branch_3x/jcc/jcc/sources/JCCEnv.cpp (original)
+++ lucene/pylucene/branches/branch_3x/jcc/jcc/sources/JCCEnv.cpp Tue May 18 01:04:02 2010
@@ -709,6 +709,52 @@ void JCCEnv::setClassPath(const char *cl
free(path);
}
+char *JCCEnv::getClassPath()
+{
+ JNIEnv *vm_env = get_vm_env();
+ jclass _ucl = (jclass) vm_env->FindClass("java/net/URLClassLoader");
+ jclass _url = (jclass) vm_env->FindClass("java/net/URL");
+ jmethodID mid = vm_env->GetStaticMethodID(_ucl, "getSystemClassLoader",
+ "()Ljava/lang/ClassLoader;");
+ jobject classLoader = vm_env->CallStaticObjectMethod(_ucl, mid);
+ jmethodID gu = vm_env->GetMethodID(_ucl, "getURLs", "()[Ljava/net/URL;");
+ jmethodID gp = vm_env->GetMethodID(_url, "getPath", "()Ljava/lang/String;");
+#ifdef WINDOWS
+ char *pathsep = ";";
+#else
+ char *pathsep = ":";
+#endif
+ jobjectArray array = (jobjectArray)
+ vm_env->CallObjectMethod(classLoader, gu);
+ int count = array ? vm_env->GetArrayLength(array) : 0;
+ int first = 1, total = 0;
+ char *classpath = NULL;
+
+ for (int i = 0; i < count; i++) {
+ jobject url = vm_env->GetObjectArrayElement(array, i);
+ jstring path = (jstring) vm_env->CallObjectMethod(url, gp);
+ const char *chars = vm_env->GetStringUTFChars(path, NULL);
+ int size = vm_env->GetStringUTFLength(path);
+
+ total += size + 1;
+ if (classpath == NULL)
+ classpath = (char *) calloc(total, 1);
+ else
+ classpath = (char *) realloc(classpath, total);
+ if (classpath == NULL)
+ return NULL;
+
+ if (first)
+ first = 0;
+ else
+ strcat(classpath, pathsep);
+
+ strcat(classpath, chars);
+ }
+
+ return classpath;
+}
+
jstring JCCEnv::fromUTF(const char *bytes) const
{
jstring str = get_vm_env()->NewStringUTF(bytes);
Modified: lucene/pylucene/branches/branch_3x/jcc/jcc/sources/JCCEnv.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/branches/branch_3x/jcc/jcc/sources/JCCEnv.h?rev=945445&r1=945444&r2=945445&view=diff
==============================================================================
--- lucene/pylucene/branches/branch_3x/jcc/jcc/sources/JCCEnv.h (original)
+++ lucene/pylucene/branches/branch_3x/jcc/jcc/sources/JCCEnv.h Tue May 18 01:04:02 2010
@@ -286,6 +286,7 @@ public:
}
virtual void setClassPath(const char *classPath);
+ virtual char *getClassPath();
virtual jstring fromUTF(const char *bytes) const;
virtual char *toUTF(jstring str) const;
Modified: lucene/pylucene/branches/branch_3x/jcc/jcc/sources/jcc.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/branches/branch_3x/jcc/jcc/sources/jcc.cpp?rev=945445&r1=945444&r2=945445&view=diff
==============================================================================
--- lucene/pylucene/branches/branch_3x/jcc/jcc/sources/jcc.cpp (original)
+++ lucene/pylucene/branches/branch_3x/jcc/jcc/sources/jcc.cpp Tue May 18 01:04:02 2010
@@ -49,10 +49,12 @@ static PyObject *t_jccenv__addClassPath(
static PyObject *t_jccenv__get_jni_version(PyObject *self, void *data);
static PyObject *t_jccenv__get_java_version(PyObject *self, void *data);
+static PyObject *t_jccenv__get_classpath(PyObject *self, void *data);
static PyGetSetDef t_jccenv_properties[] = {
{ "jni_version", (getter) t_jccenv__get_jni_version, NULL, NULL, NULL },
{ "java_version", (getter) t_jccenv__get_java_version, NULL, NULL, NULL },
+ { "classpath", (getter) t_jccenv__get_classpath, NULL, NULL, NULL },
{ NULL, NULL, NULL, NULL, NULL }
};
@@ -293,6 +295,21 @@ static PyObject *t_jccenv__get_java_vers
return env->fromJString(env->getJavaVersion(), 1);
}
+static PyObject *t_jccenv__get_classpath(PyObject *self, void *data)
+{
+ char *classpath = env->getClassPath();
+
+ if (classpath)
+ {
+ PyObject *result = PyString_FromString(classpath);
+
+ free(classpath);
+ return result;
+ }
+
+ Py_RETURN_NONE;
+}
+
_DLL_EXPORT PyObject *getVMEnv(PyObject *self)
{
if (env->vm != NULL)