diff options
| author | Louis Burda <quent.burda@gmail.com> | 2023-06-21 03:04:54 +0200 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2023-06-21 03:20:09 +0200 |
| commit | 4cb68fb41e7109f1f8c293b5ff08ae818f45cebe (patch) | |
| tree | 7e3b1920cb51bb1f51af86f7fd9de12c1eed711b /src/test.c | |
| parent | e940cc8f0a57f04299bdc1b995981bab4c24f971 (diff) | |
| download | libslip-c-master.tar.gz libslip-c-master.zip | |
Diffstat (limited to 'src/test.c')
| -rw-r--r-- | src/test.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/test.c b/src/test.c new file mode 100644 index 0000000..82da068 --- /dev/null +++ b/src/test.c @@ -0,0 +1,87 @@ +#include "slip.h" + +#include <string.h> +#include <stdarg.h> +#include <stdio.h> + +void +die(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + fputs("libslip-test: ", stderr); + vfprintf(stderr, fmt, ap); + if (*fmt && fmt[strlen(fmt) - 1] == ':') { + fputc(' ', stderr); + perror(NULL); + } else { + fputc('\n', stderr); + } + va_end(ap); + + exit(1); +} + +int +slip_realloc(void **buf, size_t size) +{ + *buf = realloc(*buf, size); + if (!*buf) die("realloc:"); + + return 0; +} + +void +slip_restart(struct slip *slip, uint8_t b) +{ + printf("RESTART due to '%02x' byte\n", b); +} + +void +slip_rx(struct slip *slip, uint8_t *data, size_t len, void *user) +{ + printf("PACKET %.*s\n", (int) len, data); +} + +int +main(int argc, const char **argv) +{ + uint8_t iobuf[BUFSIZ]; + uint8_t encbuf[BUFSIZ * 2 + 2]; + struct slip slip = { 0 }; + size_t enclen, nread; + int rc; + + slip.realloc = slip_realloc; + slip.rx_packet = slip_rx; + slip.rx_restart = slip_restart; + slip.esc = '\\'; + slip.start = '<'; + slip.end = '>'; + slip.esc_active['\\'] = true; + slip.esc_enc['\\'] = '\\'; + slip.esc_active['<'] = true; + slip.esc_enc['<'] = '<'; + slip.esc_active['>'] = true; + slip.esc_enc['>'] = '>'; + + rc = slip_init(&slip); + if (rc) die("slip_init"); + + if (argc == 2 && !strcmp(argv[1], "-d")) { + while ((nread = fread(iobuf, 1, sizeof(iobuf), stdin))) { + rc = slip_decode(&slip, iobuf, nread); + if (rc) die("slip_decode"); + } + } else { + while ((nread = fread(iobuf, 1, sizeof(iobuf), stdin))) { + rc = slip_encode(&slip, encbuf, &enclen, + sizeof(encbuf), iobuf, nread); + if (rc) die("slip_encode"); + fwrite(encbuf, 1, enclen, stdout); + } + } + + slip_deinit(&slip); +} |
