Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sudo-project
GitHub Repository: sudo-project/sudo
Path: blob/main/include/sudo_lbuf.h
1532 views
1
/*
2
* SPDX-License-Identifier: ISC
3
*
4
* Copyright (c) 2007, 2010, 2011, 2013-2015, 2023
5
* Todd C. Miller <[email protected]>
6
*
7
* Permission to use, copy, modify, and distribute this software for any
8
* purpose with or without fee is hereby granted, provided that the above
9
* copyright notice and this permission notice appear in all copies.
10
*
11
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18
*/
19
20
#ifndef SUDO_LBUF_H
21
#define SUDO_LBUF_H
22
23
/*
24
* Line buffer struct.
25
*/
26
struct sudo_lbuf {
27
int (*output)(const char *);
28
char *buf;
29
const char *continuation;
30
unsigned int indent;
31
unsigned int len;
32
unsigned int size;
33
unsigned short cols;
34
unsigned short error;
35
};
36
37
typedef int (*sudo_lbuf_output_t)(const char *);
38
39
/* Flags for sudo_lbuf_append_esc() */
40
#define LBUF_ESC_CNTRL 0x01
41
#define LBUF_ESC_BLANK 0x02
42
#define LBUF_ESC_QUOTE 0x04
43
44
sudo_dso_public void sudo_lbuf_init_v1(struct sudo_lbuf *lbuf, sudo_lbuf_output_t output, unsigned int indent, const char *continuation, int cols);
45
sudo_dso_public void sudo_lbuf_destroy_v1(struct sudo_lbuf *lbuf);
46
sudo_dso_public bool sudo_lbuf_append_v1(struct sudo_lbuf *lbuf, const char * restrict fmt, ...) sudo_printflike(2, 3);
47
sudo_dso_public bool sudo_lbuf_append_esc_v1(struct sudo_lbuf *lbuf, int flags, const char * restrict fmt, ...) sudo_printflike(3, 4);
48
sudo_dso_public bool sudo_lbuf_append_quoted_v1(struct sudo_lbuf *lbuf, const char *set, const char * restrict fmt, ...) sudo_printflike(3, 4);
49
sudo_dso_public void sudo_lbuf_print_v1(struct sudo_lbuf *lbuf);
50
sudo_dso_public bool sudo_lbuf_error_v1(struct sudo_lbuf *lbuf);
51
sudo_dso_public void sudo_lbuf_clearerr_v1(struct sudo_lbuf *lbuf);
52
53
#define sudo_lbuf_init(_a, _b, _c, _d, _e) sudo_lbuf_init_v1((_a), (_b), (_c), (_d), (_e))
54
#define sudo_lbuf_destroy(_a) sudo_lbuf_destroy_v1((_a))
55
#define sudo_lbuf_append sudo_lbuf_append_v1
56
#define sudo_lbuf_append_esc sudo_lbuf_append_esc_v1
57
#define sudo_lbuf_append_quoted sudo_lbuf_append_quoted_v1
58
#define sudo_lbuf_print(_a) sudo_lbuf_print_v1((_a))
59
#define sudo_lbuf_error(_a) sudo_lbuf_error_v1((_a))
60
#define sudo_lbuf_clearerr(_a) sudo_lbuf_clearerr_v1((_a))
61
62
#endif /* SUDO_LBUF_H */
63
64