shithub: fnt

Download patch

ref: f16c52c353075a9841a74c3d5cb4643448eb87fa
parent: b8dd286f723159595265e22e814557002e1120ab
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Mon Sep 2 16:23:50 EDT 2024

unix: fix completely broken %r

--- a/otf.c.in
+++ b/otf.c.in
@@ -827,7 +827,6 @@
 		if(o->td.eblc == nil && o->td.ebdt == nil)
 			return g;
 	}
-
 	if(o->td.eblc != nil && o->td.ebdt != nil)
 		return bitglyf(o, g, opts);
 
--- a/unix/otfsys.c
+++ b/unix/otfsys.c
@@ -16,14 +16,17 @@
 werrstr(char *fmt, ...)
 {
 	va_list a;
-	char buf[ERRMAX];
-	int n;
+	char f[ERRMAX], buf[ERRMAX];
+	int n, withr;
 
 	va_start(a, fmt);
-	n = vsnprintf(buf, sizeof(buf), fmt, a);
+	n = snprintf(f, sizeof(f), "%s", fmt);
+	if((withr = (n >= 2 && f[n-2] == '%' && f[n-1] == 'r')) != 0)
+		f[n-2] = 0;
+	n = vsnprintf(buf, sizeof(buf), f, a);
 	va_end(a);
-	if(n >= 2 && buf[n-2] == '%' && buf[n-1] == 'r')
-		snprintf(buf+n-2, sizeof(buf)-n+2, "%s", errstr);
+	if(withr)
+		snprintf(buf+n, sizeof(buf)-n, "%s", errstr);
 	snprintf(errstr, sizeof(errstr), "%s", buf);
 }
 
--