/* * Copyright (C) 2019-2020 Scoopta * This file is part of Wofi * Wofi 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. Wofi 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 Wofi. If not, see . */ #include time_t utils_get_time_millis(void) { struct timeval time; gettimeofday(&time, NULL); return (time.tv_sec * 1000) + (time.tv_usec / 1000); } void utils_sleep_millis(time_t millis) { struct timespec time; time.tv_sec = millis / 1000; time.tv_nsec = (millis % 1000) * pow(1000, 2); nanosleep(&time, NULL); } char* utils_concat(size_t arg_count, ...) { va_list args; va_start(args, arg_count); size_t buf_s = 1; for(size_t count = 0; count < arg_count; ++count) { buf_s += strlen(va_arg(args, char*)); } va_end(args); va_start(args, arg_count); char* buffer = malloc(buf_s); strcpy(buffer, va_arg(args, char*)); for(size_t count = 0; count < arg_count - 1; ++count) { strcat(buffer, va_arg(args, char*)); } va_end(args); return buffer; } size_t utils_min(size_t n1, size_t n2) { if(n1 < n2) { return n1; } else { return n2; } } size_t utils_min3(size_t n1, size_t n2, size_t n3) { if(n1 < n2 && n1 < n3) { return n1; } else if(n2 < n1 && n2 < n3) { return n2; } else { return n3; } } size_t utils_distance(const char* str1, const char* str2) { size_t str1_len = strlen(str1); size_t str2_len = strlen(str2); size_t arr[str1_len + 1][str2_len + 1]; arr[0][0] = 0; for(size_t count = 1; count <= str1_len; ++count) { arr[count][0] = count; } for(size_t count = 1; count <= str2_len; ++count) { arr[0][count] = count; } uint8_t cost; for(size_t c1 = 1; c1 <= str1_len; ++c1) { for(size_t c2 = 1; c2 <= str2_len; ++c2) { if(str1[c1 - 1] == str2[c2 - 1]) { cost = 0; } else { cost = 1; } arr[c1][c2] = utils_min3(arr[c1 - 1][c2] + 1, arr[c1][c2 - 1] + 1, arr[c1 - 1][c2 - 1] + cost); } } if(strstr(str1, str2) != NULL) { arr[str1_len][str2_len] -= str2_len; } return arr[str1_len][str2_len]; }