-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.c
63 lines (54 loc) · 1.36 KB
/
utils.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "utils.h"
/**--
bytearray
--**/
// https://gist.github.com/xsleonard/7341172
bytearray hexstr_to_bytearray(const char* hexstr)
{
size_t len = strlen(hexstr);
size_t final_len = len / 2;
bytearray bytes = {malloc(final_len), final_len};
for (size_t i=0, j=0; j<final_len; i+=2, j++)
bytes.data[j] = (hexstr[i] % 32 + 9) % 25 * 16 + (hexstr[i+1] % 32 + 9) % 25;
return bytes;
}
void _debug_bytearray(char *name, bytearray b) {
printf("%s: .len = %lu, .data = ", name, b.len);
for (size_t i = 0; i<b.len; i++) {
printf("%02x", b.data[i]);
}
puts("");
}
/**--
port list
--**/
port_list parse_port_list(char* ports_str)
{
int nr = 0;
for (int i = 0; ports_str[i] != 0; i++) {
nr += (ports_str[i] == ',');
}
int len = nr + 1;
port_list ret = (port_list) { .ports = malloc(sizeof(uint16_t) * nr), .len = len };
char* next = ports_str;
for (int i = 0; i < len; i++) {
ret.ports[i] = strtoul(next, &next, 10);
next++;
}
return ret;
}
void print_port_list(port_list self) {
putc('[', stdout);
for (int i = 0; i < self.len; i++) {
printf("%u, ", self.ports[i]);
}
puts("]");
}
void free_port_list(port_list self)
{
free(self.ports);
}