aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Alcock <nick.alcock@oracle.com>2020-06-02 21:06:18 +0100
committerNick Alcock <nick.alcock@oracle.com>2020-07-22 17:57:36 +0100
commit01d9317436cd824306b9856861408a40bf8da36a (patch)
treec47b60aa0e7a9a0c42c1df872683cad7182fbed0
parent5ec7465fec8bceb477732d6757112fe162116eb8 (diff)
downloadgdb-01d9317436cd824306b9856861408a40bf8da36a.zip
gdb-01d9317436cd824306b9856861408a40bf8da36a.tar.gz
gdb-01d9317436cd824306b9856861408a40bf8da36a.tar.bz2
libctf: add ctf_type_name_raw
We already have a function ctf_type_aname_raw, which returns the raw name of a type with no decoration for structures or arrays or anything like that: just the underlying name of whatever it is that's being ultimately pointed at. But this can be inconvenient to use, becauswe it always allocates new storage for the string and copies it in, so it can potentially fail. Add ctf_type_name_raw, which just returns the string directly out of libctf's guts: it will live until the ctf_file_t is closed (if we later gain the ability to remove types from writable dicts, it will live as long as the type lives). Reimplement ctf_type_aname_raw in terms of it. include/ * ctf-api.c (ctf_type_name_raw): New. libctf/ * ctf-types.c (ctf_type_name_raw): New. (ctf_type_aname_raw): Reimplement accordingly.
-rw-r--r--include/ChangeLog4
-rw-r--r--include/ctf-api.h1
-rw-r--r--libctf/ChangeLog5
-rw-r--r--libctf/ctf-types.c23
-rw-r--r--libctf/libctf.ver1
5 files changed, 28 insertions, 6 deletions
diff --git a/include/ChangeLog b/include/ChangeLog
index f5be0c0..2acc42a 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,5 +1,9 @@
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
+ * ctf-api.c (ctf_type_name_raw): New.
+
+2020-07-22 Nick Alcock <nick.alcock@oracle.com>
+
* ctf-api.h (ECTF_*): Improve comments.
(ECTF_NERR): New.
diff --git a/include/ctf-api.h b/include/ctf-api.h
index 2e3e28b..363b5c2 100644
--- a/include/ctf-api.h
+++ b/include/ctf-api.h
@@ -324,6 +324,7 @@ extern char *ctf_type_aname (ctf_file_t *, ctf_id_t);
extern char *ctf_type_aname_raw (ctf_file_t *, ctf_id_t);
extern ssize_t ctf_type_lname (ctf_file_t *, ctf_id_t, char *, size_t);
extern char *ctf_type_name (ctf_file_t *, ctf_id_t, char *, size_t);
+extern const char *ctf_type_name_raw (ctf_file_t *, ctf_id_t);
extern ssize_t ctf_type_size (ctf_file_t *, ctf_id_t);
extern ssize_t ctf_type_align (ctf_file_t *, ctf_id_t);
extern int ctf_type_kind (ctf_file_t *, ctf_id_t);
diff --git a/libctf/ChangeLog b/libctf/ChangeLog
index 4879804..1754baf 100644
--- a/libctf/ChangeLog
+++ b/libctf/ChangeLog
@@ -1,5 +1,10 @@
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
+ * ctf-types.c (ctf_type_name_raw): New.
+ (ctf_type_aname_raw): Reimplement accordingly.
+
+2020-07-22 Nick Alcock <nick.alcock@oracle.com>
+
* ctf-subr.c (ctf_dprintf): _libctf_debug is unlikely to be set.
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
diff --git a/libctf/ctf-types.c b/libctf/ctf-types.c
index db42b9e..ce3890c 100644
--- a/libctf/ctf-types.c
+++ b/libctf/ctf-types.c
@@ -472,19 +472,30 @@ ctf_type_name (ctf_file_t *fp, ctf_id_t type, char *buf, size_t len)
return (rv >= 0 && (size_t) rv < len ? buf : NULL);
}
-/* Lookup the given type ID and return its raw, unadorned, undecorated name as a
- new dynamcally-allocated string. */
+/* Lookup the given type ID and return its raw, unadorned, undecorated name.
+ The name will live as long as its ctf_file_t does. */
-char *
-ctf_type_aname_raw (ctf_file_t *fp, ctf_id_t type)
+const char *
+ctf_type_name_raw (ctf_file_t *fp, ctf_id_t type)
{
const ctf_type_t *tp;
if ((tp = ctf_lookup_by_id (&fp, type)) == NULL)
return NULL; /* errno is set for us. */
- if (ctf_strraw (fp, tp->ctt_name) != NULL)
- return strdup (ctf_strraw (fp, tp->ctt_name));
+ return ctf_strraw (fp, tp->ctt_name);
+}
+
+/* Lookup the given type ID and return its raw, unadorned, undecorated name as a
+ new dynamically-allocated string. */
+
+char *
+ctf_type_aname_raw (ctf_file_t *fp, ctf_id_t type)
+{
+ const char *name = ctf_type_name_raw (fp, type);
+
+ if (name != NULL)
+ return strdup (name);
return NULL;
}
diff --git a/libctf/libctf.ver b/libctf/libctf.ver
index aad304b..30a0b08 100644
--- a/libctf/libctf.ver
+++ b/libctf/libctf.ver
@@ -57,6 +57,7 @@ LIBCTF_1.0 {
ctf_type_resolve;
ctf_type_lname;
ctf_type_name;
+ ctf_type_name_raw;
ctf_type_aname;
ctf_type_aname_raw;
ctf_type_size;