diff --git a/frida/_frida/extension.c b/frida/_frida/extension.c index 1aa8104..7526088 100644 --- a/frida/_frida/extension.c +++ b/frida/_frida/extension.c @@ -535,6 +535,7 @@ static gboolean PyCompiler_set_options (FridaCompilerOptions * options, const gc const gchar * bundle_format_value, const gchar * type_check_value, const gchar * source_maps_value, const gchar * compression_value); static int PyPackageManager_init (PyPackageManager * self, PyObject * args, PyObject * kw); +static PyObject * PyPackageManager_repr (PyPackageManager * self); static PyObject * PyPackageManager_search (PyPackageManager * self, PyObject * args, PyObject * kw); static PyObject * PyPackageManager_install (PyPackageManager * self, PyObject * args, PyObject * kw); static FridaPackageInstallOptions * PyPackageManager_parse_install_options (const gchar * project_root, PyObject * specs_value); @@ -543,16 +544,19 @@ static PyObject * PyPackage_new_take_handle (FridaPackage * handle); static int PyPackage_init (PyPackage * self, PyObject * args, PyObject * kw); static void PyPackage_init_from_handle (PyPackage * self, FridaPackage * handle); static void PyPackage_dealloc (PyPackage * self); +static PyObject * PyPackage_repr (PyPackage * self); static PyObject * PyPackageSearchResult_new_take_handle (FridaPackageSearchResult * handle); static int PyPackageSearchResult_init (PyPackageSearchResult * self, PyObject * args, PyObject * kw); static void PyPackageSearchResult_init_from_handle (PyPackageSearchResult * self, FridaPackageSearchResult * handle); static void PyPackageSearchResult_dealloc (PyPackageSearchResult * self); +static PyObject * PyPackageSearchResult_repr (PyPackageSearchResult * self); static PyObject * PyPackageInstallResult_new_take_handle (FridaPackageInstallResult * handle); static int PyPackageInstallResult_init (PyPackageInstallResult * self, PyObject * args, PyObject * kw); static void PyPackageInstallResult_init_from_handle (PyPackageInstallResult * self, FridaPackageInstallResult * handle); static void PyPackageInstallResult_dealloc (PyPackageInstallResult * self); +static PyObject * PyPackageInstallResult_repr (PyPackageInstallResult * self); static int PyFileMonitor_init (PyFileMonitor * self, PyObject * args, PyObject * kw); static PyObject * PyFileMonitor_enable (PyFileMonitor * self); @@ -959,6 +963,7 @@ PYFRIDA_DEFINE_TYPE ("_frida.Compiler", Compiler, GObject, NULL, frida_unref, PYFRIDA_DEFINE_TYPE ("_frida.PackageManager", PackageManager, GObject, NULL, frida_unref, { Py_tp_doc, "Frida Package Manager" }, { Py_tp_init, PyPackageManager_init }, + { Py_tp_repr, PyPackageManager_repr }, { Py_tp_methods, PyPackageManager_methods }, ); @@ -966,6 +971,7 @@ PYFRIDA_DEFINE_TYPE ("_frida.Package", Package, GObject, PyPackage_init_from_han { Py_tp_doc, "Frida Package" }, { Py_tp_init, PyPackage_init }, { Py_tp_dealloc, PyPackage_dealloc }, + { Py_tp_repr, PyPackage_repr }, { Py_tp_members, PyPackage_members }, ); @@ -973,6 +979,7 @@ PYFRIDA_DEFINE_TYPE ("_frida.PackageSearchResult", PackageSearchResult, GObject, { Py_tp_doc, "Frida Package Search Result" }, { Py_tp_init, PyPackageSearchResult_init }, { Py_tp_dealloc, PyPackageSearchResult_dealloc }, + { Py_tp_repr, PyPackageSearchResult_repr }, { Py_tp_members, PyPackageSearchResult_members }, ); @@ -980,6 +987,7 @@ PYFRIDA_DEFINE_TYPE ("_frida.PackageInstallResult", PackageInstallResult, GObjec { Py_tp_doc, "Frida Package Install Result" }, { Py_tp_init, PyPackageInstallResult_init }, { Py_tp_dealloc, PyPackageInstallResult_dealloc }, + { Py_tp_repr, PyPackageInstallResult_repr }, { Py_tp_members, PyPackageInstallResult_members }, ); @@ -5027,6 +5035,19 @@ PyPackageManager_init (PyPackageManager * self, PyObject * args, PyObject * kw) return 0; } +static PyObject * +PyPackageManager_repr (PyPackageManager * self) +{ + PyObject * result; + gchar * repr; + + repr = g_strdup_printf ("PackageManager(registry=\"%s\")", frida_package_manager_get_registry (PY_GOBJECT_HANDLE (self))); + result = PyUnicode_FromString (repr); + g_free (repr); + + return result; +} + static PyObject * PyPackageManager_search (PyPackageManager * self, PyObject * args, PyObject * kw) { @@ -5174,6 +5195,43 @@ PyPackage_dealloc (PyPackage * self) PyGObject_tp_dealloc ((PyObject *) self); } +static PyObject * +PyPackage_repr (PyPackage * self) +{ + PyObject * result; + FridaPackage * handle; + GString * repr; + const gchar * description, * url; + + handle = PY_GOBJECT_HANDLE (self); + + repr = g_string_sized_new (256); + + g_string_append_printf (repr, "Package(name=\"%s\", version=\"%s\"", + frida_package_get_name (handle), + frida_package_get_version (handle)); + + description = frida_package_get_description (handle); + if (description != NULL) + { + gchar * escaped = g_strescape (description, NULL); + g_string_append_printf (repr, ", description=\"%s\"", escaped); + g_free (escaped); + } + + url = frida_package_get_url (handle); + if (url != NULL) + g_string_append_printf (repr, ", url=\"%s\"", url); + + g_string_append (repr, ")"); + + result = PyUnicode_FromString (repr->str); + + g_string_free (repr, TRUE); + + return result; +} + static PyObject * PyPackageList_marshal (FridaPackageList * list) @@ -5223,6 +5281,30 @@ PyPackageSearchResult_dealloc (PyPackageSearchResult * self) PyGObject_tp_dealloc ((PyObject *) self); } +static PyObject * +PyPackageSearchResult_repr (PyPackageSearchResult * self) +{ + PyObject * result; + GString * repr; + gint num_packages; + + repr = g_string_new ("PackageSearchResult(packages="); + + num_packages = frida_package_list_size (frida_package_search_result_get_packages (PY_GOBJECT_HANDLE (self))); + if (num_packages != 0) + g_string_append_printf (repr, "[<%u package%s>]", num_packages, (num_packages == 1) ? "" : "s"); + else + g_string_append (repr, "[]"); + + g_string_append_printf (repr, ", total=%u)", self->total); + + result = PyUnicode_FromString (repr->str); + + g_string_free (repr, TRUE); + + return result; +} + static PyObject * PyPackageInstallResult_new_take_handle (FridaPackageInstallResult * handle) @@ -5255,6 +5337,30 @@ PyPackageInstallResult_dealloc (PyPackageInstallResult * self) PyGObject_tp_dealloc ((PyObject *) self); } +static PyObject * +PyPackageInstallResult_repr (PyPackageInstallResult * self) +{ + PyObject * result; + GString * repr; + gint num_packages; + + repr = g_string_new ("PackageInstallResult(packages="); + + num_packages = frida_package_list_size (frida_package_install_result_get_packages (PY_GOBJECT_HANDLE (self))); + if (num_packages != 0) + g_string_append_printf (repr, "[<%u package%s>]", num_packages, (num_packages == 1) ? "" : "s"); + else + g_string_append (repr, "[]"); + + g_string_append (repr, ")"); + + result = PyUnicode_FromString (repr->str); + + g_string_free (repr, TRUE); + + return result; +} + static int PyFileMonitor_init (PyFileMonitor * self, PyObject * args, PyObject * kw)