Add support for the GCOV_PREFIX_STRIP env variable which tries to strip off the first 'n' directories from the filename.

llvm-svn: 157574
This commit is contained in:
Bill Wendling 2012-05-28 10:09:01 +00:00
parent 1e039681c5
commit aa888a29eb
1 changed files with 22 additions and 3 deletions

View File

@ -67,20 +67,39 @@ static void write_string(const char *s) {
}
static char *mangle_filename(const char *orig_filename) {
/* TODO: handle GCOV_PREFIX_STRIP */
char *filename = 0;
int prefix_len = 0;
int prefix_strip = 0;
int level = 0;
const char *fname = orig_filename, *ptr = NULL;
const char *prefix = getenv("GCOV_PREFIX");
const char *tmp = getenv("GCOV_PREFIX_STRIP");
if (!prefix || prefix[0] != '/') /* Ignore non-absolute paths */
if (!prefix)
return strdup(orig_filename);
if (tmp) {
prefix_strip = atoi(tmp);
/* Negative GCOV_PREFIX_STRIP values are ignored */
if (prefix_strip < 0)
prefix_strip = 0;
}
prefix_len = strlen(prefix);
filename = malloc(prefix_len + 1 + strlen(orig_filename) + 1);
strcpy(filename, prefix);
if (prefix[prefix_len - 1] != '/')
strcat(filename, "/");
strcat(filename, orig_filename);
for (ptr = fname + 1; *ptr != '\0' && level < prefix_strip; ++ptr) {
if (*ptr != '/') continue;
fname = ptr;
++level;
}
strcat(filename, fname);
return filename;
}