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.
This commit is contained in:
부모
3d931d0f5a
커밋
5c3cd59af6
12
chat.h
12
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;
|
||||
|
불러오는 중...
x
Reference in New Issue
Block a user