Validate that destination gcov file does not exist for gcov-tool (PR gcov-profile/78783).

2017-04-18  Martin Liska  <mliska@suse.cz>

	PR gcov-profile/78783
	* libgcov-driver.c (gcov_get_filename): New function.
2017-04-18  Martin Liska  <mliska@suse.cz>

	PR gcov-profile/78783
	* gcov-tool.c (gcov_output_files): Validate that destination
	file is either removed by the tool or by a user.

From-SVN: r246961
This commit is contained in:
Martin Liska 2017-04-18 09:24:20 +02:00 committed by Martin Liska
parent 4c6a5d87fd
commit 6397118495
4 changed files with 29 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2017-04-18 Martin Liska <mliska@suse.cz>
PR gcov-profile/78783
* gcov-tool.c (gcov_output_files): Validate that destination
file is either removed by the tool or by a user.
2017-04-14 Andrew Burgess <andrew.burgess@embecosm.com>
Guy Benyei <guybe@mellanox.com>

View File

@ -46,6 +46,7 @@ extern int gcov_profile_normalize (struct gcov_info*, gcov_type);
extern int gcov_profile_scale (struct gcov_info*, float, int, int);
extern struct gcov_info* gcov_read_profile_dir (const char*, int);
extern void gcov_do_dump (struct gcov_info *, int);
extern const char *gcov_get_filename (struct gcov_info *list);
extern void gcov_set_verbose (void);
/* Set to verbose output mode. */
@ -114,6 +115,14 @@ gcov_output_files (const char *out, struct gcov_info *profile)
if (ret)
fatal_error (input_location, "Cannot change directory to %s", out);
/* Verify that output file does not exist (either was removed by
unlink_profile_data or removed by user). */
const char *filename = gcov_get_filename (profile);
if (access (filename, F_OK) != -1)
fatal_error (input_location, "output file %s already exists in folder %s",
filename, out);
gcov_do_dump (profile, 0);
ret = chdir (pwd);

View File

@ -1,3 +1,8 @@
2017-04-18 Martin Liska <mliska@suse.cz>
PR gcov-profile/78783
* libgcov-driver.c (gcov_get_filename): New function.
2017-04-07 Jeff Law <law@redhat.com>
* Makefile.in: Swap definition of LIBGCC_LINKS and inclusion of

View File

@ -852,6 +852,15 @@ gcov_do_dump (struct gcov_info *list, int run_counted)
free (gf.filename);
}
#if IN_GCOV_TOOL
const char *
__attribute__ ((unused))
gcov_get_filename (struct gcov_info *list)
{
return list->filename;
}
#endif
#if !IN_GCOV_TOOL
void
__gcov_dump_one (struct gcov_root *root)