summaryrefslogtreecommitdiffstats
path: root/utils/include/optutils.h
diff options
context:
space:
mode:
authorManuel Bentele2020-10-23 15:18:01 +0200
committerManuel Bentele2020-10-23 15:18:01 +0200
commitdbb41ce2b7f309d394054a6bd1e33afd578798a5 (patch)
tree6a31092063d9f2fb5ac5720ec6759040e793c3d5 /utils/include/optutils.h
parentSet Linux kernel version to unknown if it is not detectable (diff)
downloadxloop-dbb41ce2b7f309d394054a6bd1e33afd578798a5.tar.gz
xloop-dbb41ce2b7f309d394054a6bd1e33afd578798a5.tar.xz
xloop-dbb41ce2b7f309d394054a6bd1e33afd578798a5.zip
Move the source code of all xloop components to the common 'src' directory
Diffstat (limited to 'utils/include/optutils.h')
-rw-r--r--utils/include/optutils.h107
1 files changed, 0 insertions, 107 deletions
diff --git a/utils/include/optutils.h b/utils/include/optutils.h
deleted file mode 100644
index 0dc127b..0000000
--- a/utils/include/optutils.h
+++ /dev/null
@@ -1,107 +0,0 @@
-#ifndef UTIL_LINUX_OPTUTILS_H
-#define UTIL_LINUX_OPTUTILS_H
-
-#include <assert.h>
-
-#include "c.h"
-#include "nls.h"
-#include "cctype.h"
-
-static inline const char *option_to_longopt(int c, const struct option *opts)
-{
- const struct option *o;
-
- assert(!(opts == NULL));
- for (o = opts; o->name; o++)
- if (o->val == c)
- return o->name;
- return NULL;
-}
-
-#ifndef OPTUTILS_EXIT_CODE
-# define OPTUTILS_EXIT_CODE EXIT_FAILURE
-#endif
-
-/*
- * Check collisions between options.
- *
- * The conflicts between options are described in ul_excl_t array. The
- * array contains groups of mutually exclusive options. For example
- *
- * static const ul_excl_t excl[] = {
- * { 'Z','b','c' }, // first group
- * { 'b','x' }, // second group
- * { 0 }
- * };
- *
- * int excl_st[ARRAY_SIZE(excl)] = UL_EXCL_STATUS_INIT;
- *
- * while ((c = getopt_long(argc, argv, "Zbcx", longopts, NULL)) != -1) {
- *
- * err_exclusive_options(c, longopts, excl, excl_st);
- *
- * switch (c) {
- * case 'Z':
- * ....
- * }
- * }
- *
- * The array excl[] defines two groups of the mutually exclusive options. The
- * option '-b' is in the both groups.
- *
- * Note that the options in the group have to be in ASCII order (ABC..abc..) and
- * groups have to be also in ASCII order.
- *
- * The maximal number of the options in the group is 15 (size of the array is
- * 16, last is zero).
- *
- * The current status of options is stored in excl_st array. The size of the array
- * must be the same as number of the groups in the ul_excl_t array.
- *
- * If you're unsure then see sys-utils/mount.c or misc-utils/findmnt.c.
- */
-#define UL_EXCL_STATUS_INIT { 0 }
-typedef int ul_excl_t[16];
-
-static inline void err_exclusive_options(
- int c,
- const struct option *opts,
- const ul_excl_t *excl,
- int *status)
-{
- int e;
-
- for (e = 0; excl[e][0] && excl[e][0] <= c; e++) {
- const int *op = excl[e];
-
- for (; *op && *op <= c; op++) {
- if (*op != c)
- continue;
- if (status[e] == 0)
- status[e] = c;
- else if (status[e] != c) {
- size_t ct = 0;
-
- fprintf(stderr, _("%s: mutually exclusive "
- "arguments:"),
- program_invocation_short_name);
-
- for (op = excl[e];
- ct + 1 < ARRAY_SIZE(excl[0]) && *op;
- op++, ct++) {
- const char *n = option_to_longopt(*op, opts);
- if (n)
- fprintf(stderr, " --%s", n);
- else if (c_isgraph(*op))
- fprintf(stderr, " -%c", *op);
- }
- fputc('\n', stderr);
- exit(OPTUTILS_EXIT_CODE);
- }
- break;
- }
- }
-}
-
-#endif
-