Do not use UI functions (uistatus) when output not a term - sacc - sacc(omys), … | |
git clone git://bitreich.org/sacc/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65… | |
Log | |
Files | |
Refs | |
Tags | |
LICENSE | |
--- | |
commit bb8924f35719c580e9fa543a4cbea1258f764acf | |
parent 43803bed9713d10bf08e93ca0a48298be15e9cdf | |
Author: Quentin Rameau <[email protected]> | |
Date: Mon, 20 Aug 2018 11:07:48 +0200 | |
Do not use UI functions (uistatus) when output not a term | |
Diffstat: | |
M sacc.c | 59 +++++++++++++++++++----------… | |
1 file changed, 37 insertions(+), 22 deletions(-) | |
--- | |
diff --git a/sacc.c b/sacc.c | |
@@ -28,6 +28,19 @@ static int devnullfd; | |
static int parent = 1; | |
static int interactive; | |
+static void (*diag)(char *fmt, ...); | |
+ | |
+void | |
+stddiag(char *fmt, ...) | |
+{ | |
+ va_list arg; | |
+ | |
+ va_start(arg, fmt); | |
+ vfprintf(stderr, fmt, arg); | |
+ va_end(arg); | |
+ fputc('\n', stderr); | |
+} | |
+ | |
void | |
die(const char *fmt, ...) | |
{ | |
@@ -267,7 +280,7 @@ displaytextitem(Item *item) | |
uicleanup(); | |
switch (pid = fork()) { | |
case -1: | |
- uistatus("Couldn't fork."); | |
+ diag("Couldn't fork."); | |
return; | |
case 0: | |
parent = 0; | |
@@ -353,7 +366,7 @@ molddiritem(char *raw) | |
if (!strcmp(s, ".\r\n") || !strcmp(s, ".\n")) | |
--nitems; | |
if (!nitems) { | |
- uistatus("Couldn't parse dir item"); | |
+ diag("Couldn't parse dir item"); | |
return NULL; | |
} | |
@@ -404,7 +417,7 @@ getrawitem(int sock) | |
*buf = '\0'; | |
if (n < 0) { | |
- uistatus("Can't read socket: %s", strerror(errno)); | |
+ diag("Can't read socket: %s", strerror(errno)); | |
clear(&raw); | |
} | |
@@ -429,7 +442,7 @@ sendselector(int sock, const char *selector) | |
free(msg); | |
if (n == -1) | |
- uistatus("Can't send message: %s", strerror(errno)); | |
+ diag("Can't send message: %s", strerror(errno)); | |
return n; | |
} | |
@@ -446,8 +459,8 @@ connectto(const char *host, const char *port) | |
int sock, r; | |
if (r = getaddrinfo(host, port, &hints, &addrs)) { | |
- uistatus("Can't resolve hostname \"%s\": %s", | |
- host, gai_strerror(r)); | |
+ diag("Can't resolve hostname \"%s\": %s", | |
+ host, gai_strerror(r)); | |
return -1; | |
} | |
@@ -462,12 +475,12 @@ connectto(const char *host, const char *port) | |
break; | |
} | |
if (sock < 0) { | |
- uistatus("Can't open socket: %s", strerror(errno)); | |
+ diag("Can't open socket: %s", strerror(errno)); | |
return -1; | |
} | |
if (r < 0) { | |
- uistatus("Can't connect to: %s:%s: %s", | |
- host, port, strerror(errno)); | |
+ diag("Can't connect to: %s:%s: %s", | |
+ host, port, strerror(errno)); | |
return -1; | |
} | |
@@ -538,8 +551,8 @@ downloaditem(Item *item) | |
} | |
if ((dest = open(path, O_WRONLY|O_CREAT|O_EXCL, mode)) < 0) { | |
- uistatus("Can't open destination file %s: %s", | |
- path, strerror(errno)); | |
+ diag("Can't open destination file %s: %s", | |
+ path, strerror(errno)); | |
errno = 0; | |
goto cleanup; | |
} | |
@@ -567,7 +580,7 @@ fetchitem(Item *item) | |
close(sock); | |
if (item->raw && !*item->raw) { | |
- uistatus("Empty response from server"); | |
+ diag("Empty response from server"); | |
clear(&item->raw); | |
} | |
@@ -579,7 +592,7 @@ plumb(char *url) | |
{ | |
switch (fork()) { | |
case -1: | |
- uistatus("Couldn't fork."); | |
+ diag("Couldn't fork."); | |
return; | |
case 0: | |
parent = 0; | |
@@ -589,7 +602,7 @@ plumb(char *url) | |
_exit(1); | |
} | |
- uistatus("Plumbed \"%s\"", url); | |
+ diag("Plumbed \"%s\"", url); | |
} | |
static void | |
@@ -627,8 +640,8 @@ plumbitem(Item *item) | |
if (path && (!tag || strcmp(tag, path))) { | |
if ((dest = open(path, O_WRONLY|O_CREAT|O_EXCL, mode)) < 0) { | |
- uistatus("Can't open destination file %s: %s", | |
- path, strerror(errno)); | |
+ diag("Can't open destination file %s: %s", | |
+ path, strerror(errno)); | |
errno = 0; | |
goto cleanup; | |
} | |
@@ -699,8 +712,7 @@ dig(Item *entry, Item *item) | |
return 0; | |
default: | |
if (t >= '0' && t <= 'Z') { | |
- uistatus("Type %c (%s) not supported", | |
- t, typedisplay(t)); | |
+ diag("Type %c (%s) not supported", t, typedisplay(t)); | |
return 0; | |
} | |
case 'g': | |
@@ -795,8 +807,8 @@ delve(Item *hole) | |
entry = hole; | |
break; | |
case 0: | |
- uistatus("Couldn't get %s:%s/%c%s", hole->host, | |
- hole->port, hole->type, hole->selector); | |
+ diag("Couldn't get %s:%s/%c%s", hole->host, | |
+ hole->port, hole->type, hole->selector); | |
break; | |
case '4': | |
case '5': | |
@@ -933,10 +945,13 @@ main(int argc, char *argv[]) | |
mainurl = xstrdup(argv[1]); | |
mainentry = moldentry(mainurl); | |
- if (interactive) | |
+ if (interactive) { | |
+ diag = uistatus; | |
delve(mainentry); | |
- else | |
+ } else { | |
+ diag = stddiag; | |
printout(mainentry); | |
+ } | |
exit(0); | |
} |