Well, it's not exactly safe, but I bet it'll do for now

This commit is contained in:
XANTRONIX Development 2015-07-12 02:16:26 -05:00
parent be35812bb4
commit 45df26382f

56
src/kiss.c Normal file
View file

@ -0,0 +1,56 @@
#include <patty/kiss.h>
enum kiss_flags {
KISS_NONE = 0x00,
KISS_FRAME = 0x01,
KISS_ESCAPE = 0x02
};
int patty_kiss_read(int fd, void *buf, size_t *len, int *channel) {
int flags = KISS_NONE;
size_t i, b = 0;
*channel = 0;
for (i=0; i<PATTY_KISS_BUFLEN; i++) {
unsigned char c = ((char *)buf)[i];
if (flags & KISS_FRAME == 0) {
if (c == PATTY_KISS_FEND) {
flags |= KISS_FRAME;
}
continue;
}
if (flags & KISS_ESCAPE) {
if (c == PATTY_KISS_TFEND) {
((char *)buf)[b++] = PATTY_KISS_FEND;
} else if (c == PATTY_KISS_TFESC) {
((char *)buf)[b++] = PATTY_KISS_FESC;
}
flags &= ~KISS_ESCAPE;
continue;
}
if (flags & KISS_FRAME) {
if (c == PATTY_KISS_FESC) {
flags |= KISS_ESCAPE;
continue;
} else if (c == PATTY_KISS_FEND) {
flags &= ~KISS_FRAME;
break;
}
((char *)buf)[b++] = c;
}
}
*len = b + 1;
return 0;
}