]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Introduce remove_extension function and use it to calculate dependency filename
authorJoel Rosdahl <joel@rosdahl.net>
Sun, 28 Feb 2010 15:22:51 +0000 (16:22 +0100)
committerJoel Rosdahl <joel@rosdahl.net>
Sun, 28 Feb 2010 15:22:51 +0000 (16:22 +0100)
ccache.c
ccache.h
util.c

index 5390d2f92f2e9e81d5a860625ea3ae2a0ba1bc26..8308f8f682b3a1d746c7c93b79616134c9a8a1f9 100644 (file)
--- a/ccache.c
+++ b/ccache.c
@@ -1461,19 +1461,11 @@ static void process_args(int argc, char **argv)
        if (generating_dependencies) {
                if (!dependency_filename_specified) {
                        char *default_depfile_name;
-                       char *last_dot, *last_slash;
-
-                       last_dot = strrchr(output_obj, '.');
-                       last_slash = strrchr(output_obj, '/');
-                       if (!last_dot
-                           || (last_slash && last_dot < last_slash)) {
-                               /* No extension, just add .d. */
-                               last_dot = output_obj + strlen(output_obj);
-                       }
-                       x_asprintf(&default_depfile_name,
-                                  "%.*s.d",
-                                  (int)(last_dot - output_obj),
-                                  output_obj);
+                       char *base_name;
+
+                       base_name = remove_extension(output_obj);
+                       x_asprintf(&default_depfile_name, "%s.d", base_name);
+                       free(base_name);
                        args_add(stripped_args, "-MF");
                        args_add(stripped_args, default_depfile_name);
                        output_dep = make_relative_path(
index 82b786787211d4bc03966a547af025e72f334297..cb87cb771462793744da31b4cb75d248f1b45766 100644 (file)
--- a/ccache.h
+++ b/ccache.h
@@ -82,6 +82,7 @@ void *x_malloc(size_t size);
 void traverse(const char *dir, void (*fn)(const char *, struct stat *));
 char *str_basename(const char *s);
 char *dirname(char *s);
+char *remove_extension(const char *path);
 int read_lock_fd(int fd);
 int write_lock_fd(int fd);
 size_t file_size(struct stat *st);
diff --git a/util.c b/util.c
index cca1eb2604fa27df31645b37a18465dfb62e470b..af95ee7889115878ce4601f31d691d65fbd06d21 100644 (file)
--- a/util.c
+++ b/util.c
@@ -497,6 +497,29 @@ char *dirname(char *s)
        return s;
 }
 
+/*
+ * Return a string containing the given path without the filename extension.
+ * Caller frees.
+ */
+char *remove_extension(const char *path)
+{
+       char *ret = x_strdup(path);
+       size_t len = strlen(path);
+       char *p;
+
+       for (p = &ret[len - 1]; p >= ret; --p) {
+               if (*p == '.') {
+                       *p = '\0';
+                       break;
+               }
+               if (*p == '/') {
+                       break;
+               }
+       }
+
+       return ret;
+}
+
 static int lock_fd(int fd, short type)
 {
        struct flock fl;