* [RFA] source.c:find_and_open_source cleanup
@ 2008-04-07 22:26 Doug Evans
2008-04-07 22:56 ` Doug Evans
2008-04-17 16:15 ` Daniel Jacobowitz
0 siblings, 2 replies; 3+ messages in thread
From: Doug Evans @ 2008-04-07 22:26 UTC (permalink / raw)
To: gdb-patches
This is odd:
if (result >= 0)
{
char *tmp_fullname;
tmp_fullname = *fullname;
*fullname = xstrdup (tmp_fullname);
xfree (tmp_fullname);
}
Is there something subtle going on here?
I thought maybe the caller might be expecting a newly allocated value
if it passed in a value for `fullname', but the previous value has
already been freed at this point.
2008-04-07 Doug Evans <dje@google.com>
* source.c (find_and_open_source): Add some comments clarifying
handling of FULLNAME argument. Make static. Remove pointless
xstrdup/xfree.
Index: source.c
===================================================================
RCS file: /cvs/src/src/gdb/source.c,v
retrieving revision 1.86
diff -u -p -u -p -r1.86 source.c
--- source.c 14 Mar 2008 18:39:43 -0000 1.86
+++ source.c 7 Apr 2008 19:30:01 -0000
@@ -927,15 +927,19 @@ rewrite_source_path (const char *path)
DIRNAME is the compilation directory of a particular source file.
Only some debug formats provide this info.
FULLNAME can be the last known absolute path to the file in question.
+ Space for the path must have been malloc'd. If a path substitution
+ is applied we free the old value and set a new one.
On Success
A valid file descriptor is returned. ( the return value is positive )
FULLNAME is set to the absolute path to the file just opened.
+ The caller is responsible for freeing FULLNAME.
On Failure
An invalid file descriptor is returned. ( the return value is negative )
FULLNAME is set to NULL. */
-int
+
+static int
find_and_open_source (struct objfile *objfile,
const char *filename,
const char *dirname,
@@ -1022,13 +1026,6 @@ find_and_open_source (struct objfile *ob
result = openp (path, OPF_SEARCH_IN_PATH, p, OPEN_MODE, 0, fullname);
}
- if (result >= 0)
- {
- char *tmp_fullname;
- tmp_fullname = *fullname;
- *fullname = xstrdup (tmp_fullname);
- xfree (tmp_fullname);
- }
return result;
}
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [RFA] source.c:find_and_open_source cleanup
2008-04-07 22:26 [RFA] source.c:find_and_open_source cleanup Doug Evans
@ 2008-04-07 22:56 ` Doug Evans
2008-04-17 16:15 ` Daniel Jacobowitz
1 sibling, 0 replies; 3+ messages in thread
From: Doug Evans @ 2008-04-07 22:56 UTC (permalink / raw)
To: gdb-patches
Presumably this is just leftovers from the mstrsave removal. The code
was originally something like:
if (result >= 0)
{
char *tmp_fullname;
tmp_fullname = *fullname;
*fullname = mstrsave (objfile->md, *fullname);
xfree (tmp_fullname);
}
On Mon, Apr 7, 2008 at 12:34 PM, Doug Evans <dje@google.com> wrote:
> This is odd:
>
> if (result >= 0)
> {
> char *tmp_fullname;
> tmp_fullname = *fullname;
> *fullname = xstrdup (tmp_fullname);
> xfree (tmp_fullname);
> }
>
> Is there something subtle going on here?
> I thought maybe the caller might be expecting a newly allocated value
> if it passed in a value for `fullname', but the previous value has
> already been freed at this point.
>
> 2008-04-07 Doug Evans <dje@google.com>
>
> * source.c (find_and_open_source): Add some comments clarifying
> handling of FULLNAME argument. Make static. Remove pointless
> xstrdup/xfree.
>
> Index: source.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/source.c,v
> retrieving revision 1.86
> diff -u -p -u -p -r1.86 source.c
> --- source.c 14 Mar 2008 18:39:43 -0000 1.86
> +++ source.c 7 Apr 2008 19:30:01 -0000
> @@ -927,15 +927,19 @@ rewrite_source_path (const char *path)
> DIRNAME is the compilation directory of a particular source file.
> Only some debug formats provide this info.
> FULLNAME can be the last known absolute path to the file in question.
> + Space for the path must have been malloc'd. If a path substitution
> + is applied we free the old value and set a new one.
>
> On Success
> A valid file descriptor is returned. ( the return value is positive )
> FULLNAME is set to the absolute path to the file just opened.
> + The caller is responsible for freeing FULLNAME.
>
> On Failure
> An invalid file descriptor is returned. ( the return value is negative )
> FULLNAME is set to NULL. */
> -int
> +
> +static int
> find_and_open_source (struct objfile *objfile,
> const char *filename,
> const char *dirname,
> @@ -1022,13 +1026,6 @@ find_and_open_source (struct objfile *ob
> result = openp (path, OPF_SEARCH_IN_PATH, p, OPEN_MODE, 0, fullname);
> }
>
> - if (result >= 0)
> - {
> - char *tmp_fullname;
> - tmp_fullname = *fullname;
> - *fullname = xstrdup (tmp_fullname);
> - xfree (tmp_fullname);
> - }
> return result;
> }
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [RFA] source.c:find_and_open_source cleanup
2008-04-07 22:26 [RFA] source.c:find_and_open_source cleanup Doug Evans
2008-04-07 22:56 ` Doug Evans
@ 2008-04-17 16:15 ` Daniel Jacobowitz
1 sibling, 0 replies; 3+ messages in thread
From: Daniel Jacobowitz @ 2008-04-17 16:15 UTC (permalink / raw)
To: Doug Evans; +Cc: gdb-patches
On Mon, Apr 07, 2008 at 12:34:12PM -0700, Doug Evans wrote:
> This is odd:
>
> if (result >= 0)
> {
> char *tmp_fullname;
> tmp_fullname = *fullname;
> *fullname = xstrdup (tmp_fullname);
> xfree (tmp_fullname);
> }
>
> Is there something subtle going on here?
> I thought maybe the caller might be expecting a newly allocated value
> if it passed in a value for `fullname', but the previous value has
> already been freed at this point.
>
> 2008-04-07 Doug Evans <dje@google.com>
>
> * source.c (find_and_open_source): Add some comments clarifying
> handling of FULLNAME argument. Make static. Remove pointless
> xstrdup/xfree.
Looks good to me. Please commit, thanks!
--
Daniel Jacobowitz
CodeSourcery
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2008-04-17 15:59 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-04-07 22:26 [RFA] source.c:find_and_open_source cleanup Doug Evans
2008-04-07 22:56 ` Doug Evans
2008-04-17 16:15 ` Daniel Jacobowitz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox