From fc6d64207886ac6921d8f13587c158bfaae76839 Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Sat, 9 Aug 2014 18:03:54 +0000 Subject: toxcore sources added git-svn-id: http://svn.miranda-ng.org/main/trunk@10139 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/Tox/toxcore/testing/misc_tools.c | 86 ++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 protocols/Tox/toxcore/testing/misc_tools.c (limited to 'protocols/Tox/toxcore/testing/misc_tools.c') diff --git a/protocols/Tox/toxcore/testing/misc_tools.c b/protocols/Tox/toxcore/testing/misc_tools.c new file mode 100644 index 0000000000..ad6b2bff4a --- /dev/null +++ b/protocols/Tox/toxcore/testing/misc_tools.c @@ -0,0 +1,86 @@ +/* misc_tools.c + * + * Miscellaneous functions and data structures for doing random things. + * + * Copyright (C) 2013 Tox project All Rights Reserved. + * + * This file is part of Tox. + * + * Tox is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tox is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Tox. If not, see . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +#ifdef DEBUG +#include +#endif // DEBUG + +// You are responsible for freeing the return value! +uint8_t *hex_string_to_bin(char *hex_string) +{ + // byte is represented by exactly 2 hex digits, so lenth of binary string + // is half of that of the hex one. only hex string with even length + // valid. the more proper implementation would be to check if strlen(hex_string) + // is odd and return error code if it is. we assume strlen is even. if it's not + // then the last byte just won't be written in 'ret'. + size_t i, len = strlen(hex_string) / 2; + uint8_t *ret = malloc(len); + char *pos = hex_string; + + for (i = 0; i < len; ++i, pos += 2) + sscanf(pos, "%2hhx", &ret[i]); + + return ret; +} + +int cmdline_parsefor_ipv46(int argc, char **argv, uint8_t *ipv6enabled) +{ + int argvoffset = 0, argi; + + for (argi = 1; argi < argc; argi++) + if (!strncasecmp(argv[argi], "--ipv", 5)) { + if (argv[argi][5] && !argv[argi][6]) { + char c = argv[argi][5]; + + if (c == '4') + *ipv6enabled = 0; + else if (c == '6') + *ipv6enabled = 1; + else { + printf("Invalid argument: %s. Try --ipv4 or --ipv6!\n", argv[argi]); + return -1; + } + } else { + printf("Invalid argument: %s. Try --ipv4 or --ipv6!\n", argv[argi]); + return -1; + } + + if (argvoffset != argi - 1) { + printf("Argument must come first: %s.\n", argv[argi]); + return -1; + } + + argvoffset++; + } + + return argvoffset; +}; -- cgit v1.2.3