chiark / gitweb /
implement new utility functions strstrip() and file_in_same_dir()
authorLennart Poettering <lennart@poettering.net>
Wed, 27 Jan 2010 21:37:50 +0000 (22:37 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 27 Jan 2010 21:37:50 +0000 (22:37 +0100)
util.c
util.h

diff --git a/util.c b/util.c
index 4774610265f61a39e683a72ed69054d8592cb484..56f53eafd66caf1872c5e4d9954bb1a84c0177a3 100644 (file)
--- 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 a9690603317179081364ee079414ca355a305b52..9aceaef47fd5e118d3a8a9a811fbf036b3cf944a 100644 (file)
--- 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