[systemd-commits] src/shared src/test

Lennart Poettering lennart at kemper.freedesktop.org
Thu Jul 18 11:22:36 PDT 2013


 src/shared/util.c    |   31 +++++++++++++++++++++++++++++++
 src/shared/util.h    |    2 ++
 src/test/test-util.c |   23 +++++++++++++++++++++++
 3 files changed, 56 insertions(+)

New commits:
commit d4ac85c6f6d8547f8b835009ae431438de72df28
Author: Lennart Poettering <lennart at poettering.net>
Date:   Thu Jul 18 20:22:29 2013 +0200

    util: add split_pair() for splitting foo=bar strings

diff --git a/src/shared/util.c b/src/shared/util.c
index 5b602ea..c8ed53c 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -5946,3 +5946,34 @@ void parse_user_at_host(char *arg, char **user, char **host) {
                 *user = arg;
         }
 }
+
+int split_pair(const char *s, const char *sep, char **l, char **r) {
+        char *x, *a, *b;
+
+        assert(s);
+        assert(sep);
+        assert(l);
+        assert(r);
+
+        if (isempty(sep))
+                return -EINVAL;
+
+        x = strstr(s, sep);
+        if (!x)
+                return -EINVAL;
+
+        a = strndup(s, x - s);
+        if (!a)
+                return -ENOMEM;
+
+        b = strdup(x + strlen(sep));
+        if (!b) {
+                free(a);
+                return -ENOMEM;
+        }
+
+        *l = a;
+        *r = b;
+
+        return 0;
+}
diff --git a/src/shared/util.h b/src/shared/util.h
index fac08ca..ac999c6 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -735,3 +735,5 @@ static inline void _reset_locale_(struct _locale_struct_ *s) {
 
 bool id128_is_valid(const char *s) _pure_;
 void parse_user_at_host(char *arg, char **user, char **host);
+
+int split_pair(const char *s, const char *sep, char **l, char **r);
diff --git a/src/test/test-util.c b/src/test/test-util.c
index 4768310..315bc41 100644
--- a/src/test/test-util.c
+++ b/src/test/test-util.c
@@ -521,6 +521,28 @@ static void test_parse_user_at_host(void) {
         assert_se(streq(host, "mikescomputer"));
 }
 
+static void test_split_pair(void) {
+        _cleanup_free_ char *a = NULL, *b = NULL;
+
+        assert_se(split_pair("", "", &a, &b) == -EINVAL);
+        assert_se(split_pair("foo=bar", "", &a, &b) == -EINVAL);
+        assert_se(split_pair("", "=", &a, &b) == -EINVAL);
+        assert_se(split_pair("foo=bar", "=", &a, &b) >= 0);
+        assert_se(streq(a, "foo"));
+        assert_se(streq(b, "bar"));
+        free(a);
+        free(b);
+        assert_se(split_pair("==", "==", &a, &b) >= 0);
+        assert_se(streq(a, ""));
+        assert_se(streq(b, ""));
+        free(a);
+        free(b);
+
+        assert_se(split_pair("===", "==", &a, &b) >= 0);
+        assert_se(streq(a, ""));
+        assert_se(streq(b, "="));
+}
+
 int main(int argc, char *argv[]) {
         test_streq_ptr();
         test_first_word();
@@ -555,6 +577,7 @@ int main(int argc, char *argv[]) {
         test_strextend();
         test_strrep();
         test_parse_user_at_host();
+        test_split_pair();
 
         return 0;
 }



More information about the systemd-commits mailing list