sacc

sacc (saccomys): simple gopher client.
Log | Files | Refs | LICENSE

commit 4f271e2e9864f65f96a356eb607963cc1326bf95
parent 15dc331af5d4edf8a73aba2badb74e636fed71e2
Author: Quentin Rameau <quinq@fifth.space>
Date:   Tue, 18 Jul 2017 15:34:42 +0200

Keep downloaded images and keep them at fork exit

Diffstat:
sacc.c | 24+++++++++++++++++-------
1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/sacc.c b/sacc.c @@ -22,6 +22,7 @@ static char *mainurl; static Item *mainentry; +static int parent = 1; void die(const char *fmt, ...) @@ -113,7 +114,7 @@ clearitem(Item *item) clear(&item->dat); } - if ((tag = item->tag) && + if (parent && (tag = item->tag) && !strncmp(tag, "/tmp/sacc/img-", 14) && strlen(tag) == 20) unlink(tag); @@ -176,6 +177,7 @@ displaytextitem(Item *item) fprintf(stderr, "Couldn't fork.\n"); return; case 0: + parent = 0; pagerin = popen("$PAGER", "we"); fputs(item->raw, pagerin); status = pclose(pagerin); @@ -454,6 +456,7 @@ plumb(char *url) fprintf(stderr, "Couldn't fork.\n"); return; case 0: + parent = 0; if (execlp("xdg-open", "xdg-open", url, NULL) < 0) die("execlp: %s", strerror(errno)); } @@ -464,13 +467,19 @@ displayimg(Item *item) { int tmpfd; - item->tag = xstrdup("/tmp/sacc/img-XXXXXX"); + if (!item->tag) { + item->tag = xstrdup("/tmp/sacc/img-XXXXXX"); - if ((tmpfd = mkstemp(item->tag)) < 0) - die("mkstemp: %s: %s", item->tag, strerror(errno)); + if ((tmpfd = mkstemp(item->tag)) < 0) + die("mkstemp: %s: %s", item->tag, strerror(errno)); - if (downloaditem(item, tmpfd)) - plumb(item->tag); + if (!downloaditem(item, tmpfd)) { + clear(&item->tag); + return 0; + } + } + + plumb(item->tag); } static int @@ -627,7 +636,8 @@ static void cleanup(void) { clearitem(mainentry); - rmdir("/tmp/sacc"); + if (parent) + rmdir("/tmp/sacc"); free(mainentry); free(mainurl); uicleanup();