xref: /freebsd/contrib/xz/src/common/tuklib_mbstr_fw.c (revision 3b35e7ee8de9b0260149a2b77e87a2b9c7a36244)
1 // SPDX-License-Identifier: 0BSD
2 
3 ///////////////////////////////////////////////////////////////////////////////
4 //
5 /// \file       tuklib_mbstr_fw.c
6 /// \brief      Get the field width for printf() e.g. to align table columns
7 //
8 //  Author:     Lasse Collin
9 //
10 ///////////////////////////////////////////////////////////////////////////////
11 
12 #include "tuklib_mbstr.h"
13 
14 
15 extern int
16 tuklib_mbstr_fw(const char *str, int columns_min)
17 {
18 	size_t len;
19 	const size_t width = tuklib_mbstr_width(str, &len);
20 	if (width == (size_t)-1)
21 		return -1;
22 
23 	if (width > (size_t)columns_min)
24 		return 0;
25 
26 	if (width < (size_t)columns_min)
27 		len += (size_t)columns_min - width;
28 
29 	return (int)len;
30 }
31