From: Lennart Poettering Date: Wed, 27 Jan 2010 21:37:50 +0000 (+0100) Subject: implement new utility functions strstrip() and file_in_same_dir() X-Git-Tag: v1~786 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=4a72ff34c62f18559e96b35d69c665e07290f228;p=elogind.git implement new utility functions strstrip() and file_in_same_dir() --- diff --git a/util.c b/util.c index 477461026..56f53eafd 100644 --- a/util.c +++ b/util.c @@ -490,3 +490,51 @@ int reset_all_signal_handlers(void) { return 0; } + +char *strstrip(char *s) { + char *e, *l = NULL; + + /* Drops trailing whitespace. Modifies the string in + * place. Returns pointer to first non-space character */ + + s += strspn(s, WHITESPACE); + + for (e = s; *e; e++) + if (!strchr(WHITESPACE, *e)) + l = e; + + if (l) + *(l+1) = 0; + else + *s = 0; + + return s; + +} + +char *file_in_same_dir(const char *path, const char *filename) { + char *e, *r; + size_t k; + + assert(path); + assert(filename); + + /* This removes the last component of path and appends + * filename, unless the latter is absolute anyway or the + * former isn't */ + + if (path_is_absolute(filename)) + return strdup(filename); + + if (!(e = strrchr(path, '/'))) + return strdup(filename); + + k = strlen(filename); + if (!(r = new(char, e-path+1+k+1))) + return NULL; + + memcpy(r, path, e-path+1); + memcpy(r+(e-path)+1, filename, k+1); + + return r; +} diff --git a/util.h b/util.h index a96906033..9aceaef47 100644 --- a/util.h +++ b/util.h @@ -19,7 +19,7 @@ typedef uint64_t usec_t; #define NSEC_PER_USEC 1000ULL /* What is interpreted as whitespace? */ -#define WHITESPACE " \t\n" +#define WHITESPACE " \t\n\r" usec_t now(clockid_t clock); @@ -101,4 +101,7 @@ char *path_make_absolute(const char *p, const char *prefix); int reset_all_signal_handlers(void); +char *strstrip(char *s); +char *file_in_same_dir(const char *path, const char *filename); + #endif