chiark / gitweb /
s/name/unit
[elogind.git] / util.c
diff --git a/util.c b/util.c
index b4b07e9d1b827ac34bbc397d36c59abf57e3f7ff..f752a248ec6e014a5f662d08450a79187f26ec10 100644 (file)
--- a/util.c
+++ b/util.c
@@ -402,3 +402,44 @@ char *strappend(const char *s, const char *suffix) {
 
         return r;
 }
+
+int readlink_malloc(const char *p, char **r) {
+        size_t l = 100;
+
+        assert(p);
+        assert(r);
+
+        for (;;) {
+                char *c;
+                ssize_t n;
+
+                if (!(c = new(char, l)))
+                        return -ENOMEM;
+
+                if ((n = readlink(p, c, l-1)) < 0) {
+                        int ret = -errno;
+                        free(c);
+                        return ret;
+                }
+
+                if ((size_t) n < l-1) {
+                        c[n] = 0;
+                        *r = c;
+                        return 0;
+                }
+
+                free(c);
+                l *= 2;
+        }
+}
+
+char *file_name_from_path(const char *p) {
+        char *r;
+
+        assert(p);
+
+        if ((r = strrchr(p, '/')))
+                return r + 1;
+
+        return (char*) p;
+}