From: Pedro Alves <palves@redhat.com>
To: Tom Tromey <tom@tromey.com>, gdb-patches@sourceware.org
Subject: Re: [RFA 2/8] Use class to manage BFD reference counts
Date: Fri, 02 Dec 2016 13:05:00 -0000 [thread overview]
Message-ID: <cce47d1e-b2e2-dcdf-5c36-b318ed1c77db@redhat.com> (raw)
In-Reply-To: <1480395946-10924-3-git-send-email-tom@tromey.com>
> @@ -10535,7 +10526,7 @@ open_dwo_file (const char *file_name, const char *comp_dir)
> is a list of paths. */
>
> if (*debug_file_directory == '\0')
> - return NULL;
> + return gdb_bfd_ref_ptr ();
This provides a good reason to have an implicit construction from nullptr_t.
You had it in the original gdbpy_reference submission, but I had asked
to remove it. If we add it back, these cases could be more clearly
written as "return NULL/nullptr". Could you do that, and then drop all
the hunks like:
> - return NULL;
> + return gdb_bfd_ref_ptr ();
?
> @@ -658,82 +654,70 @@ solib_aix_bfd_open (char *pathname)
> }
> filename_len = sep - pathname;
>
> - filename = xstrprintf ("%.*s", filename_len, pathname);
> - cleanup = make_cleanup (xfree, filename);
> - member_name = xstrprintf ("%.*s", path_len - filename_len - 2, sep + 1);
> - make_cleanup (xfree, member_name);
> + gdb::unique_xmalloc_ptr<char> filename
> + (xstrprintf ("%.*s", filename_len, pathname));
> + gdb::unique_xmalloc_ptr<char> member_name
> + (xstrprintf ("%.*s", path_len - filename_len - 2, sep + 1));
I think these could be:
std::string filename
= string_printf ("%.*s", filename_len, pathname);
std::string member_name
= string_printf ("%.*s", path_len - filename_len - 2, sep + 1));
>
> /* Calling solib_find makes certain that sysroot path is set properly
> if program has a dependency on .a archive and sysroot is set via
> set sysroot command. */
> - found_pathname = solib_find (filename, &found_file);
> + found_pathname = solib_find (filename.get (), &found_file);
> if (found_pathname == NULL)
> perror_with_name (pathname);
> - archive_bfd = solib_bfd_fopen (found_pathname, found_file);
> + gdb_bfd_ref_ptr archive_bfd (solib_bfd_fopen (found_pathname, found_file));
> if (archive_bfd == NULL)
> {
> warning (_("Could not open `%s' as an executable file: %s"),
> - filename, bfd_errmsg (bfd_get_error ()));
> - do_cleanups (cleanup);
> - return NULL;
> + filename.get (), bfd_errmsg (bfd_get_error ()));
> + return gdb_bfd_ref_ptr ();
> }
>
> - if (bfd_check_format (archive_bfd, bfd_object))
> - {
> - do_cleanups (cleanup);
> - return archive_bfd;
> - }
> + if (bfd_check_format (archive_bfd.get (), bfd_object))
> + return archive_bfd;
>
> - if (! bfd_check_format (archive_bfd, bfd_archive))
> + if (! bfd_check_format (archive_bfd.get (), bfd_archive))
> {
> warning (_("\"%s\": not in executable format: %s."),
> - filename, bfd_errmsg (bfd_get_error ()));
> - gdb_bfd_unref (archive_bfd);
> - do_cleanups (cleanup);
> - return NULL;
> + filename.get (), bfd_errmsg (bfd_get_error ()));
> + return gdb_bfd_ref_ptr ();
> }
>
> - object_bfd = gdb_bfd_openr_next_archived_file (archive_bfd, NULL);
> + gdb_bfd_ref_ptr object_bfd
> + (gdb_bfd_openr_next_archived_file (archive_bfd.get (), NULL));
> while (object_bfd != NULL)
> {
> - bfd *next;
> -
> - if (strcmp (member_name, object_bfd->filename) == 0)
> + if (strcmp (member_name.get (), object_bfd->filename) == 0)
> break;
Then here:
member_name == object_bfd->filename
>
> - next = gdb_bfd_openr_next_archived_file (archive_bfd, object_bfd);
> - gdb_bfd_unref (object_bfd);
> - object_bfd = next;
> + object_bfd = gdb_bfd_openr_next_archived_file (archive_bfd.get (),
> + object_bfd.get ());
> }
>
Otherwise LGTM.
Thanks,
Pedro Alves
next prev parent reply other threads:[~2016-12-02 13:05 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-29 5:06 [RFA 0/8] C++-ification series #5 Tom Tromey
2016-11-29 5:06 ` [RFA 3/8] Introduce and use gdb::unlinker Tom Tromey
2016-12-02 13:17 ` Pedro Alves
2016-11-29 5:06 ` [RFA 4/8] Remove make_cleanup_discard_psymtabs Tom Tromey
2016-12-02 14:21 ` Pedro Alves
2016-11-29 5:06 ` [RFA 7/8] Use unique_xmalloc_ptr in execute_gdb_command Tom Tromey
2016-11-29 5:22 ` Tom Tromey
2016-12-15 3:49 ` Tom Tromey
2016-12-20 17:48 ` Pedro Alves
2016-12-20 18:13 ` Tom Tromey
2016-12-23 20:01 ` Tom Tromey
2017-01-10 17:59 ` Pedro Alves
2017-01-10 19:22 ` Tom Tromey
2016-12-20 23:31 ` Tom Tromey
2016-12-20 23:56 ` Pedro Alves
2016-12-22 14:50 ` Tom Tromey
2016-12-22 15:09 ` Pedro Alves
2016-12-22 15:29 ` Tom Tromey
2016-12-22 15:40 ` Pedro Alves
2016-12-02 14:49 ` Pedro Alves
2016-12-13 13:30 ` Tom Tromey
2016-11-29 5:06 ` [RFA 1/8] Add gdb_ref_ptr.h Tom Tromey
2016-12-02 13:08 ` Pedro Alves
2016-12-02 17:46 ` Tom Tromey
2016-12-02 18:11 ` Pedro Alves
2016-12-02 19:52 ` Tom Tromey
2016-12-02 23:45 ` Pedro Alves
2016-12-03 0:05 ` Pedro Alves
2016-12-13 13:13 ` Tom Tromey
2016-11-29 5:06 ` [RFA 8/8] Add constructor and destructor to demangle_parse_info Tom Tromey
2016-12-02 15:04 ` Pedro Alves
2016-12-13 13:50 ` Tom Tromey
2016-11-29 5:06 ` [RFA 2/8] Use class to manage BFD reference counts Tom Tromey
2016-12-02 13:05 ` Pedro Alves [this message]
2016-12-13 13:26 ` Tom Tromey
2016-12-15 4:12 ` Tom Tromey
2016-12-20 18:18 ` Pedro Alves
2016-12-20 17:19 ` [pushed] gdb: Constify solib_find (Re: [RFA 2/8] Use class to manage BFD reference counts) Pedro Alves
2016-12-20 18:05 ` Tom Tromey
2016-11-29 5:06 ` [RFA 6/8] Use value_freer in dwarf2_evaluate_loc_desc_full Tom Tromey
2016-12-02 14:45 ` Pedro Alves
2016-12-13 13:29 ` Tom Tromey
2016-12-20 14:49 ` Pedro Alves
2016-12-23 19:05 ` Tom Tromey
2016-12-23 19:59 ` Tom Tromey
2017-01-10 17:57 ` Pedro Alves
2016-12-23 19:59 ` Tom Tromey
2017-01-10 17:58 ` Pedro Alves
2016-11-29 5:06 ` [RFA 5/8] Add value_freer Tom Tromey
2016-12-02 14:24 ` Pedro Alves
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cce47d1e-b2e2-dcdf-5c36-b318ed1c77db@redhat.com \
--to=palves@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=tom@tromey.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox