xref: /illumos-gate/usr/src/uts/common/sys/ilstr.h (revision b210e777)
1*b210e777SJoshua M. Clulow /*
2*b210e777SJoshua M. Clulow  * This file and its contents are supplied under the terms of the
3*b210e777SJoshua M. Clulow  * Common Development and Distribution License ("CDDL"), version 1.0.
4*b210e777SJoshua M. Clulow  * You may only use this file in accordance with the terms of version
5*b210e777SJoshua M. Clulow  * 1.0 of the CDDL.
6*b210e777SJoshua M. Clulow  *
7*b210e777SJoshua M. Clulow  * A full copy of the text of the CDDL should have accompanied this
8*b210e777SJoshua M. Clulow  * source.  A copy of the CDDL is also available via the Internet at
9*b210e777SJoshua M. Clulow  * http://www.illumos.org/license/CDDL.
10*b210e777SJoshua M. Clulow  */
11*b210e777SJoshua M. Clulow 
12*b210e777SJoshua M. Clulow /*
13*b210e777SJoshua M. Clulow  * Copyright 2023 Oxide Computer Company
14*b210e777SJoshua M. Clulow  */
15*b210e777SJoshua M. Clulow 
16*b210e777SJoshua M. Clulow #ifndef _SYS_ILSTR_H
17*b210e777SJoshua M. Clulow #define	_SYS_ILSTR_H
18*b210e777SJoshua M. Clulow 
19*b210e777SJoshua M. Clulow #ifdef _KERNEL
20*b210e777SJoshua M. Clulow #include <sys/types.h>
21*b210e777SJoshua M. Clulow #include <sys/varargs.h>
22*b210e777SJoshua M. Clulow #else
23*b210e777SJoshua M. Clulow #include <stdarg.h>
24*b210e777SJoshua M. Clulow #endif
25*b210e777SJoshua M. Clulow 
26*b210e777SJoshua M. Clulow #ifdef __cplusplus
27*b210e777SJoshua M. Clulow extern "C" {
28*b210e777SJoshua M. Clulow #endif
29*b210e777SJoshua M. Clulow 
30*b210e777SJoshua M. Clulow typedef enum ilstr_errno {
31*b210e777SJoshua M. Clulow 	ILSTR_ERROR_OK = 0,
32*b210e777SJoshua M. Clulow 	ILSTR_ERROR_NOMEM,
33*b210e777SJoshua M. Clulow 	ILSTR_ERROR_OVERFLOW,
34*b210e777SJoshua M. Clulow 	ILSTR_ERROR_PRINTF,
35*b210e777SJoshua M. Clulow } ilstr_errno_t;
36*b210e777SJoshua M. Clulow 
37*b210e777SJoshua M. Clulow typedef enum ilstr_flag {
38*b210e777SJoshua M. Clulow 	ILSTR_FLAG_PREALLOC = (1 << 0),
39*b210e777SJoshua M. Clulow } ilstr_flag_t;
40*b210e777SJoshua M. Clulow 
41*b210e777SJoshua M. Clulow typedef struct ilstr {
42*b210e777SJoshua M. Clulow 	char *ils_data;
43*b210e777SJoshua M. Clulow 	size_t ils_datalen;
44*b210e777SJoshua M. Clulow 	size_t ils_strlen;
45*b210e777SJoshua M. Clulow 	ilstr_errno_t ils_errno;
46*b210e777SJoshua M. Clulow 	int ils_kmflag;
47*b210e777SJoshua M. Clulow 	ilstr_flag_t ils_flag;
48*b210e777SJoshua M. Clulow } ilstr_t;
49*b210e777SJoshua M. Clulow 
50*b210e777SJoshua M. Clulow extern void ilstr_init(ilstr_t *, int);
51*b210e777SJoshua M. Clulow extern void ilstr_init_prealloc(ilstr_t *, char *, size_t);
52*b210e777SJoshua M. Clulow extern void ilstr_reset(ilstr_t *);
53*b210e777SJoshua M. Clulow extern void ilstr_fini(ilstr_t *);
54*b210e777SJoshua M. Clulow extern void ilstr_append_str(ilstr_t *, const char *);
55*b210e777SJoshua M. Clulow extern void ilstr_append_char(ilstr_t *, char);
56*b210e777SJoshua M. Clulow extern ilstr_errno_t ilstr_errno(ilstr_t *);
57*b210e777SJoshua M. Clulow extern const char *ilstr_cstr(ilstr_t *);
58*b210e777SJoshua M. Clulow extern size_t ilstr_len(ilstr_t *);
59*b210e777SJoshua M. Clulow extern const char *ilstr_errstr(ilstr_t *);
60*b210e777SJoshua M. Clulow void ilstr_aprintf(ilstr_t *, const char *, ...);
61*b210e777SJoshua M. Clulow void ilstr_vaprintf(ilstr_t *, const char *, va_list);
62*b210e777SJoshua M. Clulow 
63*b210e777SJoshua M. Clulow #ifdef __cplusplus
64*b210e777SJoshua M. Clulow }
65*b210e777SJoshua M. Clulow #endif
66*b210e777SJoshua M. Clulow 
67*b210e777SJoshua M. Clulow #endif /* _SYS_ILSTR_H */
68