X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Futils.c;h=70a5c99d70c52532a188a6ac7fdb6ebb239129bc;hp=656f1ea41ac38b46f243a6c67f3658327408b359;hb=3fae14fae5a347823679ef694ab630b4991a201d;hpb=985d19caf20058db3c764f0f6fbeafa8bcc59fcc;ds=sidebyside diff --git a/src/utils.c b/src/utils.c index 656f1ea4..70a5c99d 100644 --- a/src/utils.c +++ b/src/utils.c @@ -26,23 +26,28 @@ static const char hexadecimals[] = "0123456789ABCDEF"; static int charhex2bin(char c) { - if(isdigit(c)) + if(isdigit(c)) { return c - '0'; - else + } else { return toupper(c) - 'A' + 10; + } } bool hex2bin(char *src, char *dst, int length) { for(int i = 0; i < length; i++) { - if(!isxdigit(src[i * 2]) || !isxdigit(src[i * 2 + 1])) + if(!isxdigit(src[i * 2]) || !isxdigit(src[i * 2 + 1])) { return false; + } + dst[i] = charhex2bin(src[i * 2]) * 16 + charhex2bin(src[i * 2 + 1]); } + return true; } void bin2hex(char *src, char *dst, int length) { int i; + for(i = length - 1; i >= 0; i--) { dst[i * 2 + 1] = hexadecimals[(unsigned char) src[i] & 15]; dst[i * 2] = hexadecimals[(unsigned char) src[i] >> 4]; @@ -59,13 +64,14 @@ const char *winerror(int err) { ptr = buf + sprintf(buf, "(%d) ", err); - if (!FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), ptr, sizeof(buf) - (ptr - buf), NULL)) { + if(!FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), ptr, sizeof(buf) - (ptr - buf), NULL)) { strcpy(ptr, "(unable to format errormessage)"); }; - if((ptr = strchr(buf, '\r'))) + if((ptr = strchr(buf, '\r'))) { *ptr = '\0'; + } return buf; } @@ -73,8 +79,11 @@ const char *winerror(int err) { unsigned int bitfield_to_int(const void *bitfield, size_t size) { unsigned int value = 0; - if(size > sizeof(value)) + + if(size > sizeof(value)) { size = sizeof(value); + } + memcpy(&value, bitfield, size); return value; } @@ -83,13 +92,14 @@ unsigned int bitfield_to_int(const void *bitfield, size_t size) { * As memcmp(), but constant-time. * Returns 0 when data is equal, non-zero otherwise. */ -int memcmp_constant_time (const void *a, const void *b, size_t size) { - const uint8_t *a1 = a, *b1 = b; - int ret = 0; - size_t i; +int memcmp_constant_time(const void *a, const void *b, size_t size) { + const uint8_t *a1 = a, *b1 = b; + int ret = 0; + size_t i; - for (i = 0; i < size; i++) - ret |= *a1++ ^ *b1++; + for(i = 0; i < size; i++) { + ret |= *a1++ ^ *b1++; + } - return ret; + return ret; }