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