Blame view

include/linux/seq_file.h 5.75 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
  #ifndef _LINUX_SEQ_FILE_H
  #define _LINUX_SEQ_FILE_H
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
3
4
5
  
  #include <linux/types.h>
  #include <linux/string.h>
187f1882b   Paul Gortmaker   BUG: headers with...
6
  #include <linux/bug.h>
0ac1759ab   Ingo Molnar   [PATCH] sem2mutex...
7
  #include <linux/mutex.h>
50ac2d694   Alexey Dobriyan   seq_file: add seq...
8
9
  #include <linux/cpumask.h>
  #include <linux/nodemask.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
10
11
12
  
  struct seq_operations;
  struct file;
c32c2f63a   Jan Blunck   d_path: Make seq_...
13
  struct path;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
14
  struct inode;
6092d0481   Ram Pai   [patch 1/7] vfs: ...
15
  struct dentry;
adb37c4c6   Eric W. Biederman   userns: Make seq_...
16
  struct user_namespace;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
17
18
19
20
21
22
  
  struct seq_file {
  	char *buf;
  	size_t size;
  	size_t from;
  	size_t count;
839cc2a94   Tetsuo Handa   seq_file: introdu...
23
  	size_t pad_until;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
24
  	loff_t index;
8f19d4729   Eric Biederman   seq_file: properl...
25
  	loff_t read_pos;
2b47c3611   Mathieu Desnoyers   Fix f_version typ...
26
  	u64 version;
0ac1759ab   Ingo Molnar   [PATCH] sem2mutex...
27
  	struct mutex lock;
15ad7cdcf   Helge Deller   [PATCH] struct se...
28
  	const struct seq_operations *op;
f15146380   Kay Sievers   fs: seq_file - ad...
29
  	int poll_event;
adb37c4c6   Eric W. Biederman   userns: Make seq_...
30
31
32
  #ifdef CONFIG_USER_NS
  	struct user_namespace *user_ns;
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
33
34
35
36
37
38
39
40
41
  	void *private;
  };
  
  struct seq_operations {
  	void * (*start) (struct seq_file *m, loff_t *pos);
  	void (*stop) (struct seq_file *m, void *v);
  	void * (*next) (struct seq_file *m, void *v, loff_t *pos);
  	int (*show) (struct seq_file *m, void *v);
  };
521b5d0c4   Al Viro   [PATCH] teach seq...
42
  #define SEQ_SKIP 1
f84398068   Miklos Szeredi   vfs: seq_file: ad...
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
  /**
   * seq_get_buf - get buffer to write arbitrary data to
   * @m: the seq_file handle
   * @bufp: the beginning of the buffer is stored here
   *
   * Return the number of bytes available in the buffer, or zero if
   * there's no space.
   */
  static inline size_t seq_get_buf(struct seq_file *m, char **bufp)
  {
  	BUG_ON(m->count > m->size);
  	if (m->count < m->size)
  		*bufp = m->buf + m->count;
  	else
  		*bufp = NULL;
  
  	return m->size - m->count;
  }
  
  /**
   * seq_commit - commit data to the buffer
   * @m: the seq_file handle
   * @num: the number of bytes to commit
   *
   * Commit @num bytes of data written to a buffer previously acquired
   * by seq_buf_get.  To signal an error condition, or that the data
   * didn't fit in the available space, pass a negative @num value.
   */
  static inline void seq_commit(struct seq_file *m, int num)
  {
  	if (num < 0) {
  		m->count = m->size;
  	} else {
  		BUG_ON(m->count + num > m->size);
  		m->count += num;
  	}
  }
839cc2a94   Tetsuo Handa   seq_file: introdu...
80
81
82
83
84
85
86
87
88
89
90
91
92
  /**
   * seq_setwidth - set padding width
   * @m: the seq_file handle
   * @size: the max number of bytes to pad.
   *
   * Call seq_setwidth() for setting max width, then call seq_printf() etc. and
   * finally call seq_pad() to pad the remaining bytes.
   */
  static inline void seq_setwidth(struct seq_file *m, size_t size)
  {
  	m->pad_until = m->count + size;
  }
  void seq_pad(struct seq_file *m, char c);
8c9379e97   Al Viro   constify seq_file...
93
  char *mangle_path(char *s, const char *p, const char *esc);
15ad7cdcf   Helge Deller   [PATCH] struct se...
94
  int seq_open(struct file *, const struct seq_operations *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
95
96
97
98
99
100
  ssize_t seq_read(struct file *, char __user *, size_t, loff_t *);
  loff_t seq_lseek(struct file *, loff_t, int);
  int seq_release(struct inode *, struct file *);
  int seq_escape(struct seq_file *, const char *, const char *);
  int seq_putc(struct seq_file *m, char c);
  int seq_puts(struct seq_file *m, const char *s);
0b923606e   Peter Oberparleiter   seq_file: add fun...
101
  int seq_write(struct seq_file *seq, const void *data, size_t len);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
102

b9075fa96   Joe Perches   treewide: use __p...
103
  __printf(2, 3) int seq_printf(struct seq_file *, const char *, ...);
a4808147d   Steven Whitehouse   seq_file: Add seq...
104
  __printf(2, 0) int seq_vprintf(struct seq_file *, const char *, va_list args);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
105

8c9379e97   Al Viro   constify seq_file...
106
107
108
109
  int seq_path(struct seq_file *, const struct path *, const char *);
  int seq_dentry(struct seq_file *, struct dentry *, const char *);
  int seq_path_root(struct seq_file *m, const struct path *path,
  		  const struct path *root, const char *esc);
cb78a0ce6   Rusty Russell   bitmap: fix seq_b...
110
111
112
  int seq_bitmap(struct seq_file *m, const unsigned long *bits,
  				   unsigned int nr_bits);
  static inline int seq_cpumask(struct seq_file *m, const struct cpumask *mask)
50ac2d694   Alexey Dobriyan   seq_file: add seq...
113
  {
af76aba00   Rusty Russell   cpumask: fix seq_...
114
  	return seq_bitmap(m, cpumask_bits(mask), nr_cpu_ids);
50ac2d694   Alexey Dobriyan   seq_file: add seq...
115
116
117
118
119
120
  }
  
  static inline int seq_nodemask(struct seq_file *m, nodemask_t *mask)
  {
  	return seq_bitmap(m, mask->bits, MAX_NUMNODES);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
121

af76aba00   Rusty Russell   cpumask: fix seq_...
122
  int seq_bitmap_list(struct seq_file *m, const unsigned long *bits,
3eda20118   Lai Jiangshan   seq_file: add seq...
123
  		unsigned int nr_bits);
af76aba00   Rusty Russell   cpumask: fix seq_...
124
125
  static inline int seq_cpumask_list(struct seq_file *m,
  				   const struct cpumask *mask)
3eda20118   Lai Jiangshan   seq_file: add seq...
126
  {
af76aba00   Rusty Russell   cpumask: fix seq_...
127
  	return seq_bitmap_list(m, cpumask_bits(mask), nr_cpu_ids);
3eda20118   Lai Jiangshan   seq_file: add seq...
128
129
130
131
132
133
  }
  
  static inline int seq_nodemask_list(struct seq_file *m, nodemask_t *mask)
  {
  	return seq_bitmap_list(m, mask->bits, MAX_NUMNODES);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
134
  int single_open(struct file *, int (*)(struct seq_file *, void *), void *);
2043f495c   Al Viro   new helper: singl...
135
  int single_open_size(struct file *, int (*)(struct seq_file *, void *), void *, size_t);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
136
  int single_release(struct inode *, struct file *);
39699037a   Pavel Emelyanov   [FS] seq_file: In...
137
138
  void *__seq_open_private(struct file *, const struct seq_operations *, int);
  int seq_open_private(struct file *, const struct seq_operations *, int);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
139
  int seq_release_private(struct inode *, struct file *);
1ac101a5d   KAMEZAWA Hiroyuki   procfs: add num_t...
140
141
  int seq_put_decimal_ull(struct seq_file *m, char delimiter,
  			unsigned long long num);
bda7bad62   KAMEZAWA Hiroyuki   procfs: speed up ...
142
143
  int seq_put_decimal_ll(struct seq_file *m, char delimiter,
  			long long num);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
144

adb37c4c6   Eric W. Biederman   userns: Make seq_...
145
146
147
148
149
150
151
152
153
  static inline struct user_namespace *seq_user_ns(struct seq_file *seq)
  {
  #ifdef CONFIG_USER_NS
  	return seq->user_ns;
  #else
  	extern struct user_namespace init_user_ns;
  	return &init_user_ns;
  #endif
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
154
  #define SEQ_START_TOKEN ((void *)1)
bcf67e162   Pavel Emelianov   Make common helpe...
155
156
157
158
159
160
161
162
163
164
  /*
   * Helpers for iteration over list_head-s in seq_files
   */
  
  extern struct list_head *seq_list_start(struct list_head *head,
  		loff_t pos);
  extern struct list_head *seq_list_start_head(struct list_head *head,
  		loff_t pos);
  extern struct list_head *seq_list_next(void *v, struct list_head *head,
  		loff_t *ppos);
66655de6d   Li Zefan   seq_file: Add hel...
165
166
167
168
169
  /*
   * Helpers for iteration over hlist_head-s in seq_files
   */
  
  extern struct hlist_node *seq_hlist_start(struct hlist_head *head,
1cc523271   stephen hemminger   seq_file: add RCU...
170
  					  loff_t pos);
66655de6d   Li Zefan   seq_file: Add hel...
171
  extern struct hlist_node *seq_hlist_start_head(struct hlist_head *head,
1cc523271   stephen hemminger   seq_file: add RCU...
172
  					       loff_t pos);
66655de6d   Li Zefan   seq_file: Add hel...
173
  extern struct hlist_node *seq_hlist_next(void *v, struct hlist_head *head,
1cc523271   stephen hemminger   seq_file: add RCU...
174
175
176
177
178
179
180
181
182
  					 loff_t *ppos);
  
  extern struct hlist_node *seq_hlist_start_rcu(struct hlist_head *head,
  					      loff_t pos);
  extern struct hlist_node *seq_hlist_start_head_rcu(struct hlist_head *head,
  						   loff_t pos);
  extern struct hlist_node *seq_hlist_next_rcu(void *v,
  						   struct hlist_head *head,
  						   loff_t *ppos);
0bc77381c   Jeff Layton   seq_file: add seq...
183
184
185
186
187
  
  /* Helpers for iterating over per-cpu hlist_head-s in seq_files */
  extern struct hlist_node *seq_hlist_start_percpu(struct hlist_head __percpu *head, int *cpu, loff_t pos);
  
  extern struct hlist_node *seq_hlist_next_percpu(void *v, struct hlist_head __percpu *head, int *cpu, loff_t *pos);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
188
  #endif