aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael G. Martins <rafael@rafaelmartins.eng.br>2018-07-25 20:34:58 +0200
committerRafael G. Martins <rafael@rafaelmartins.eng.br>2018-07-25 22:28:41 +0200
commit008b956ba609bf30d8c6f44c36d9f11cdc493bc2 (patch)
tree69fac42a072944bd8eefaf4a4d04e185faef8b5e
parente4c08cd44e37f28cd11d62a95f4791ace663c62d (diff)
downloadblogc-008b956ba609bf30d8c6f44c36d9f11cdc493bc2.tar.gz
blogc-008b956ba609bf30d8c6f44c36d9f11cdc493bc2.tar.bz2
blogc-008b956ba609bf30d8c6f44c36d9f11cdc493bc2.zip
common: added bc_str_to_bool
-rw-r--r--src/common/utils.c26
-rw-r--r--src/common/utils.h1
-rw-r--r--tests/common/check_utils.c26
3 files changed, 53 insertions, 0 deletions
diff --git a/src/common/utils.c b/src/common/utils.c
index 563d8ab..7065047 100644
--- a/src/common/utils.c
+++ b/src/common/utils.c
@@ -9,6 +9,7 @@
#define BC_STRING_CHUNK_SIZE 128
#include <string.h>
+#include <strings.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdlib.h>
@@ -302,6 +303,31 @@ bc_str_find(const char *str, char c)
}
+bool
+bc_str_to_bool(const char *str)
+{
+ if (str == NULL)
+ return false;
+
+ if (0 == strcmp(str, "1"))
+ return true;
+
+ if (0 == strcasecmp(str, "y"))
+ return true;
+
+ if (0 == strcasecmp(str, "yes"))
+ return true;
+
+ if (0 == strcasecmp(str, "true"))
+ return true;
+
+ if (0 == strcasecmp(str, "on"))
+ return true;
+
+ return false;
+}
+
+
void
bc_strv_free(char **strv)
{
diff --git a/src/common/utils.h b/src/common/utils.h
index 0f05c96..101a4b3 100644
--- a/src/common/utils.h
+++ b/src/common/utils.h
@@ -50,6 +50,7 @@ char* bc_str_strip(char *str);
char** bc_str_split(const char *str, char c, size_t max_pieces);
char* bc_str_replace(const char *str, const char search, const char *replace);
char* bc_str_find(const char *str, char c);
+bool bc_str_to_bool(const char *str);
void bc_strv_free(char **strv);
char* bc_strv_join(char **strv, const char *separator);
size_t bc_strv_length(char **strv);
diff --git a/tests/common/check_utils.c b/tests/common/check_utils.c
index 12ef921..90af37b 100644
--- a/tests/common/check_utils.c
+++ b/tests/common/check_utils.c
@@ -268,6 +268,31 @@ test_str_find(void **state)
static void
+test_str_to_bool(void **state)
+{
+ assert_false(bc_str_to_bool(NULL));
+ assert_true(bc_str_to_bool("1"));
+ assert_true(bc_str_to_bool("y"));
+ assert_true(bc_str_to_bool("Y"));
+ assert_true(bc_str_to_bool("yes"));
+ assert_true(bc_str_to_bool("YES"));
+ assert_true(bc_str_to_bool("true"));
+ assert_true(bc_str_to_bool("TRUE"));
+ assert_true(bc_str_to_bool("on"));
+ assert_true(bc_str_to_bool("ON"));
+ assert_false(bc_str_to_bool("0"));
+ assert_false(bc_str_to_bool("n"));
+ assert_false(bc_str_to_bool("N"));
+ assert_false(bc_str_to_bool("no"));
+ assert_false(bc_str_to_bool("NO"));
+ assert_false(bc_str_to_bool("false"));
+ assert_false(bc_str_to_bool("FALSE"));
+ assert_false(bc_str_to_bool("off"));
+ assert_false(bc_str_to_bool("OFF"));
+}
+
+
+static void
test_strv_join(void **state)
{
char *pieces[] = {"guda","bola", "chunda", NULL};
@@ -1039,6 +1064,7 @@ main(void)
unit_test(test_str_split),
unit_test(test_str_replace),
unit_test(test_str_find),
+ unit_test(test_str_to_bool),
unit_test(test_strv_join),
unit_test(test_strv_length),