Index: subversion/bindings/java/javahl/native/SVNClient.cpp =================================================================== --- subversion/bindings/java/javahl/native/SVNClient.cpp (revision 18700) +++ subversion/bindings/java/javahl/native/SVNClient.cpp (working copy) @@ -3785,3 +3785,17 @@ } return ret; } + +jboolean SVNClient::isValidPath(const char *name) +{ + Pool requestPool; + svn_error_t *error = svn_path_check_valid(name, requestPool.pool()); + if(error == SVN_NO_ERROR) + { + return JNI_TRUE; + } + // free the error and return false + svn_error_clear(error); + return JNI_FALSE; +} + Index: subversion/bindings/java/javahl/native/org_tigris_subversion_javahl_SVNClient.cpp =================================================================== --- subversion/bindings/java/javahl/native/org_tigris_subversion_javahl_SVNClient.cpp (revision 18700) +++ subversion/bindings/java/javahl/native/org_tigris_subversion_javahl_SVNClient.cpp (working copy) @@ -1838,3 +1838,22 @@ // No standard JNIEntry here, because this call initializes everthing JNIUtil::JNIGlobalInit(env); } + +JNIEXPORT jboolean JNICALL Java_org_tigris_subversion_javahl_SVNClient_isValidPath + (JNIEnv* env, jobject jthis, jstring jname) +{ + JNIEntry(Client, isValidPath); + SVNClient *cl = SVNClient::getCppObject(jthis); + if (cl == NULL) + { + JNIUtil::throwError(_("bad c++ this")); + return JNI_FALSE; + } + JNIStringHolder name(jname); + if (JNIUtil::isExceptionThrown()) + { + return JNI_FALSE; + } + return cl->isValidPath(name); +} + Index: subversion/bindings/java/javahl/native/SVNClient.h =================================================================== --- subversion/bindings/java/javahl/native/SVNClient.h (revision 18700) +++ subversion/bindings/java/javahl/native/SVNClient.h (working copy) @@ -147,6 +147,7 @@ SVNClient(); virtual ~SVNClient(); static jobject createJavaLock(const svn_lock_t *lock); + jboolean isValidPath(const char *name); private: static svn_error_t * checkCancel(void *cancelBaton); void propertySet(const char *path, const char *name, @@ -190,7 +191,6 @@ const svn_info_t *info, apr_pool_t *pool); static jobject createJavaInfo2(const char *path, const svn_info_t *info); - }; // !defined(AFX_SVNCLIENT_H__B5A135CD_3D7C_4ABC_8D75_643B14507979__INCLUDED_) #endif Index: subversion/bindings/java/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java =================================================================== --- subversion/bindings/java/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java (revision 18700) +++ subversion/bindings/java/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java (working copy) @@ -868,4 +868,6 @@ */ String getVersionInfo(String path, String trailUrl, boolean lastChanged) throws ClientException; + + boolean isValidPath(String name) throws ClientException; } Index: subversion/bindings/java/javahl/src/org/tigris/subversion/javahl/SVNClient.java =================================================================== --- subversion/bindings/java/javahl/src/org/tigris/subversion/javahl/SVNClient.java (revision 18700) +++ subversion/bindings/java/javahl/src/org/tigris/subversion/javahl/SVNClient.java (working copy) @@ -1128,4 +1128,6 @@ * NativeResources.loadNativeLibrary */ static native void initNative(); + + public native boolean isValidPath(String name); } Index: subversion/bindings/java/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java =================================================================== --- subversion/bindings/java/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java (revision 18700) +++ subversion/bindings/java/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java (working copy) @@ -1458,4 +1458,13 @@ } } + public boolean isValidPath(String name) + { + synchronized(clazz) + { + return worker.isValidPath(name); + } + } + + }