Recently Written · git

sacc

Mirror of git://bitreich.org/sacc, the sacc gopher client from bitreich.org.

git clone https://github.com/equwal/sacc

Log | Files | Refs


commit 3a53a319d4ade0631accac3fd9177e6fbfc49c7f
Quentin Rameau <quinq@fifth.space>
2019-10-28 02:12:50 +0100

Print better URI

 ui_ti.c  | 20 ++++++++++++++------
 ui_txt.c | 27 ++++++++++++++++++++++-----
 2 files changed, 36 insertions(+), 11 deletions(-)
diff --git a/ui_ti.c b/ui_ti.c
index 5c2709c..6030024 100644
--- a/ui_ti.c
+++ b/ui_ti.c
@@ -218,12 +218,20 @@ displayuri(Item *item)
 		             item->selector, item->host, item->port);
 		break;
 	default:
-		fmt = strcmp(item->port, "70") ?
-		      "gopher://%1$s:%4$s/%2$c%3$s" :
-		      "gopher://%s/%c%s";
-		n = snprintf(bufout, sizeof(bufout), fmt,
-		             item->host, item->type,
-		             item->selector, item->port);
+		n = snprintf(bufout, sizeof(bufout), "gopher://%s", item->host);
+
+		if (n < sizeof(bufout) && strcmp(item->port, "70")) {
+			n += snprintf(bufout+n, sizeof(bufout)-n, ":%s",
+			              item->port);
+		}
+		if (n < sizeof(bufout)) {
+			n += snprintf(bufout+n, sizeof(bufout)-n, "/%c%s",
+			              item->type, item->selector);
+		}
+		if (n < sizeof(bufout) && item->type == '7' && item->tag) {
+			n += snprintf(bufout+n, sizeof(bufout)-n, " %s",
+			              item->tag + strlen(item->selector));
+		}
 		break;
 	}
 
diff --git a/ui_txt.c b/ui_txt.c
index 3d6b634..3c8391c 100644
--- a/ui_txt.c
+++ b/ui_txt.c
@@ -199,11 +199,28 @@ printuri(Item *item, size_t i)
 		             item->selector, item->host, item->port);
 		break;
 	default:
-		fmt = strcmp(item->port, "70") ?
-		      "%1$zu: %2$s: gopher://%3$s:%6$s/%4$c%5$s" :
-		      "%zu: %s: gopher://%s/%c%s";
-		n = snprintf(bufout, sizeof(bufout), fmt, i, item->username,
-		             item->host, item->type, item->selector, item->port);
+		n = snprintf(bufout, sizeof(bufout), "%zu: ", i);
+
+		if (n < sizeof(bufout) && *item->username) {
+			n += snprintf(bufout+n, sizeof(bufout)-n, "%s: ",
+			              item->username);
+		}
+		if (n < sizeof(bufout)) {
+			n += snprintf(bufout+n, sizeof(bufout)-n, "gopher://%s",
+			              item->host);
+		}
+		if (n < sizeof(bufout) && strcmp(item->port, "70")) {
+			n += snprintf(bufout+n, sizeof(bufout)-n, ":%s",
+			              item->port);
+		}
+		if (n < sizeof(bufout)) {
+			n += snprintf(bufout+n, sizeof(bufout)-n, "/%c%s",
+			              item->type, item->selector);
+		}
+		if (n < sizeof(bufout) && item->type == '7' && item->tag) {
+			n += snprintf(bufout+n, sizeof(bufout)-n, " %s",
+			              item->tag + strlen(item->selector));
+		}
 		break;
 	}