Implement patty_kiss_tnc_open_fd()

Implement patty_kiss_tnc_open_fd() to create a TNC object for an
existing Unix file descriptor
This commit is contained in:
XANTRONIX Development 2020-05-27 18:35:23 -04:00 committed by XANTRONIX Industrial
parent ede262397b
commit d7ab08338c
2 changed files with 25 additions and 11 deletions

View file

@ -29,6 +29,8 @@ enum patty_kiss_command {
typedef struct _patty_kiss_tnc patty_kiss_tnc;
patty_kiss_tnc *patty_kiss_tnc_open_fd(int fd, size_t bufsize);
patty_kiss_tnc *patty_kiss_tnc_open(const char *device, size_t bufsize);
int patty_kiss_tnc_fd_unix(patty_kiss_tnc *tnc);

View file

@ -18,8 +18,6 @@ enum kiss_flags {
};
struct _patty_kiss_tnc {
const char * device;
int fd;
void *buf,
@ -30,7 +28,7 @@ struct _patty_kiss_tnc {
dropped;
};
patty_kiss_tnc *patty_kiss_tnc_open(const char *device, size_t bufsz) {
patty_kiss_tnc *patty_kiss_tnc_open_fd(int fd, size_t bufsz) {
patty_kiss_tnc *tnc;
if ((tnc = malloc(sizeof(*tnc))) == NULL) {
@ -45,20 +43,13 @@ patty_kiss_tnc *patty_kiss_tnc_open(const char *device, size_t bufsz) {
goto error_malloc_frame;
}
if ((tnc->fd = open(device, O_RDWR)) < 0) {
goto error_open;
}
tnc->device = device;
tnc->fd = fd;
tnc->bufsz = bufsz;
tnc->buflen = 0;
tnc->dropped = 0;
return tnc;
error_open:
free(tnc->frame);
error_malloc_frame:
free(tnc->buf);
@ -69,6 +60,27 @@ error_malloc_tnc:
return NULL;
}
patty_kiss_tnc *patty_kiss_tnc_open(const char *device, size_t bufsz) {
patty_kiss_tnc *tnc;
int fd;
if ((fd = open(device, O_RDWR)) < 0) {
goto error_open;
}
if ((tnc = patty_kiss_tnc_open_fd(fd, bufsz)) == NULL) {
goto error_tnc_open_fd;
}
return tnc;
error_tnc_open_fd:
close(fd);
error_open:
return NULL;
}
int patty_kiss_tnc_fd_unix(patty_kiss_tnc *tnc) {
return tnc->fd;
}