Good day, The current version of lynx cannot open the telnet link in the following gopher menu.
gopher://mud.nemesis.de/1 When the selector is empty, lynx uses a format with the wrong number of arguments. >From lynx2.9.2/WWW/Library/Implementation/HTGopher.c: const char *format = *selector ? "%s//%s@%s/" : "%s//%s/"; ... HTSprintf0(&address, format, STR_TELNET_URL, selector, host); The problem happens when the format calls for 2 arguments, but lynx passes it 3. Consequently, it ignores the host in the 3rd argument and this results in a broken telnet item. Attached is a patch to fix this problem. This patch changes the format to always use four arguments. When the selector is empty, then both the selector and the following argument are empty strings. When the selector is not empty, then the selector is followed by "@". Best regards, -Ben
--- lynx2.9.2/WWW/Library/Implementation/HTGopher.c.orig 2022-03-31 17:18:09.000000000 -0700 +++ lynx2.9.2/WWW/Library/Implementation/HTGopher.c 2025-01-06 17:49:44.268111625 -0800 @@ -373,18 +373,20 @@ (gtype != GOPHER_DUPLICATE || this_type != GOPHER_ERROR)) { char *address = 0; - const char *format = *selector ? "%s//%s@%s/" : "%s//%s/"; + const char *format = "%s//%s%s%s/"; if (gtype == GOPHER_TELNET) { PUTS(" (TEL) "); if (*selector == '/') ++selector; - HTSprintf0(&address, format, STR_TELNET_URL, selector, host); + HTSprintf0(&address, format, STR_TELNET_URL, + selector, (*selector ? "@" : ""), host); } else if (gtype == GOPHER_TN3270) { PUTS("(3270) "); if (*selector == '/') ++selector; - HTSprintf0(&address, format, STR_TN3270_URL, selector, host); + HTSprintf0(&address, format, STR_TN3270_URL, + selector, (*selector ? "@" : ""), host); } else { /* If parsed ok */ char *r;