summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/kakoune.py15
-rw-r--r--src/string.hh2
2 files changed, 10 insertions, 7 deletions
diff --git a/gdb/kakoune.py b/gdb/kakoune.py
index 726fc05a..6988e562 100644
--- a/gdb/kakoune.py
+++ b/gdb/kakoune.py
@@ -85,13 +85,16 @@ class String:
self.val = val
def to_string(self):
- data = self.val["m_data"]
- if (data["u"]["s"]["size"] & 1) != 1:
- ptr = data["u"]["l"]["ptr"]
- len = data["u"]["l"]["size"]
+ data_u = self.val["m_data"]["u"]
+ long = data_u["l"]
+ short = data_u["s"]
+ if (long["mode"] & long["active_mask"]) != 0:
+ ptr = long["ptr"]
+ len = long["size"]
else:
- ptr = data["u"]["s"]["string"]
- len = data["u"]["s"]["size"] >> 1
+ ptr = short["string"]
+ short_capacity = short
+ len = short["capacity"] - short["remaining_size"]
return "\"%s\"" % (ptr.string("utf-8", "ignore", len))
diff --git a/src/string.hh b/src/string.hh
index 677f01f5..fd1e5b74 100644
--- a/src/string.hh
+++ b/src/string.hh
@@ -184,7 +184,7 @@ public:
Data& operator=(const Data& other);
Data& operator=(Data&& other) noexcept;
- bool is_long() const { return (u.l.mode& Long::active_mask) > 0; }
+ bool is_long() const { return (u.l.mode & Long::active_mask) != 0; }
size_t size() const { return is_long() ? u.l.size : (Short::capacity - u.s.remaining_size); }
size_t capacity() const { return is_long() ? u.l.capacity : Short::capacity; }