xref: /freebsd/contrib/pam-krb5/tests/tap/string.c (revision bf6873c5786e333d679a7838d28812febf479a8a)
1*bf6873c5SCy Schubert /*
2*bf6873c5SCy Schubert  * String utilities for the TAP protocol.
3*bf6873c5SCy Schubert  *
4*bf6873c5SCy Schubert  * Additional string utilities that can't be included with C TAP Harness
5*bf6873c5SCy Schubert  * because they rely on additional portability code from rra-c-util.
6*bf6873c5SCy Schubert  *
7*bf6873c5SCy Schubert  * The canonical version of this file is maintained in the rra-c-util package,
8*bf6873c5SCy Schubert  * which can be found at <https://www.eyrie.org/~eagle/software/rra-c-util/>.
9*bf6873c5SCy Schubert  *
10*bf6873c5SCy Schubert  * Copyright 2011-2012 Russ Allbery <eagle@eyrie.org>
11*bf6873c5SCy Schubert  *
12*bf6873c5SCy Schubert  * Permission is hereby granted, free of charge, to any person obtaining a
13*bf6873c5SCy Schubert  * copy of this software and associated documentation files (the "Software"),
14*bf6873c5SCy Schubert  * to deal in the Software without restriction, including without limitation
15*bf6873c5SCy Schubert  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16*bf6873c5SCy Schubert  * and/or sell copies of the Software, and to permit persons to whom the
17*bf6873c5SCy Schubert  * Software is furnished to do so, subject to the following conditions:
18*bf6873c5SCy Schubert  *
19*bf6873c5SCy Schubert  * The above copyright notice and this permission notice shall be included in
20*bf6873c5SCy Schubert  * all copies or substantial portions of the Software.
21*bf6873c5SCy Schubert  *
22*bf6873c5SCy Schubert  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23*bf6873c5SCy Schubert  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24*bf6873c5SCy Schubert  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
25*bf6873c5SCy Schubert  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26*bf6873c5SCy Schubert  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27*bf6873c5SCy Schubert  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
28*bf6873c5SCy Schubert  * DEALINGS IN THE SOFTWARE.
29*bf6873c5SCy Schubert  *
30*bf6873c5SCy Schubert  * SPDX-License-Identifier: MIT
31*bf6873c5SCy Schubert  */
32*bf6873c5SCy Schubert 
33*bf6873c5SCy Schubert #include <config.h>
34*bf6873c5SCy Schubert #include <portable/system.h>
35*bf6873c5SCy Schubert 
36*bf6873c5SCy Schubert #include <tests/tap/basic.h>
37*bf6873c5SCy Schubert #include <tests/tap/string.h>
38*bf6873c5SCy Schubert 
39*bf6873c5SCy Schubert 
40*bf6873c5SCy Schubert /*
41*bf6873c5SCy Schubert  * vsprintf into a newly allocated string, reporting a fatal error with bail
42*bf6873c5SCy Schubert  * on failure.
43*bf6873c5SCy Schubert  */
44*bf6873c5SCy Schubert void
bvasprintf(char ** strp,const char * fmt,va_list args)45*bf6873c5SCy Schubert bvasprintf(char **strp, const char *fmt, va_list args)
46*bf6873c5SCy Schubert {
47*bf6873c5SCy Schubert     int status;
48*bf6873c5SCy Schubert 
49*bf6873c5SCy Schubert     status = vasprintf(strp, fmt, args);
50*bf6873c5SCy Schubert     if (status < 0)
51*bf6873c5SCy Schubert         sysbail("failed to allocate memory for vasprintf");
52*bf6873c5SCy Schubert }
53*bf6873c5SCy Schubert 
54*bf6873c5SCy Schubert 
55*bf6873c5SCy Schubert /*
56*bf6873c5SCy Schubert  * sprintf into a newly allocated string, reporting a fatal error with bail on
57*bf6873c5SCy Schubert  * failure.
58*bf6873c5SCy Schubert  */
59*bf6873c5SCy Schubert void
basprintf(char ** strp,const char * fmt,...)60*bf6873c5SCy Schubert basprintf(char **strp, const char *fmt, ...)
61*bf6873c5SCy Schubert {
62*bf6873c5SCy Schubert     va_list args;
63*bf6873c5SCy Schubert 
64*bf6873c5SCy Schubert     va_start(args, fmt);
65*bf6873c5SCy Schubert     bvasprintf(strp, fmt, args);
66*bf6873c5SCy Schubert     va_end(args);
67*bf6873c5SCy Schubert }
68