/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ART_LIBDEXFILE_EXTERNAL_INCLUDE_ART_API_DEX_FILE_EXTERNAL_H_
#define ART_LIBDEXFILE_EXTERNAL_INCLUDE_ART_API_DEX_FILE_EXTERNAL_H_
// Dex file external API
#include <sys/types.h>
#ifdef __cplusplus
extern "C" {
#endif
// This is the stable C ABI that backs art_api::dex below. Structs and functions
// may only be added here. C++ users should use dex_file_support.h instead.
// Opaque wrapper for an std::string allocated in libdexfile which must be freed
// using ExtDexFileFreeString.
struct ExtDexFileString;
// Returns an ExtDexFileString initialized to the given string.
const struct ExtDexFileString* ExtDexFileMakeString(const char* str, size_t size);
// Returns a pointer to the underlying null-terminated character array and its
// size for the given ExtDexFileString.
const char* ExtDexFileGetString(const struct ExtDexFileString* ext_string, /*out*/ size_t* size);
// Frees an ExtDexFileString.
void ExtDexFileFreeString(const struct ExtDexFileString* ext_string);
struct ExtDexFileMethodInfo {
int32_t offset;
int32_t len;
const struct ExtDexFileString* name;
};
struct ExtDexFile;
// See art_api::dex::DexFile::OpenFromMemory. Returns true on success.
int ExtDexFileOpenFromMemory(const void* addr,
/*inout*/ size_t* size,
const char* location,
/*out*/ const struct ExtDexFileString** error_msg,
/*out*/ struct ExtDexFile** ext_dex_file);
// See art_api::dex::DexFile::OpenFromFd. Returns true on success.
int ExtDexFileOpenFromFd(int fd,
off_t offset,
const char* location,
/*out*/ const struct ExtDexFileString** error_msg,
/*out*/ struct ExtDexFile** ext_dex_file);
// See art_api::dex::DexFile::GetMethodInfoForOffset. Returns true on success.
int ExtDexFileGetMethodInfoForOffset(struct ExtDexFile* ext_dex_file,
int64_t dex_offset,
int with_signature,
/*out*/ struct ExtDexFileMethodInfo* method_info);
typedef void ExtDexFileMethodInfoCallback(const struct ExtDexFileMethodInfo* ext_method_info,
void* user_data);
// See art_api::dex::DexFile::GetAllMethodInfos.
void ExtDexFileGetAllMethodInfos(struct ExtDexFile* ext_dex_file,
int with_signature,
ExtDexFileMethodInfoCallback* method_info_cb,
void* user_data);
// Frees an ExtDexFile.
void ExtDexFileFree(struct ExtDexFile* ext_dex_file);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // ART_LIBDEXFILE_EXTERNAL_INCLUDE_ART_API_DEX_FILE_EXTERNAL_H_