• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/tools/perf/util/
1#ifndef __PERF_STRBUF_H
2#define __PERF_STRBUF_H
3
4
5#include <assert.h>
6
7extern char strbuf_slopbuf[];
8struct strbuf {
9	size_t alloc;
10	size_t len;
11	char *buf;
12};
13
14#define STRBUF_INIT  { 0, 0, strbuf_slopbuf }
15
16/*----- strbuf life cycle -----*/
17extern void strbuf_init(struct strbuf *buf, ssize_t hint);
18extern void strbuf_release(struct strbuf *);
19extern char *strbuf_detach(struct strbuf *, size_t *);
20
21/*----- strbuf size related -----*/
22static inline ssize_t strbuf_avail(const struct strbuf *sb) {
23	return sb->alloc ? sb->alloc - sb->len - 1 : 0;
24}
25
26extern void strbuf_grow(struct strbuf *, size_t);
27
28static inline void strbuf_setlen(struct strbuf *sb, size_t len) {
29	if (!sb->alloc)
30		strbuf_grow(sb, 0);
31	assert(len < sb->alloc);
32	sb->len = len;
33	sb->buf[len] = '\0';
34}
35
36/*----- add data in your buffer -----*/
37static inline void strbuf_addch(struct strbuf *sb, int c) {
38	strbuf_grow(sb, 1);
39	sb->buf[sb->len++] = c;
40	sb->buf[sb->len] = '\0';
41}
42
43extern void strbuf_remove(struct strbuf *, size_t pos, size_t len);
44
45extern void strbuf_add(struct strbuf *, const void *, size_t);
46static inline void strbuf_addstr(struct strbuf *sb, const char *s) {
47	strbuf_add(sb, s, strlen(s));
48}
49
50__attribute__((format(printf,2,3)))
51extern void strbuf_addf(struct strbuf *sb, const char *fmt, ...);
52
53extern ssize_t strbuf_read(struct strbuf *, int fd, ssize_t hint);
54
55#endif /* __PERF_STRBUF_H */
56