#include #include #include "netascii.h" uint8_t is_netascii_char(char c) { static const uint64_t LUT[4] = {0xffffffff00003f81, 0x7fffffffffffffff, 0x00,0x00}; int i = c / 64; int e = i % 64; return (LUT[i] >> e) & 1; } /// WARNING! This function is NOT safe. Use only for strings you have already /// verified are NULL terminated! uint8_t is_netascii_str(char *str) { for (uint64_t i = 0; str[i] != 0; i++) { if (!is_netascii_char(str[i])) { return 0; } else { if (str[i] == '\r') { if (str[++i] != '\n') { return 0; } } } } return 1; } uint8_t is_netascii_buf(char *buf, size_t len) { for (uint64_t i = 0; i < len; i++) { if (!is_netascii_char(buf[i])) { return 0; } else { if (buf[i] == '\r') { if ((i + 1) < len) { switch (buf[++i]) { case 0: case '\n': break; default: return 0; } } else { return 0; } } } } return 1; }