7 const char *program_name;
9 void syscall_error(const char *err)
15 void internal_error(const char *err)
17 fprintf(stderr, "%s: %s\n", program_name, err);
21 char *read_string(int fd, size_t bufsiz)
25 for (size_t i = 0;; i++) {
27 if (read(fd, &c, 1) == -1) {
33 if (c == EOF || c == 0)
39 char *address_string(struct sockaddr_in6 *addr)
41 char address[INET6_ADDRSTRLEN] = {0};
44 if (inet_ntop(addr->sin6_family, &addr->sin6_addr, address, INET6_ADDRSTRLEN) == NULL)
46 sprintf(port, "%d", ntohs(addr->sin6_port));
48 char *result = malloc(strlen(address) + 1 + strlen(port) + 1);
49 sprintf(result, "%s:%s", address, port);
53 v3f html_to_v3f(const char *html)
56 sscanf(html, "#%2x%2x%2x", &r, &g, &b);
57 return (v3f) {(float) r / 255.0f, (float) g / 255.0f, (float) b / 255.0f};