]>
Commit | Line | Data |
---|---|---|
3a161d99 SRRH |
1 | #ifndef _LINUX_SEQ_BUF_H |
2 | #define _LINUX_SEQ_BUF_H | |
3 | ||
4 | #include <linux/fs.h> | |
5 | ||
6 | /* | |
7 | * Trace sequences are used to allow a function to call several other functions | |
8 | * to create a string of data to use. | |
9 | */ | |
10 | ||
11 | /** | |
12 | * seq_buf - seq buffer structure | |
13 | * @buffer: pointer to the buffer | |
14 | * @size: size of the buffer | |
15 | * @len: the amount of data inside the buffer | |
16 | * @readpos: The next position to read in the buffer. | |
17 | */ | |
18 | struct seq_buf { | |
19 | unsigned char *buffer; | |
20 | unsigned int size; | |
21 | unsigned int len; | |
22 | unsigned int readpos; | |
23 | }; | |
24 | ||
25 | static inline void | |
26 | seq_buf_init(struct seq_buf *s, unsigned char *buf, unsigned int size) | |
27 | { | |
28 | s->buffer = buf; | |
29 | s->size = size; | |
30 | s->len = 0; | |
31 | s->readpos = 0; | |
32 | } | |
33 | ||
34 | /* | |
35 | * seq_buf have a buffer that might overflow. When this happens | |
36 | * the len and size are set to be equal. | |
37 | */ | |
38 | static inline bool | |
39 | seq_buf_has_overflowed(struct seq_buf *s) | |
40 | { | |
41 | return s->len == s->size; | |
42 | } | |
43 | ||
44 | static inline void | |
45 | seq_buf_set_overflow(struct seq_buf *s) | |
46 | { | |
47 | s->len = s->size; | |
48 | } | |
49 | ||
50 | /* | |
51 | * How much buffer is left on the seq_buf? | |
52 | */ | |
53 | static inline unsigned int | |
54 | seq_buf_buffer_left(struct seq_buf *s) | |
55 | { | |
56 | if (seq_buf_has_overflowed(s)) | |
57 | return 0; | |
58 | ||
59 | return (s->size - 1) - s->len; | |
60 | } | |
61 | ||
62 | extern __printf(2, 3) | |
63 | int seq_buf_printf(struct seq_buf *s, const char *fmt, ...); | |
64 | extern __printf(2, 0) | |
65 | int seq_buf_vprintf(struct seq_buf *s, const char *fmt, va_list args); | |
66 | extern int | |
67 | seq_buf_bprintf(struct seq_buf *s, const char *fmt, const u32 *binary); | |
68 | extern int seq_buf_print_seq(struct seq_file *m, struct seq_buf *s); | |
69 | extern int seq_buf_to_user(struct seq_buf *s, char __user *ubuf, | |
70 | int cnt); | |
71 | extern int seq_buf_puts(struct seq_buf *s, const char *str); | |
72 | extern int seq_buf_putc(struct seq_buf *s, unsigned char c); | |
73 | extern int seq_buf_putmem(struct seq_buf *s, const void *mem, unsigned int len); | |
74 | extern int seq_buf_putmem_hex(struct seq_buf *s, const void *mem, | |
75 | unsigned int len); | |
76 | extern int seq_buf_path(struct seq_buf *s, const struct path *path); | |
77 | ||
78 | extern int seq_buf_bitmask(struct seq_buf *s, const unsigned long *maskp, | |
79 | int nmaskbits); | |
80 | ||
81 | #endif /* _LINUX_SEQ_BUF_H */ |