summaryrefslogtreecommitdiffstats
path: root/src/test.c
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2023-06-21 03:04:54 +0200
committerLouis Burda <quent.burda@gmail.com>2023-06-21 03:20:09 +0200
commit4cb68fb41e7109f1f8c293b5ff08ae818f45cebe (patch)
tree7e3b1920cb51bb1f51af86f7fd9de12c1eed711b /src/test.c
parente940cc8f0a57f04299bdc1b995981bab4c24f971 (diff)
downloadlibslip-c-master.tar.gz
libslip-c-master.zip
Add build.jst, fixup slip_init and add testHEADmaster
Diffstat (limited to 'src/test.c')
-rw-r--r--src/test.c87
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);
+}