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;
|
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);
|
patty_kiss_tnc *patty_kiss_tnc_open(const char *device, size_t bufsize);
|
||||||
|
|
||||||
int patty_kiss_tnc_fd_unix(patty_kiss_tnc *tnc);
|
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 {
|
struct _patty_kiss_tnc {
|
||||||
const char * device;
|
|
||||||
|
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
void *buf,
|
void *buf,
|
||||||
|
@ -30,7 +28,7 @@ struct _patty_kiss_tnc {
|
||||||
dropped;
|
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;
|
patty_kiss_tnc *tnc;
|
||||||
|
|
||||||
if ((tnc = malloc(sizeof(*tnc))) == NULL) {
|
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;
|
goto error_malloc_frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((tnc->fd = open(device, O_RDWR)) < 0) {
|
tnc->fd = fd;
|
||||||
goto error_open;
|
|
||||||
}
|
|
||||||
|
|
||||||
tnc->device = device;
|
|
||||||
tnc->bufsz = bufsz;
|
tnc->bufsz = bufsz;
|
||||||
tnc->buflen = 0;
|
tnc->buflen = 0;
|
||||||
tnc->dropped = 0;
|
tnc->dropped = 0;
|
||||||
|
|
||||||
return tnc;
|
return tnc;
|
||||||
|
|
||||||
error_open:
|
|
||||||
free(tnc->frame);
|
|
||||||
|
|
||||||
error_malloc_frame:
|
error_malloc_frame:
|
||||||
free(tnc->buf);
|
free(tnc->buf);
|
||||||
|
|
||||||
|
@ -69,6 +60,27 @@ error_malloc_tnc:
|
||||||
return NULL;
|
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) {
|
int patty_kiss_tnc_fd_unix(patty_kiss_tnc *tnc) {
|
||||||
return tnc->fd;
|
return tnc->fd;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue