gawk

[old] Sed-like interface to the Gopher protocol
Log | Files | Refs | LICENSE

commit 7cb5b22ef4045909674d5c19e79f290553d57a97
parent 261070e48f5f1c022d1fcd7d1c7df3d474231eb8
Author: Jacob R. Edwards <jacobouno@protonmail.com>
Date:   Sat, 19 Dec 2020 23:58:40 -0800

Add command line interface and fix bug

You can now specify initial host, path, and port as command line
arguments.

In connect_to() the error for resolve() was unhelpful.

Diffstat:
Mmain.c | 46+++++++++++++++++++++++++++++++++++-----------
1 file changed, 35 insertions(+), 11 deletions(-)

diff --git a/main.c b/main.c @@ -88,7 +88,7 @@ connect_to(const char *host, const char *proto) error = resolve(&ai0, host, proto); if (error) { - warnx("Unable to resolve: %s:", gai_strerror(error)); + warnx("Unable to resolve: '%s' at '%s': %s", host, proto, gai_strerror(error)); return -1; } @@ -340,8 +340,8 @@ cgoto(int argc, char **argv, int depth, const char *tmpdir, const char *host, co newpath(npath, argv[0]); else { newpath(npath, argv[1]); - nhost = argv[1]; - if (argc == 2) + nhost = argv[0]; + if (argc == 3) nport = argv[2]; } @@ -438,15 +438,39 @@ too_many_args: int main(int argc, char *argv[]) { - char t[64]; - strcpy(t, "/tmp/gawk-XXXXXXXXXXX"); - if (mkdtemp(t) == NULL) - err(1, "unable to create temp dir"); + char *host = "localhost"; + char *path = "/"; + char *port = "70"; + char temp[64]; + int ch; + int status; + + while ((ch = getopt(argc, argv, "d:h:p:")) != -1) { + switch (ch) { + case 'd': + path = optarg; + break; + case 'h': + host = optarg; + break; + case 'p': + port = optarg; + break; + default: + fprintf(stderr, "usage: %s [-d path] [-h host] [-p port]\n", + getprogname()); + return 1; + } + } - gawk(0, t, "localhost", "/","gopher"); + strcpy(temp, "/tmp/gawk-XXXXXXXXXXX"); + if (mkdtemp(temp) == NULL) + err(1, "mkdtemp '%s'", temp); - if (rmdir(t) == -1) - err(1, "unable to remove temp dir"); + status = gawk(0, temp, host, path, port); - return 0; + if (rmdir(temp) == -1) + err(1, "rmdir '%s'", temp); + + return status; }