shithub: mc

Download patch

ref: 90115699edf954c715cf319a374cffd3208248ce
parent: fdaa107e288c8aebc6ff8d69bb9a83cdb6b64fc8
author: Ori Bernstein <[email protected]>
date: Mon Aug 6 21:35:11 EDT 2012

Add variadic api.

--- a/fmt.myr
+++ b/fmt.myr
@@ -5,6 +5,7 @@
 
 pkg std =
 	const bfmt	: (buf : byte[,], fmt : byte[,], args:... -> size)
+	const bfmtv	: (buf : byte[,], fmt : byte[,], ap:byte* -> size)
 	const put	: (fmt : byte[,], args:... -> size)
 ;;
 
@@ -12,20 +13,22 @@
 	var buf : byte[2048]
 	var n
 	
-	n = bfmt(buf[0,2048], fmt, args)
+	n = bfmtv(buf[0,2048], fmt, &args castto(byte*))
 	write(1, buf[0,n])
 	-> n
 }
 
 const bfmt = {buf, fmt, args
+	-> bfmtv(buf, fmt, &args castto(byte*))
+}
+
+const bfmtv = {buf, fmt, ap
 	var c
 	var n
-	var ap
 	var i_val;
 	var s_val;
 
 	n = 0
-	ap = &args castto(byte*)
 	while fmt.len
 		(c, fmt) = striter(fmt)
 		if c == '%'
@@ -44,7 +47,6 @@
 				n += intfmt(buf[n, buf.len], i_val, 10)
 				ap = add(ap, sizeof(int8))
 				;;
-			/*
 			'w':
 				ap = align(ap, sizeof(int16));
 				i_val = *(ap castto(int16*)) castto(int64)
@@ -51,7 +53,6 @@
 				n += intfmt(buf[n, buf.len], i_val, 10)
 				ap = add(ap, sizeof(int16))
 				;;
-			*/
 			'i':
 				ap = align(ap, sizeof(int32));
 				i_val = *(ap castto(int32*)) castto(int64)