diff --git a/src/ctl.c b/src/ctl.c index f11c92b..5c5c674 100644 --- a/src/ctl.c +++ b/src/ctl.c @@ -36,7 +36,7 @@ ctl_rundir(char *dst, size_t size) return dst; } - errno = EINTR; + errno = EPERM; return NULL; } @@ -151,7 +151,7 @@ ctl_connect(const char *file) if (!file) { if (dp = opendir(dir), !dp) - return -1; + return CTL_ERROR_NONE; struct dirent *d = NULL; @@ -197,3 +197,23 @@ ctl_connect(const char *file) return fd; } + +void +ctl_explain_connect(int ret) +{ + switch (ret) { + case 0: + break; + case CTL_ERROR_MANY: + gt_log("please select a tunnel\n"); + break; + case CTL_ERROR_NONE: + gt_log("no active tunnel\n"); + break; + default: + gt_log("unknown error\n"); /* FALLTHRU */ + case -1: + if (errno) + perror("connect"); + } +} diff --git a/src/ctl.h b/src/ctl.h index 5ed60ca..fa0ca81 100644 --- a/src/ctl.h +++ b/src/ctl.h @@ -48,3 +48,5 @@ int ctl_create (const char *); int ctl_connect (const char *); int ctl_reply (int, struct ctl_msg *, struct ctl_msg *); void ctl_delete (int); + +void ctl_explain_connect (int); diff --git a/src/path.c b/src/path.c index 8cb098f..bb07f49 100644 --- a/src/path.c +++ b/src/path.c @@ -135,19 +135,7 @@ gt_path(int argc, char **argv) int fd = ctl_connect(dev); if (fd < 0) { - switch (fd) { - case -1: - perror("path"); - break; - case CTL_ERROR_NONE: - gt_log("no device\n"); - break; - case CTL_ERROR_MANY: - gt_log("please choose a device\n"); - break; - default: - gt_log("couldn't connect\n"); - } + ctl_explain_connect(fd); return 1; } diff --git a/src/set.c b/src/set.c index b886245..6a0daab 100644 --- a/src/set.c +++ b/src/set.c @@ -54,19 +54,7 @@ gt_set(int argc, char **argv) int fd = ctl_connect(dev); if (fd < 0) { - switch (fd) { - case -1: - perror("set"); - break; - case CTL_ERROR_NONE: - gt_log("no device\n"); - break; - case CTL_ERROR_MANY: - gt_log("please choose a device\n"); - break; - default: - gt_log("couldn't connect\n"); - } + ctl_explain_connect(fd); return 1; } diff --git a/src/show.c b/src/show.c index 3c76984..572ab0e 100644 --- a/src/show.c +++ b/src/show.c @@ -126,19 +126,7 @@ gt_show(int argc, char **argv) int fd = ctl_connect(dev); if (fd < 0) { - switch (fd) { - case -1: - perror("show"); - break; - case CTL_ERROR_NONE: - gt_log("no device\n"); - break; - case CTL_ERROR_MANY: - gt_log("please choose a device\n"); - break; - default: - gt_log("couldn't connect\n"); - } + ctl_explain_connect(fd); return 1; }