xref: /aosp_15_r20/trusty/kernel/lib/libc-ext/scnprintf.c (revision 344aa361028b423587d4ef3fa52a23d194628137)
1*344aa361SAndroid Build Coastguard Worker #include <trusty/string.h>
2*344aa361SAndroid Build Coastguard Worker 
3*344aa361SAndroid Build Coastguard Worker #include <stdio.h>
4*344aa361SAndroid Build Coastguard Worker #include <stdlib.h>
5*344aa361SAndroid Build Coastguard Worker 
scnprintf(char * buf,size_t size,const char * fmt,...)6*344aa361SAndroid Build Coastguard Worker int scnprintf(char* buf, size_t size, const char* fmt, ...) {
7*344aa361SAndroid Build Coastguard Worker     va_list args;
8*344aa361SAndroid Build Coastguard Worker 
9*344aa361SAndroid Build Coastguard Worker     va_start(args, fmt);
10*344aa361SAndroid Build Coastguard Worker     int vscn_ret = vscnprintf(buf, size, fmt, args);
11*344aa361SAndroid Build Coastguard Worker     va_end(args);
12*344aa361SAndroid Build Coastguard Worker 
13*344aa361SAndroid Build Coastguard Worker     return vscn_ret;
14*344aa361SAndroid Build Coastguard Worker }
15*344aa361SAndroid Build Coastguard Worker 
vscnprintf(char * buf,size_t size,const char * fmt,va_list args)16*344aa361SAndroid Build Coastguard Worker int vscnprintf(char* buf, size_t size, const char* fmt, va_list args) {
17*344aa361SAndroid Build Coastguard Worker     if (size == 0) {
18*344aa361SAndroid Build Coastguard Worker         return 0;
19*344aa361SAndroid Build Coastguard Worker     }
20*344aa361SAndroid Build Coastguard Worker     int would_write = vsnprintf(buf, size, fmt, args);
21*344aa361SAndroid Build Coastguard Worker     if (would_write < 0) {
22*344aa361SAndroid Build Coastguard Worker         return would_write;
23*344aa361SAndroid Build Coastguard Worker     }
24*344aa361SAndroid Build Coastguard Worker     size_t max_write = size - 1;
25*344aa361SAndroid Build Coastguard Worker     if ((size_t)would_write > max_write) {
26*344aa361SAndroid Build Coastguard Worker         return (int)max_write;
27*344aa361SAndroid Build Coastguard Worker     }
28*344aa361SAndroid Build Coastguard Worker     return would_write;
29*344aa361SAndroid Build Coastguard Worker }
30