diff --git a/ttynvt.c b/ttynvt.c index 4af1416..c281000 100644 --- a/ttynvt.c +++ b/ttynvt.c @@ -34,9 +34,11 @@ static struct ttynvt_param { unsigned int major; unsigned int minor; const char *dev_name; - char *host; - unsigned int port; + char *server; unsigned int debug; + /* Derived */ + char host[64]; + unsigned int port; } ttynvt_param; typedef struct ttynvt { @@ -799,10 +801,8 @@ static const struct fuse_opt ttynvt_opts[] = { TTYNET_OPT("--min=%u", minor, 1), TTYNET_OPT("-n %s", dev_name, 0), TTYNET_OPT("--name=%s", dev_name, 0), - TTYNET_OPT("-s %s", host, 0), - TTYNET_OPT("--server=%s", host, 0), - TTYNET_OPT("-p %u", port, 0), - TTYNET_OPT("--port=%u", port, 0), + TTYNET_OPT("-S %s", server, 0), + TTYNET_OPT("--server=%s", server, 0), FUSE_OPT_KEY("-h", 0), FUSE_OPT_KEY("--help", 0), FUSE_OPT_END @@ -816,8 +816,7 @@ static void print_help(void) "\t-m minor, --min=minor\n" "\t-n name, --name=name (default: ttyNVT0)\n" "\t\tDevice will be created in /dev/$name.\n" - "\t-s server, --server=host name or IP address\n" - "\t-p port, --port=host port number\n" "\n"); + "\t-S server, --server=host:port\n"); } static int @@ -835,6 +834,7 @@ process_arg(void *data, const char *arg, int key, struct fuse_args *outargs) int main(int argc, char *argv[]) { + int rc; struct fuse_args args = FUSE_ARGS_INIT(argc, argv); char dev_name[128]; @@ -851,6 +851,26 @@ int main(int argc, char *argv[]) if (!ttynvt_param.dev_name) ttynvt_param.dev_name = "ttyNVT0"; + if (!ttynvt_param.server) + { + fprintf(stderr, "Server must be specified\n"); + return 1; + } + + rc = sscanf(ttynvt_param.server, "%63[^:]:%u", ttynvt_param.host, + &ttynvt_param.port); + if (rc <= 1) + { + fprintf(stderr, "Bad server specification: '%s'\n", + ttynvt_param.server); + return 1; + } + if (ttynvt_param.port == 0) + { + fprintf(stderr, "Bad server port: %u\n", ttynvt_param.port); + return 1; + } + snprintf(dev_name, sizeof(dev_name), "DEVNAME=%s", ttynvt_param.dev_name); struct cuse_info ci = {