]> err.no Git - util-linux/commitdiff
libmount: add mnt_optstr_prepend_option()
authorKarel Zak <kzak@redhat.com>
Tue, 14 Sep 2010 08:42:44 +0000 (10:42 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 3 Jan 2011 11:28:42 +0000 (12:28 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
shlibs/mount/src/mount.h.in
shlibs/mount/src/mount.sym
shlibs/mount/src/optstr.c

index a4170b479093b2f14a9021eb00221dd1fd0ad00f..559f59a41989f3beb01ac73cfd81292d842d1f77 100644 (file)
@@ -150,6 +150,8 @@ extern int mnt_optstr_next_option(char **optstr, char **name, size_t *namesz,
                                char **value, size_t *valuesz);
 extern int mnt_optstr_append_option(char **optstr, const char *name,
                                const char *value);
+extern int mnt_optstr_prepend_option(char **optstr, const char *name,
+                               const char *value);
 extern int mnt_optstr_get_option(char *optstr, const char *name,
                                char **value, size_t *valsz);
 extern int mnt_optstr_set_option(char **optstr, const char *name,
index 56e20dddf95e89f92469121968591e76c1f360ce..af0cc88fb1966a5c85794671cdcf9e2ccd87a11c 100644 (file)
@@ -106,6 +106,7 @@ global:
        mnt_optls_remove_option_by_flags;
        mnt_optls_remove_option_by_iflags;
        mnt_optstr_append_option;
+       mnt_optstr_prepend_option;
        mnt_optstr_get_mountflags;
        mnt_optstr_get_option;
        mnt_optstr_next_option;
index caa46eae459853811fa15cf25d945bafbfedab6d..6d4d350526068abeb0f190b9b484145770dfc7a1 100644 (file)
@@ -190,11 +190,12 @@ static int __mnt_optstr_append_option(char **optstr,
 
 /**
  * mnt_optstr_append_option:
- * @optstr: option string or NULL
+ * @optstr: option string or NULL, returns reallocated string
  * @name: value name
  * @value: value
  *
- * Returns: reallocated (or newly allocated) @optstr with ,name=value
+ * Returns: 0 on success or -1 in case of error. After error the @optstr should
+ *          be unmodified.
  */
 int mnt_optstr_append_option(char **optstr, const char *name, const char *value)
 {
@@ -209,6 +210,35 @@ int mnt_optstr_append_option(char **optstr, const char *name, const char *value)
        return __mnt_optstr_append_option(optstr, name, nsz, value, vsz);
 }
 
+/**
+ * mnt_optstr_prepend_option:
+ * @optstr: option string or NULL, returns reallocated string
+ * @name: value name
+ * @value: value
+ *
+ * Returns: 0 on success or -1 in case of error. After error the @optstr should
+ *          be unmodified.
+ */
+int mnt_optstr_prepend_option(char **optstr, const char *name, const char *value)
+{
+       int rc = 0;
+       char *tmp = *optstr;
+
+       *optstr = NULL;
+
+       rc = mnt_optstr_append_option(optstr, name, value);
+       if (!rc)
+               rc = mnt_optstr_append_option(optstr, tmp, NULL);
+       if (!rc) {
+               free(tmp);
+               return 0;
+       }
+
+       free(*optstr);
+       *optstr = tmp;
+       return rc;
+}
+
 /**
  * mnt_optstr_get_option:
  * @optstr: string with comma separated list of options
@@ -479,6 +509,26 @@ int test_append(struct mtest *ts, int argc, char *argv[])
        return rc;
 }
 
+int test_prepend(struct mtest *ts, int argc, char *argv[])
+{
+       const char *value = NULL, *name;
+       char *optstr;
+       int rc;
+
+       if (argc < 3)
+               return -EINVAL;
+       optstr = strdup(argv[1]);
+       name = argv[2];
+
+       if (argc == 4)
+               value = argv[3];
+
+       rc = mnt_optstr_prepend_option(&optstr, name, value);
+       if (!rc)
+               printf("result: >%s<\n", optstr);
+       return rc;
+}
+
 int test_split(struct mtest *ts, int argc, char *argv[])
 {
        char *optstr, *user = NULL, *fs = NULL, *vfs = NULL;
@@ -574,6 +624,7 @@ int main(int argc, char *argv[])
 {
        struct mtest tss[] = {
                { "--append", test_append, "<optstr> <name> [<value>]  append value to optstr" },
+               { "--prepend",test_prepend,"<optstr> <name> [<value>]  prepend  value to optstr" },
                { "--set",    test_set,    "<optstr> <name> [<value>]  (un)set value" },
                { "--get",    test_get,    "<optstr> <name>            search name in optstr" },
                { "--remove", test_remove, "<optstr> <name>            remove name in optstr" },