java/File: add method ToAbsolutePath() returning AllocatedPath

This commit is contained in:
Max Kellermann
2014-03-01 20:53:39 +01:00
parent e44c9a000d
commit 5268f55344
5 changed files with 67 additions and 60 deletions

@ -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);
}

@ -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
@ -34,6 +34,8 @@
#include <jni.h>
class AllocatedPath;
namespace Java {
/**
* Wrapper for a java.io.File object.
@ -42,12 +44,22 @@ namespace Java {
static jmethodID getAbsolutePath_method;
public:
gcc_nonnull_all
static void Initialise(JNIEnv *env);
gcc_nonnull_all
static jstring getAbsolutePath(JNIEnv *env, jobject file) {
return (jstring)env->CallObjectMethod(file,
getAbsolutePath_method);
}
/**
* Invoke File.getAbsolutePath() and release the
* specified File reference.
*/
gcc_pure gcc_nonnull_all
static AllocatedPath ToAbsolutePath(JNIEnv *env,
jobject file);
};
}