]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/shared/parse-argument.c
NEWS: finalize for v256~rc3
[thirdparty/systemd.git] / src / shared / parse-argument.c
index 774cb1bc82a7f35ef3de477b171008fd9b77c3d6..145bd119ac7a2cc7d2241a9c909e5bb15ac1d824 100644 (file)
@@ -8,7 +8,49 @@
 #include "string-table.h"
 #include "string-util.h"
 
-/* All functions in this file emit warnigs. */
+/* All functions in this file emit warnings. */
+
+int parse_boolean_argument(const char *optname, const char *s, bool *ret) {
+        int r;
+
+        /* Returns the result through *ret and the return value. */
+
+        if (s) {
+                r = parse_boolean(s);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse boolean argument to %s: %s.", optname, s);
+
+                if (ret)
+                        *ret = r;
+                return r;
+        } else {
+                /* s may be NULL. This is controlled by getopt_long() parameters. */
+                if (ret)
+                        *ret = true;
+                return true;
+        }
+}
+
+int parse_json_argument(const char *s, JsonFormatFlags *ret) {
+        assert(s);
+        assert(ret);
+
+        if (streq(s, "pretty"))
+                *ret = JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO;
+        else if (streq(s, "short"))
+                *ret = JSON_FORMAT_NEWLINE;
+        else if (streq(s, "off"))
+                *ret = JSON_FORMAT_OFF;
+        else if (streq(s, "help")) {
+                puts("pretty\n"
+                     "short\n"
+                     "off");
+                return 0; /* 0 means → we showed a brief help, exit now */
+        } else
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown argument to --json= switch: %s", s);
+
+        return 1; /* 1 means → properly parsed */
+}
 
 int parse_path_argument(const char *path, bool suppress_root, char **arg) {
         char *p;
@@ -31,7 +73,7 @@ int parse_path_argument(const char *path, bool suppress_root, char **arg) {
         if (r < 0)
                 return log_error_errno(r, "Failed to parse path \"%s\" and make it absolute: %m", path);
 
-        path_simplify(p, false);
+        path_simplify(p);
         if (suppress_root && empty_or_root(p))
                 p = mfree(p);