In the show_member_offset() function, when trying to handle function
pointers, the case for "(*" is handled.  However, if the function
pointer returns a pointer or a pointer to a pointer, then the
condition is unhandled.  This results in the offset not being printed.

Fix by first checking if the member is potentially a function pointer,
then checking if it returns a pointer or a pointer to a pointer.

Signed-off-by: John Pittman <[email protected]>
---
 symbols.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/symbols.c b/symbols.c
index a2d5c6c..5d7da6e 100644
--- a/symbols.c
+++ b/symbols.c
@@ -8356,8 +8356,15 @@ show_member_offset(FILE *ofp, struct datatype_member 
*dm, char *inbuf)
                }
        } else if (c) { 
                for (i = 0; i < c; i++) {
-                       if (STRNEQ(arglist[i], "(*")) {
-                               target = arglist[i]+2;
+                       if (strstr(inbuf, "(*")) {
+                               if (STRNEQ(arglist[i], "(*"))
+                                       target = arglist[i]+2;
+                               else if (STRNEQ(arglist[i], "*(*"))
+                                       target = arglist[i]+3;
+                               else if (STRNEQ(arglist[i], "**(*"))
+                                       target = arglist[i]+4;
+                               else
+                                       continue;
                                if (!(t1 = strstr(target, ")")))
                                        continue;
                                *t1 = NULLCHAR;
-- 
2.17.2

--
Crash-utility mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/crash-utility

Reply via email to