forked from Imagelibrary/binutils-gdb
libctf: add ctf_ref
This allows you to bump the refcount on a ctf_file_t, so that you can smuggle it out of iterators which open and close the ctf_file_t for you around the loop body (like ctf_archive_iter). You still can't use this to preserve a ctf_file_t for longer than the lifetime of its containing entity (e.g. ctf_archive). include/ * ctf-api.h (ctf_ref): New. libctf/ * libctf.ver (ctf_ref): New. * ctf-open.c (ctf_ref): Implement it.
This commit is contained in:
@@ -1,3 +1,7 @@
|
|||||||
|
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
|
||||||
|
|
||||||
|
* ctf-api.h (ctf_ref): New.
|
||||||
|
|
||||||
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
|
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
|
||||||
|
|
||||||
* ctf-api.h (ctf_archive_count): New.
|
* ctf-api.h (ctf_archive_count): New.
|
||||||
|
|||||||
@@ -285,6 +285,7 @@ extern ctf_file_t *ctf_simple_open (const char *, size_t, const char *, size_t,
|
|||||||
size_t, const char *, size_t, int *);
|
size_t, const char *, size_t, int *);
|
||||||
extern ctf_file_t *ctf_bufopen (const ctf_sect_t *, const ctf_sect_t *,
|
extern ctf_file_t *ctf_bufopen (const ctf_sect_t *, const ctf_sect_t *,
|
||||||
const ctf_sect_t *, int *);
|
const ctf_sect_t *, int *);
|
||||||
|
extern void ctf_ref (ctf_file_t *);
|
||||||
extern void ctf_file_close (ctf_file_t *);
|
extern void ctf_file_close (ctf_file_t *);
|
||||||
|
|
||||||
extern int ctf_arc_write (const char *, ctf_file_t **, size_t,
|
extern int ctf_arc_write (const char *, ctf_file_t **, size_t,
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
|
||||||
|
|
||||||
|
* libctf.ver (ctf_ref): New.
|
||||||
|
* ctf-open.c (ctf_ref): Implement it.
|
||||||
|
|
||||||
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
|
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
|
||||||
|
|
||||||
* ctf-inlines.h (ctf_forwardable_kind): New.
|
* ctf-inlines.h (ctf_forwardable_kind): New.
|
||||||
|
|||||||
@@ -1620,6 +1620,17 @@ bad:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Bump the refcount on the specified CTF container, to allow export of
|
||||||
|
ctf_file_t's from iterators that open and close the ctf_file_t around the
|
||||||
|
loop. (This does not extend their lifetime beyond that of the ctf_archive_t
|
||||||
|
in which they are contained.) */
|
||||||
|
|
||||||
|
void
|
||||||
|
ctf_ref (ctf_file_t *fp)
|
||||||
|
{
|
||||||
|
fp->ctf_refcnt++;
|
||||||
|
}
|
||||||
|
|
||||||
/* Close the specified CTF container and free associated data structures. Note
|
/* Close the specified CTF container and free associated data structures. Note
|
||||||
that ctf_file_close() is a reference counted operation: if the specified file
|
that ctf_file_close() is a reference counted operation: if the specified file
|
||||||
is the parent of other active containers, its reference count will be greater
|
is the parent of other active containers, its reference count will be greater
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ LIBCTF_1.0 {
|
|||||||
ctf_simple_open;
|
ctf_simple_open;
|
||||||
ctf_create;
|
ctf_create;
|
||||||
ctf_close;
|
ctf_close;
|
||||||
|
ctf_ref;
|
||||||
ctf_file_close;
|
ctf_file_close;
|
||||||
|
|
||||||
ctf_cuname;
|
ctf_cuname;
|
||||||
|
|||||||
Reference in New Issue
Block a user