t* gopherproxy-c customized
URI git clone git://git.codevoid.de/gopherproxy-c-sdk
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
DIR commit f3ee251cc87fed2ff5ef4f8b9679c03cad71a5f6
DIR parent 536c656498826de19a9aa266f59831df7ef74b5f
URI Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Sun, 12 Aug 2018 19:10:23 +0200
simplify item type handling, make shorter uris
make shorter uri by removing gopher:// and the port if it is "70".
Diffstat:
M gopherproxy.c | 70 +++++++++++--------------------
1 file changed, 24 insertions(+), 46 deletions(-)
---
DIR diff --git a/gopherproxy.c b/gopherproxy.c
t@@ -19,7 +19,6 @@
#endif
struct uri {
- char proto[16];
char host[256];
char port[8];
char path[1024];
t@@ -294,29 +293,20 @@ servedir(const char *server, const char *port, const char *path, const char *par
server, port, path, linenr);
}
- uri[0] = '\0';
- switch (line[0]) {
- case '7':
- snprintf(uri, sizeof(uri), "gopher://%s:%s/%c%s",
+ if (!strcmp(v.port, "70"))
+ snprintf(uri, sizeof(uri), "%s/%c%s",
+ v.server, v._type, v.path);
+ else
+ snprintf(uri, sizeof(uri), "%s:%s/%c%s",
v.server, v.port, v._type, v.path);
- break;
- case 'h':
- if (!strncmp(v.path, "URL:", sizeof("URL:") - 1))
- snprintf(uri, sizeof(uri), "%s", v.path + sizeof("URL:") - 1);
- else
- snprintf(uri, sizeof(uri), "gopher://%s:%s/%c%s",
- v.server, v.port, v._type, v.path);
- break;
+
+ switch (v._type) {
case 'i': /* info */
case '3': /* error */
+ fputs(" ", stdout);
+ xmlencode(v.username);
break;
- default:
- snprintf(uri, sizeof(uri), "?q=gopher://%s:%s/%c%s",
- v.server, v.port, v._type, v.path);
- }
-
- /* search */
- if (v._type == '7') {
+ case '7': /* search */
fputs("</pre><form method=\"get\" action=\"\"><pre>", stdout);
fputs(typestr(v._type), stdout);
fputs(" <input type=\"hidden\" name=\"q\" value=\"", stdout);
t@@ -326,18 +316,19 @@ servedir(const char *server, const char *port, const char *path, const char *par
fputs(
"\" name=\"p\" value=\"\" size=\"72\" />"
"<input type=\"submit\" value=\"Search\" /></pre></form><pre>", stdout);
- } else {
+ default: /* other */
fputs(typestr(v._type), stdout);
- if (uri[0]) {
- fputs(" <a href=\"", stdout);
- xmlencode(uri);
- fputs("\">", stdout);
- xmlencode(v.username);
- fputs("</a>", stdout);
+ fputs(" <a href=\"", stdout);
+ if (v._type == 'h' && !strncmp(v.path, "URL:", sizeof("URL:") - 1)) {
+ xmlencode(v.path + sizeof("URL:") - 1);
} else {
- fputs(" ", stdout);
- xmlencode(v.username);
+ fputs("?q=", stdout);
+ xmlencode(uri);
}
+ fputs("\">", stdout);
+ xmlencode(v.username);
+ fputs("</a>", stdout);
+
}
putchar('\n');
}
t@@ -422,21 +413,8 @@ parseuri(const char *str, struct uri *u)
memset(u, 0, sizeof(struct uri));
- /* protocol part */
- for (e = s = str; *e && (isalpha((int)*e) || isdigit((int)*e) ||
- *e == '+' || *e == '-' || *e == '.'); e++)
- ;
- if (strncmp(e, "://", sizeof("://") - 1))
- return 0;
- if (e - s + 1 >= sizeof(u->proto))
- return 0;
- memcpy(u->proto, s, e - s);
- u->proto[e - s] = '\0';
-
- e += sizeof("://") - 1;
- s = e;
-
- e = &e[strcspn(s, ":/")];
+ s = str;
+ e = &s[strcspn(s, ":/")];
if (e - s + 1 >= sizeof(u->host))
return 0;
memcpy(u->host, s, e - s);
t@@ -492,8 +470,8 @@ main(void)
path = "/";
if (query[0]) {
- if (strncmp(query, "gopher://", sizeof("gopher://") - 1))
- snprintf(uri, sizeof(uri), "gopher://%s", query);
+ if (!strncmp(query, "gopher://", sizeof("gopher://") - 1))
+ snprintf(uri, sizeof(uri), "%s", query + sizeof("gopher://") - 1);
else
snprintf(uri, sizeof(uri), "%s", query);