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:
parent
ede262397b
commit
d7ab08338c
2 changed files with 25 additions and 11 deletions
|
@ -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);
|
||||
|
|
34
src/kiss.c
34
src/kiss.c
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue