aboutsummaryrefslogtreecommitdiffstats
path: root/printf.c
diff options
context:
space:
mode:
Diffstat (limited to 'printf.c')
-rw-r--r--printf.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/printf.c b/printf.c
index 9905032..df88d3d 100644
--- a/printf.c
+++ b/printf.c
@@ -139,14 +139,13 @@ static inline void _out_fct(char character, void* buffer, size_t idx, size_t max
}
-// internal strlen
+// internal secure strlen
// \return The length of the string (excluding the terminating 0)
// limited by 'max' size if non-zero
-static inline unsigned int _strlen(const char* str, size_t max)
+static inline unsigned int _strnlen_s(const char* str, size_t maxsize)
{
const char* s;
- size_t n = max;
- for (s = str; *s && (max?n--:1); ++s);
+ for (s = str; *s && maxsize--; ++s);
return (unsigned int)(s - str);
}
@@ -649,7 +648,7 @@ static int _vsnprintf(out_fct_type out, char* buffer, const size_t maxlen, const
case 's' : {
char* p = va_arg(va, char*);
- unsigned int l = _strlen(p, precision);
+ unsigned int l = _strnlen_s(p, precision ? precision : (size_t)-1);
// pre padding
if (flags & FLAGS_PRECISION) {
l = (l < precision ? l : precision);