From 8416b9e5bd14a4f8cf6f95c373219604f205f031 Mon Sep 17 00:00:00 2001
From: Mitchel Humpherys <mitchelh@codeaurora.org>
Date: Fri, 4 Sep 2015 14:40:43 -0700
Subject: [PATCH] lrdp-v2: Introduce function to read C strings from structures

In lieu of a more generic way of reading fields from structures,
introduce another specialized structure field reader for reading C
strings.

Change-Id: I6aba392f59179fa70a065a08f19a694e87f683dd
---
 linux-ramdump-parser-v2/ramdump.py | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/linux-ramdump-parser-v2/ramdump.py b/linux-ramdump-parser-v2/ramdump.py
index 5abe6a6..021503b 100644
--- a/linux-ramdump-parser-v2/ramdump.py
+++ b/linux-ramdump-parser-v2/ramdump.py
@@ -1164,6 +1164,16 @@ class RamDump():
                                                                   field))
         return None
 
+    def read_structure_cstring(self, addr_or_name, struct_name, field,
+                               max_length=100):
+        """reads a C string from a structure field.  The C string field will be
+        dereferenced before reading, so it should be a `char *', not a
+        `char []'.
+        """
+        virt = self.resolve_virt(addr_or_name)
+        cstring_addr = virt + self.field_offset(struct_name, field)
+        return self.read_cstring(self.read_pointer(cstring_addr), max_length)
+
     def read_cstring(self, addr_or_name, max_length, virtual=True, cpu=None):
         addr = addr_or_name
         if virtual:
-- 
GitLab