diff options
Diffstat (limited to 'lib/src/policy.c')
-rw-r--r-- | lib/src/policy.c | 73 |
1 files changed, 44 insertions, 29 deletions
diff --git a/lib/src/policy.c b/lib/src/policy.c index 694f0ea5e..0b4850b93 100644 --- a/lib/src/policy.c +++ b/lib/src/policy.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 Cisco and/or its affiliates. + * Copyright (c) 2021 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -21,41 +21,56 @@ #include <stdio.h> #include <hicn/policy.h> -const char * policy_tag_str[] = { - #define _(x, y) [POLICY_TAG_ ## x] = STRINGIZE(x), - foreach_policy_tag - #undef _ +const char *policy_tag_str[] = { +#define _(x, y) [POLICY_TAG_##x] = STRINGIZE (x), + foreach_policy_tag +#undef _ }; const char policy_tag_short_str[] = { - #define _(x, y) [POLICY_TAG_ ## x] = y, - foreach_policy_tag - #undef _ +#define _(x, y) [POLICY_TAG_##x] = y, + foreach_policy_tag +#undef _ }; -const char * policy_state_str[] = { - #define _(x) [POLICY_STATE_ ## x] = STRINGIZE(x), - foreach_policy_state - #undef _ +const char *policy_state_str[] = { +#define _(x) [POLICY_STATE_##x] = STRINGIZE (x), + foreach_policy_state +#undef _ }; +policy_state_t +policy_state_from_str (const char *str) +{ +#define _(x) \ + if (strcasecmp (str, #x) == 0) \ + return POLICY_STATE_##x; \ + else + foreach_policy_state +#undef _ + return POLICY_STATE_N; +} + int -policy_tag_state_snprintf(char * s, size_t size, const policy_tag_state_t * tag_state) +policy_tag_state_snprintf (char *s, size_t size, + const policy_tag_state_t *tag_state) { - char *cur = s; - int rc; - - if (tag_state->disabled > 1) - return -1; - - rc = snprintf(cur, s + size - cur, "%s%s", (tag_state->disabled == 1) ? "!" : "", policy_state_str[tag_state->state]); - if (rc >= (int)(s + size - cur)) - return (int)(s + size - cur); - if (rc < 0) - return rc; - cur += rc; - if (size != 0 && cur >= s + size) - return (int)(cur - s); - - return (int)(cur - s); + char *cur = s; + int rc; + + if (tag_state->disabled > 1) + return -1; + + rc = snprintf (cur, s + size - cur, "%s%s", + (tag_state->disabled == 1) ? "!" : "", + policy_state_str[tag_state->state]); + if (rc >= (int) (s + size - cur)) + return (int) (s + size - cur); + if (rc < 0) + return rc; + cur += rc; + if (size != 0 && cur >= s + size) + return (int) (cur - s); + + return (int) (cur - s); } |