static enum guessed_compiler
guess_compiler(const char *path)
{
- char *name = basename(path);
+ char *name = x_basename(path);
enum guessed_compiler result = GUESSED_UNKNOWN;
if (strstr(name, "clang")) {
result = GUESSED_CLANG;
#endif
// x_realpath only works for existing paths, so if path doesn't exist, try
- // dirname(path) and assemble the path afterwards. We only bother to try
+ // x_dirname(path) and assemble the path afterwards. We only bother to try
// canonicalizing one of these two paths since a compiler path argument
- // typically only makes sense if path or dirname(path) exists.
+ // typically only makes sense if path or x_dirname(path) exists.
char *path_suffix = NULL;
struct stat st;
if (stat(path, &st) != 0) {
// path doesn't exist.
- char *dir = dirname(path);
+ char *dir = x_dirname(path);
// find the nearest existing directory in path
while (stat(dir, &st) != 0) {
- char *parent_dir = dirname(dir);
+ char *parent_dir = x_dirname(dir);
free(dir);
dir = parent_dir;
}
// be done almost anywhere, but we might as well do it near the end as we
// save the stat call if we exit early.
{
- char *first_level_dir = dirname(stats_file);
+ char *first_level_dir = x_dirname(stats_file);
if (create_cachedirtag(first_level_dir) != 0) {
cc_log("Failed to create %s/CACHEDIR.TAG (%s)\n",
first_level_dir, strerror(errno));
// Limit the basename to 10 characters in order to cope with filesystem with
// small maximum filename length limits.
- char *input_base = basename(input_file);
+ char *input_base = x_basename(input_file);
char *tmp = strchr(input_base, '.');
if (tmp) {
*tmp = 0;
// Also hash the compiler name as some compilers use hard links and behave
// differently depending on the real name.
hash_delimiter(hash, "cc_name");
- char *base = basename(args->argv[0]);
+ char *base = x_basename(args->argv[0]);
hash_string(hash, base);
free(base);
// to include the target filename in the hash to avoid handing out an
// object file with an incorrect .dwo link.
hash_delimiter(hash, "filename");
- hash_string(hash, basename(output_obj));
+ hash_string(hash, x_basename(output_obj));
}
// Possibly hash the coverage data file path.
if (generating_coverage && profile_arcs) {
- char *dir = dirname(output_obj);
+ char *dir = x_dirname(output_obj);
if (profile_dir) {
dir = x_strdup(profile_dir);
} else {
dir = real_dir;
}
if (dir) {
- char *base_name = basename(output_obj);
+ char *base_name = x_basename(output_obj);
char *p = remove_extension(base_name);
free(base_name);
char *gcda_path = format("%s/%s.gcda", dir, p);
find_compiler(char **argv)
{
// We might be being invoked like "ccache gcc -c foo.c".
- char *base = basename(argv[0]);
+ char *base = x_basename(argv[0]);
if (same_executable_name(base, MYNAME)) {
args_remove_first(orig_args);
free(base);
// A full path was given.
return;
}
- base = basename(orig_args->argv[0]);
+ base = x_basename(orig_args->argv[0]);
}
// Support user override of the compiler.
is_precompiled_header(const char *path)
{
const char *ext = get_extension(path);
- char *dir = dirname(path);
+ char *dir = x_dirname(path);
const char *dir_ext = get_extension(dir);
bool result =
str_eq(ext, ".gch")
output_obj = format("%s.gch", input_file);
} else {
char extension = found_S_opt ? 's' : 'o';
- output_obj = basename(input_file);
+ output_obj = x_basename(input_file);
char *p = strrchr(output_obj, '.');
if (!p) {
reformat(&output_obj, "%s.%c", output_obj, extension);
goto out;
}
- char *output_dir = dirname(output_obj);
+ char *output_dir = x_dirname(output_obj);
if (stat(output_dir, &st) != 0 || !S_ISDIR(st.st_mode)) {
cc_log("Directory does not exist: %s", output_dir);
stats_update(STATS_BADOUTPUTFILE);
ccache_main(int argc, char *argv[])
{
// Check if we are being invoked as "ccache".
- char *program_name = basename(argv[0]);
+ char *program_name = x_basename(argv[0]);
if (same_executable_name(program_name, MYNAME)) {
if (argc < 2) {
fputs(USAGE_TEXT, stderr);
create_parent_dirs(const char *path)
{
int res;
- char *parent = dirname(path);
+ char *parent = x_dirname(path);
struct stat st;
if (stat(parent, &st) == 0) {
if (S_ISDIR(st.st_mode)) {
// Return the base name of a file - caller frees.
char *
-basename(const char *path)
+x_basename(const char *path)
{
char *p = strrchr(path, '/');
if (p) {
// Return the dir name of a file - caller frees.
char *
-dirname(const char *path)
+x_dirname(const char *path)
{
char *s = x_strdup(path);
char *p = strrchr(s, '/');
if (fd == -1 && errno == ENOENT) {
if (create_parent_dirs(*fname) != 0) {
fatal("Failed to create directory %s: %s",
- dirname(*fname), strerror(errno));
+ x_dirname(*fname), strerror(errno));
}
reformat(&template, "%s.%s", *fname, tmp_string());
fd = mkstemp(template);
TEST_SUITE(util)
-TEST(basename)
+TEST(x_basename)
{
- CHECK_STR_EQ_FREE2("foo.c", basename("foo.c"));
- CHECK_STR_EQ_FREE2("foo.c", basename("dir1/dir2/foo.c"));
- CHECK_STR_EQ_FREE2("foo.c", basename("/dir/foo.c"));
- CHECK_STR_EQ_FREE2("", basename("dir1/dir2/"));
+ CHECK_STR_EQ_FREE2("foo.c", x_basename("foo.c"));
+ CHECK_STR_EQ_FREE2("foo.c", x_basename("dir1/dir2/foo.c"));
+ CHECK_STR_EQ_FREE2("foo.c", x_basename("/dir/foo.c"));
+ CHECK_STR_EQ_FREE2("", x_basename("dir1/dir2/"));
}
-TEST(dirname)
+TEST(x_dirname)
{
- CHECK_STR_EQ_FREE2(".", dirname("foo.c"));
- CHECK_STR_EQ_FREE2(".", dirname(""));
- CHECK_STR_EQ_FREE2("/", dirname("/"));
- CHECK_STR_EQ_FREE2("/", dirname("/foo.c"));
- CHECK_STR_EQ_FREE2("dir1/dir2", dirname("dir1/dir2/foo.c"));
- CHECK_STR_EQ_FREE2("/dir", dirname("/dir/foo.c"));
- CHECK_STR_EQ_FREE2("dir1/dir2", dirname("dir1/dir2/"));
+ CHECK_STR_EQ_FREE2(".", x_dirname("foo.c"));
+ CHECK_STR_EQ_FREE2(".", x_dirname(""));
+ CHECK_STR_EQ_FREE2("/", x_dirname("/"));
+ CHECK_STR_EQ_FREE2("/", x_dirname("/foo.c"));
+ CHECK_STR_EQ_FREE2("dir1/dir2", x_dirname("dir1/dir2/foo.c"));
+ CHECK_STR_EQ_FREE2("/dir", x_dirname("/dir/foo.c"));
+ CHECK_STR_EQ_FREE2("dir1/dir2", x_dirname("dir1/dir2/"));
}
TEST(common_dir_prefix_length)