From: Joel Rosdahl Date: Sun, 28 Feb 2010 17:23:07 +0000 (+0100) Subject: Add a get_extension utility function X-Git-Tag: v3.0pre0~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d36c70046a6823db3f9705c053151a0a6f7b5757;p=thirdparty%2Fccache.git Add a get_extension utility function --- diff --git a/ccache.h b/ccache.h index 4da2920a4..54924be39 100644 --- 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 9b770cd3d..56deaacd8 100644 --- 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)