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