Cosmetics of various sorts
Also in srv_connect() (renamed from ttynvt_connect()), close newly crated socket in a couple of error paths.
This commit is contained in:
@@ -33,7 +33,7 @@
|
|||||||
static struct ttynvt_param {
|
static struct ttynvt_param {
|
||||||
unsigned int major;
|
unsigned int major;
|
||||||
unsigned int minor;
|
unsigned int minor;
|
||||||
char *dev_name;
|
const char *dev_name;
|
||||||
char *host;
|
char *host;
|
||||||
unsigned int port;
|
unsigned int port;
|
||||||
unsigned int debug;
|
unsigned int debug;
|
||||||
@@ -216,49 +216,56 @@ static void *ttynvt_read_net(void *arg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ttynvt_connect(const char *host, unsigned int port)
|
static int srv_connect(const char *host, unsigned int port)
|
||||||
{
|
{
|
||||||
|
|
||||||
struct sockaddr_in serveraddr;
|
struct sockaddr_in serveraddr;
|
||||||
struct hostent *server;
|
struct hostent *server;
|
||||||
|
int sockfd, err;
|
||||||
|
|
||||||
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
|
sockfd = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
|
||||||
if (sockfd < 0)
|
if (sockfd < 0)
|
||||||
{
|
{
|
||||||
ttynvt_log(LOG_ERR, "Socket open failed: %s\n", strerror(errno));
|
ttynvt_log(LOG_ERR, "Socket open failed: %s\n", strerror(errno));
|
||||||
return sockfd;
|
return sockfd;
|
||||||
}
|
}
|
||||||
|
|
||||||
server = gethostbyname(host);
|
server = gethostbyname(host);
|
||||||
if (server == NULL)
|
if (server == NULL)
|
||||||
{
|
{
|
||||||
ttynvt_log(LOG_ERR, "Cannot resolve host name: %s\n", strerror(errno));
|
ttynvt_log(LOG_ERR, "Cannot resolve host name: %s\n", strerror(errno));
|
||||||
|
close(sockfd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bzero((char *)&serveraddr, sizeof(serveraddr));
|
bzero((char *)&serveraddr, sizeof(serveraddr));
|
||||||
serveraddr.sin_family = AF_INET;
|
serveraddr.sin_family = AF_INET;
|
||||||
bcopy((char *)server->h_addr, (char *)&serveraddr.sin_addr.s_addr,
|
bcopy((char *)server->h_addr, (char *)&serveraddr.sin_addr.s_addr,
|
||||||
server->h_length);
|
server->h_length);
|
||||||
serveraddr.sin_port = htons(port);
|
serveraddr.sin_port = htons(port);
|
||||||
|
|
||||||
if (connect
|
err = connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
|
||||||
(sockfd, (const struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0)
|
if (err < 0)
|
||||||
{
|
{
|
||||||
ttynvt_log(LOG_ERR, "Failed to connect to: %s:%u:%s\n",
|
ttynvt_log(LOG_ERR, "Failed to connect to: %s:%u:%s\n",
|
||||||
host, port, strerror(errno));
|
host, port, strerror(errno));
|
||||||
|
close(sockfd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return sockfd;
|
return sockfd;
|
||||||
}
|
}
|
||||||
|
|
||||||
int srv_write(void *cctx, const void *buf, int len)
|
static int srv_write(void *cctx, const void *buf, int len)
|
||||||
{
|
{
|
||||||
ttynvt_t *tty = cctx;
|
ttynvt_t *tty = cctx;
|
||||||
|
int res;
|
||||||
|
|
||||||
return write(tty->fds[0].fd, buf, len);
|
res = write(tty->fds[0].fd, buf, len);
|
||||||
|
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
int srv_read(void *cctx, int timeout)
|
static int srv_read(void *cctx, int timeout)
|
||||||
{
|
{
|
||||||
ttynvt_t *tty = cctx;
|
ttynvt_t *tty = cctx;
|
||||||
int res;
|
int res;
|
||||||
@@ -287,7 +294,7 @@ int srv_read(void *cctx, int timeout)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void modem_status_cb(void *cctx, int status)
|
static void modem_status_cb(void *cctx, int status)
|
||||||
{
|
{
|
||||||
ttynvt_t *tty = cctx;
|
ttynvt_t *tty = cctx;
|
||||||
|
|
||||||
@@ -327,7 +334,7 @@ static void ttynvt_open(fuse_req_t req, struct fuse_file_info *info)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sockfd = ttynvt_connect(ttynvt_param.host, ttynvt_param.port);
|
sockfd = srv_connect(ttynvt_param.host, ttynvt_param.port);
|
||||||
if (sockfd < 0)
|
if (sockfd < 0)
|
||||||
{
|
{
|
||||||
free(tty->tn);
|
free(tty->tn);
|
||||||
@@ -760,8 +767,10 @@ ttynvt_poll(fuse_req_t req, struct fuse_file_info *info,
|
|||||||
|
|
||||||
if (ttynvt_write_avail(tty) > 0)
|
if (ttynvt_write_avail(tty) > 0)
|
||||||
revents |= POLLOUT;
|
revents |= POLLOUT;
|
||||||
|
|
||||||
if (ttynvt_read_avail(tty) > 0)
|
if (ttynvt_read_avail(tty) > 0)
|
||||||
revents |= POLLIN;
|
revents |= POLLIN;
|
||||||
|
|
||||||
if (tty->error)
|
if (tty->error)
|
||||||
{
|
{
|
||||||
if (tty->epipe == 0)
|
if (tty->epipe == 0)
|
||||||
@@ -830,7 +839,7 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
struct fuse_args args = FUSE_ARGS_INIT(argc, argv);
|
struct fuse_args args = FUSE_ARGS_INIT(argc, argv);
|
||||||
|
|
||||||
char dev_name[128] = { 0 };
|
char dev_name[128];
|
||||||
const char *dev_info_argv[] = { dev_name };
|
const char *dev_info_argv[] = { dev_name };
|
||||||
|
|
||||||
openlog("ttynvt", LOG_PID, LOG_DAEMON);
|
openlog("ttynvt", LOG_PID, LOG_DAEMON);
|
||||||
@@ -841,13 +850,15 @@ int main(int argc, char *argv[])
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(dev_name, sizeof(dev_name), "DEVNAME=%s",
|
if (!ttynvt_param.dev_name)
|
||||||
ttynvt_param.dev_name ? ttynvt_param.dev_name : "ttyNVT0");
|
ttynvt_param.dev_name = "ttyNVT0";
|
||||||
|
|
||||||
|
snprintf(dev_name, sizeof(dev_name), "DEVNAME=%s", ttynvt_param.dev_name);
|
||||||
|
|
||||||
struct cuse_info ci = {
|
struct cuse_info ci = {
|
||||||
.dev_major = ttynvt_param.major,
|
.dev_major = ttynvt_param.major,
|
||||||
.dev_minor = ttynvt_param.minor,
|
.dev_minor = ttynvt_param.minor,
|
||||||
.dev_info_argc = 1,
|
.dev_info_argc = sizeof(dev_info_argv) / sizeof(char *),
|
||||||
.dev_info_argv = dev_info_argv,
|
.dev_info_argv = dev_info_argv,
|
||||||
.flags = CUSE_UNRESTRICTED_IOCTL,
|
.flags = CUSE_UNRESTRICTED_IOCTL,
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user