aboutsummaryrefslogtreecommitdiff
path: root/libs/kstd/gdb/string.py
blob: 2688061bd875227ff38b4c58cb0cdabec3cbd1e4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import gdb


class KstdStringPrinter:

    def __init__(self, val):
        self.__val = val

    def to_string(self):
        storage = self.__val["m_storage"]
        storage_size = int(storage["m_size"])

        if storage_size <= 0:
            return '""'

        data_pointer = storage["m_data"]
        string_length = storage_size - 1

        try:
            if hasattr(data_pointer, "lazy_string"):
                return data_pointer.lazy_string(encoding="utf-8", length=string_length)
            return data_pointer.string(encoding="utf-8", length=string_length)
        except gdb.error:
            return "<unreadable memory>"

    def display_hint(self):
        return "string"