summaryrefslogtreecommitdiff
path: root/plugins/dex/class.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/dex/class.c')
-rw-r--r--plugins/dex/class.c38
1 files changed, 32 insertions, 6 deletions
diff --git a/plugins/dex/class.c b/plugins/dex/class.c
index 8a094d5..b5ec462 100644
--- a/plugins/dex/class.c
+++ b/plugins/dex/class.c
@@ -222,6 +222,7 @@ GDexClass *g_dex_class_new(GDexFormat *format, const class_def_item *def)
uleb128_t index; /* Conservation du dernier id */
uleb128_t i; /* Boucle de parcours */
GDexField *field; /* Champ chargé */
+ GDexPool *pool; /* Table de ressources */
GDataType *ctype; /* Type créé par la classe */
GBinFormat *base; /* Autre version du format */
GDexMethod *method; /* Méthode chargée */
@@ -291,7 +292,12 @@ GDexClass *g_dex_class_new(GDexFormat *format, const class_def_item *def)
* Chargement des méthodes de classe.
*/
- ctype = get_type_from_dex_pool(format, def->class_idx);
+ pool = g_dex_format_get_pool(format);
+
+ ctype = g_dex_pool_get_type_(pool, def->class_idx);
+
+ g_object_unref(G_OBJECT(pool));
+
if (ctype == NULL) goto gdcn_unknown_type;
base = G_BIN_FORMAT(format);
@@ -424,8 +430,13 @@ const class_data_item *g_dex_class_get_data(const GDexClass *class)
GDataType *g_dex_class_get_class_type(const GDexClass *class)
{
GDataType *result; /* Type à renvoyer */
+ GDexPool *pool; /* Table de ressources */
- result = get_type_from_dex_pool(class->format, class->definition.class_idx);
+ pool = g_dex_format_get_pool(class->format);
+
+ result = g_dex_pool_get_type_(pool, class->definition.class_idx);
+
+ g_object_unref(G_OBJECT(pool));
return result;
@@ -447,8 +458,13 @@ GDataType *g_dex_class_get_class_type(const GDexClass *class)
GDataType *g_dex_class_get_superclass_type(const GDexClass *class)
{
GDataType *result; /* Type à renvoyer */
+ GDexPool *pool; /* Table de ressources */
+
+ pool = g_dex_format_get_pool(class->format);
- result = get_type_from_dex_pool(class->format, class->definition.superclass_idx);
+ result = g_dex_pool_get_type_(pool, class->definition.superclass_idx);
+
+ g_object_unref(G_OBJECT(pool));
return result;
@@ -474,6 +490,7 @@ GDataType **g_dex_class_get_interface_types(const GDexClass *class, size_t *coun
vmpa2t addr; /* Tête de lecture générique */
type_list interfaces; /* Liste des interfaces */
bool status; /* Bilan d'une lecture */
+ GDexPool *pool; /* Table de ressources */
size_t i; /* Boucle de parcours */
if (class->definition.interfaces_off == 0)
@@ -491,10 +508,14 @@ GDataType **g_dex_class_get_interface_types(const GDexClass *class, size_t *coun
if (status)
{
*count = interfaces.size;
- result = (GDataType **)malloc(*count * sizeof(GDataType *));
+ result = malloc(*count * sizeof(GDataType *));
+
+ pool = g_dex_format_get_pool(class->format);
for (i = 0; i < *count; i++)
- result[i] = get_type_from_dex_pool(class->format, interfaces.list[i].type_idx);
+ result[i] = g_dex_pool_get_type_(pool, interfaces.list[i].type_idx);
+
+ g_object_unref(G_OBJECT(pool));
}
@@ -716,8 +737,13 @@ bool g_dex_method_get_offset(const GDexMethod *method, phys_t *offset)
const char *g_dex_class_get_source_file(const GDexClass *class)
{
const char *result; /* Trouvaille à renvoyer */
+ GDexPool *pool; /* Table de ressources */
+
+ pool = g_dex_format_get_pool(class->format);
+
+ result = g_dex_pool_get_string(pool, class->definition.source_file_idx, NULL);
- result = get_string_from_dex_pool(class->format, class->definition.source_file_idx, NULL);
+ g_object_unref(G_OBJECT(pool));
return result;