about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2021-06-07 00:08:59 -0400
committerJune McEnroe <june@causal.agency>2021-06-09 11:41:15 -0400
commit5c3cd59af6550d6f8d74487c1e46cdb0b171ff7d (patch)
tree3851069ae3d57ef7f6fc5f09558d3669f27c1acf
parentOpenBSD: pledge minimum promises from the start (diff)
downloadcatgirl-5c3cd59af6550d6f8d74487c1e46cdb0b171ff7d.tar.gz
catgirl-5c3cd59af6550d6f8d74487c1e46cdb0b171ff7d.zip
Add seprintf
Based on seprint(2) from Plan 9. I'm not sure if my return value
exactly matches Plan 9's in the case of truncation. seprint(2) is
described only as returning a pointer to the terminating '\0', but
if it does so even in the case of truncation, it is awkward for the
caller to detect. This implementation returns end in the truncation
case, so that (ptr == end) indicates truncation.
-rw-r--r--chat.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/chat.h b/chat.h
index e48799c..e9bee8b 100644
--- a/chat.h
+++ b/chat.h
@@ -44,6 +44,18 @@
 typedef unsigned uint;
 typedef unsigned char byte;
 
+static inline char *seprintf(char *ptr, char *end, const char *fmt, ...)
+	__attribute__((format(printf, 3, 4)));
+static inline char *seprintf(char *ptr, char *end, const char *fmt, ...) {
+	va_list ap;
+	va_start(ap, fmt);
+	int n = vsnprintf(ptr, end - ptr, fmt, ap);
+	va_end(ap);
+	if (n < 0) return NULL;
+	ptr += n;
+	return (ptr > end ? end : ptr);
+}
+
 struct Cat {
 	char *buf;
 	size_t cap;
/src/commit/bin/title.c?id=3453aa05a391e3a3c60c5dcaf5f0d9a5458c87a2&follow=1'>Set title User-AgentJune McEnroe 2019-09-07Add -x flag to titleJune McEnroe 2019-09-07Ignore SIGPIPE in relayJune McEnroe 2019-09-07Add A Memory Called EmpireJune McEnroe 2019-09-05Handle lack of Content-TypeJune McEnroe 2019-09-05Use CURLINFO_CONTENT_TYPEJune McEnroe 2019-09-05Decode entities in titlesJune McEnroe 2019-09-05Print title as soon as it's availableJune McEnroe 2019-09-05Use CURL_PREFIX to set flagsJune McEnroe 2019-09-05Add titleJune McEnroe 2019-09-04Add Avorter n'est pas tuerJune McEnroe 2019-08-29Unset executable on shell scriptsJune McEnroe 2019-08-29Add long-missing setopt to bin.7June McEnroe 2019-08-29Add editJune McEnroe