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