]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Add a get_extension utility function
authorJoel Rosdahl <joel@rosdahl.net>
Sun, 28 Feb 2010 17:23:07 +0000 (18:23 +0100)
committerJoel Rosdahl <joel@rosdahl.net>
Sun, 28 Feb 2010 17:23:07 +0000 (18:23 +0100)
ccache.h
util.c

index 4da2920a47c91bc3898ae3b9778e3bc6415ff7f2..54924be39aaa484ffe55311ebc7f991f1c34b0fc 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 *basename(const char *s);
 char *dirname(char *s);
+const char *get_extension(const char *path);
 char *remove_extension(const char *path);
 int read_lock_fd(int fd);
 int write_lock_fd(int fd);
diff --git a/util.c b/util.c
index 9b770cd3da9a03a5fa9ed816539760d69f85d40c..56deaacd8ee219071f50d4186bd07812651b5f5d 100644 (file)
--- a/util.c
+++ b/util.c
@@ -498,26 +498,32 @@ char *dirname(char *s)
 }
 
 /*
- * Return a string containing the given path without the filename extension.
- * Caller frees.
+ * Return the file extension of a path as a pointer into path. If path has no
+ * file extension, the empty string is returned.
  */
-char *remove_extension(const char *path)
+const char *get_extension(const char *path)
 {
-       char *ret = x_strdup(path);
        size_t len = strlen(path);
-       char *p;
+       const char *p;
 
-       for (p = &ret[len - 1]; p >= ret; --p) {
+       for (p = &path[len - 1]; p >= path; --p) {
                if (*p == '.') {
-                       *p = '\0';
-                       break;
+                       return p;
                }
                if (*p == '/') {
                        break;
                }
        }
+       return &path[len];
+}
 
-       return ret;
+/*
+ * Return a string containing the given path without the filename extension.
+ * Caller frees.
+ */
+char *remove_extension(const char *path)
+{
+       return x_strndup(path, strlen(path) - strlen(get_extension(path)));
 }
 
 static int lock_fd(int fd, short type)