diff options
author | Max Kellermann <max@duempel.org> | 2014-03-01 20:53:39 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-03-01 20:53:39 +0100 |
commit | 5268f55344229f70e3565f63671eb582eaff733f (patch) | |
tree | f16f39a0847ea56b03db8892c3368251e4f2b3bf /src/java/File.cxx | |
parent | e44c9a000d477ba9fd24bd77ab4b529001dd3bde (diff) | |
download | mpd-5268f55344229f70e3565f63671eb582eaff733f.tar.gz mpd-5268f55344229f70e3565f63671eb582eaff733f.tar.xz mpd-5268f55344229f70e3565f63671eb582eaff733f.zip |
java/File: add method ToAbsolutePath() returning AllocatedPath
Diffstat (limited to '')
-rw-r--r-- | src/java/File.cxx | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/java/File.cxx b/src/java/File.cxx index 03e3defdf..8e9599dfc 100644 --- a/src/java/File.cxx +++ b/src/java/File.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2012 Max Kellermann <max@duempel.org> + * Copyright (C) 2010-2014 Max Kellermann <max@duempel.org> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -27,8 +27,13 @@ * OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "config.h" #include "File.hxx" #include "Class.hxx" +#include "String.hxx" +#include "Object.hxx" +#include "fs/AllocatedPath.hxx" +#include "fs/Limits.hxx" jmethodID Java::File::getAbsolutePath_method; @@ -40,3 +45,23 @@ Java::File::Initialise(JNIEnv *env) getAbsolutePath_method = env->GetMethodID(cls, "getAbsolutePath", "()Ljava/lang/String;"); } + +AllocatedPath +Java::File::ToAbsolutePath(JNIEnv *env, jobject _file) +{ + assert(env != nullptr); + assert(_file != nullptr); + + LocalObject file(env, _file); + + const jstring path = getAbsolutePath(env, file); + if (path == nullptr) { + env->ExceptionClear(); + return AllocatedPath::Null(); + } + + Java::String path2(env, path); + char buffer[MPD_PATH_MAX]; + path2.CopyTo(env, buffer, sizeof(buffer)); + return AllocatedPath::FromUTF8(buffer); +} |