Make code compile when basename() is POSIX compliant.
The POSIX basename() function is allowed to modify its input buffer, which means its argument is "char *". Pull a copy of the input string before computing the base. Reviewed by: jtl Differential Revision: https://reviews.freebsd.org/D6465
This commit is contained in:
parent
351a56086c
commit
f826cc44bc
@ -310,8 +310,9 @@ pmcstat_callgraph_do_gmon_arcs(void)
|
||||
void
|
||||
pmcpl_gmon_initimage(struct pmcstat_image *pi)
|
||||
{
|
||||
const char *execpath;
|
||||
int count, nlen;
|
||||
char *sn;
|
||||
char *sn, *snbuf;
|
||||
char name[NAME_MAX];
|
||||
|
||||
/*
|
||||
@ -321,9 +322,11 @@ pmcpl_gmon_initimage(struct pmcstat_image *pi)
|
||||
* `basename(path)`+ "~" + NNN + ".gmon" till we get a free
|
||||
* entry.
|
||||
*/
|
||||
if ((sn = basename(pmcstat_string_unintern(pi->pi_execpath))) == NULL)
|
||||
err(EX_OSERR, "ERROR: Cannot process \"%s\"",
|
||||
pmcstat_string_unintern(pi->pi_execpath));
|
||||
execpath = pmcstat_string_unintern(pi->pi_execpath);
|
||||
if ((snbuf = strdup(execpath)) == NULL)
|
||||
err(EX_OSERR, "ERROR: Cannot copy \"%s\"", execpath);
|
||||
if ((sn = basename(snbuf)) == NULL)
|
||||
err(EX_OSERR, "ERROR: Cannot process \"%s\"", execpath);
|
||||
|
||||
nlen = strlen(sn);
|
||||
nlen = min(nlen, (int) (sizeof(name) - sizeof(".gmon")));
|
||||
@ -355,6 +358,7 @@ pmcpl_gmon_initimage(struct pmcstat_image *pi)
|
||||
}
|
||||
} while (count > 0);
|
||||
}
|
||||
free(snbuf);
|
||||
|
||||
LIST_INIT(&pi->pi_gmlist);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user