]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/man/man9/sbuf.9
Update llvm/clang to r240225.
[FreeBSD/FreeBSD.git] / share / man / man9 / sbuf.9
1 .\"-
2 .\" Copyright (c) 2000 Poul-Henning Kamp and Dag-Erling Coïdan Smørgrav
3 .\" All rights reserved.
4 .\"
5 .\" Redistribution and use in source and binary forms, with or without
6 .\" modification, are permitted provided that the following conditions
7 .\" are met:
8 .\" 1. Redistributions of source code must retain the above copyright
9 .\"    notice, this list of conditions and the following disclaimer.
10 .\" 2. Redistributions in binary form must reproduce the above copyright
11 .\"    notice, this list of conditions and the following disclaimer in the
12 .\"    documentation and/or other materials provided with the distribution.
13 .\"
14 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 .\" SUCH DAMAGE.
25 .\"
26 .\" $FreeBSD$
27 .\"
28 .Dd March 14, 2015
29 .Dt SBUF 9
30 .Os
31 .Sh NAME
32 .Nm sbuf ,
33 .Nm sbuf_new ,
34 .Nm sbuf_new_auto ,
35 .Nm sbuf_new_for_sysctl ,
36 .Nm sbuf_clear ,
37 .Nm sbuf_get_flags ,
38 .Nm sbuf_set_flags ,
39 .Nm sbuf_clear_flags ,
40 .Nm sbuf_setpos ,
41 .Nm sbuf_bcat ,
42 .Nm sbuf_bcopyin ,
43 .Nm sbuf_bcpy ,
44 .Nm sbuf_cat ,
45 .Nm sbuf_copyin ,
46 .Nm sbuf_cpy ,
47 .Nm sbuf_printf ,
48 .Nm sbuf_vprintf ,
49 .Nm sbuf_putc ,
50 .Nm sbuf_set_drain ,
51 .Nm sbuf_trim ,
52 .Nm sbuf_error ,
53 .Nm sbuf_finish ,
54 .Nm sbuf_data ,
55 .Nm sbuf_len ,
56 .Nm sbuf_done ,
57 .Nm sbuf_delete ,
58 .Nm sbuf_start_section ,
59 .Nm sbuf_end_section ,
60 .Nm sbuf_hexdump
61 .Nd safe string composition
62 .Sh SYNOPSIS
63 .In sys/types.h
64 .In sys/sbuf.h
65 .Ft typedef\ int ( sbuf_drain_func ) ( void\ *arg, const\ char\ *data, int\ len ) ;
66 .Pp
67 .Ft struct sbuf *
68 .Fn sbuf_new "struct sbuf *s" "char *buf" "int length" "int flags"
69 .Ft struct sbuf *
70 .Fn sbuf_new_auto
71 .Ft void
72 .Fn sbuf_clear "struct sbuf *s"
73 .Ft int
74 .Fn sbuf_get_flags "struct sbuf *s"
75 .Ft void
76 .Fn sbuf_set_flags "struct sbuf *s" "int flags"
77 .Ft void
78 .Fn sbuf_clear_flags "struct sbuf *s" "int flags"
79 .Ft int
80 .Fn sbuf_setpos "struct sbuf *s" "int pos"
81 .Ft int
82 .Fn sbuf_bcat "struct sbuf *s" "const void *buf" "size_t len"
83 .Ft int
84 .Fn sbuf_bcopyin "struct sbuf *s" "const void *uaddr" "size_t len"
85 .Ft int
86 .Fn sbuf_bcpy "struct sbuf *s" "const void *buf" "size_t len"
87 .Ft int
88 .Fn sbuf_cat "struct sbuf *s" "const char *str"
89 .Ft int
90 .Fn sbuf_copyin "struct sbuf *s" "const void *uaddr" "size_t len"
91 .Ft int
92 .Fn sbuf_cpy "struct sbuf *s" "const char *str"
93 .Ft int
94 .Fn sbuf_printf "struct sbuf *s" "const char *fmt" "..."
95 .Ft int
96 .Fn sbuf_vprintf "struct sbuf *s" "const char *fmt" "va_list ap"
97 .Ft int
98 .Fn sbuf_putc "struct sbuf *s" "int c"
99 .Ft void
100 .Fn sbuf_set_drain "struct sbuf *s" "sbuf_drain_func *func" "void *arg"
101 .Ft int
102 .Fn sbuf_trim "struct sbuf *s"
103 .Ft int
104 .Fn sbuf_error "struct sbuf *s"
105 .Ft int
106 .Fn sbuf_finish "struct sbuf *s"
107 .Ft char *
108 .Fn sbuf_data "struct sbuf *s"
109 .Ft ssize_t
110 .Fn sbuf_len "struct sbuf *s"
111 .Ft int
112 .Fn sbuf_done "struct sbuf *s"
113 .Ft void
114 .Fn sbuf_delete "struct sbuf *s"
115 .Ft void
116 .Fn sbuf_start_section "struct sbuf *s" "ssize_t *old_lenp"
117 .Ft ssize_t
118 .Fn sbuf_end_section "struct sbuf *s" "ssize_t old_len" "size_t pad" "int c"
119 .Ft void
120 .Fo sbuf_hexdump
121 .Fa "struct sbuf *sb"
122 .Fa "void *ptr"
123 .Fa "int length"
124 .Fa "const char *hdr"
125 .Fa "int flags"
126 .Fc
127 .In sys/sysctl.h
128 .Ft struct sbuf *
129 .Fn sbuf_new_for_sysctl "struct sbuf *s" "char *buf" "int length" "struct sysctl_req *req"
130 .Sh DESCRIPTION
131 The
132 .Nm
133 family of functions allows one to safely allocate, compose and
134 release strings in kernel or user space.
135 .Pp
136 Instead of arrays of characters, these functions operate on structures
137 called
138 .Fa sbufs ,
139 defined in
140 .In sys/sbuf.h .
141 .Pp
142 Any errors encountered during the allocation or composition of the
143 string will be latched in the data structure,
144 making a single error test at the end of the composition
145 sufficient to determine success or failure of the entire process.
146 .Pp
147 The
148 .Fn sbuf_new
149 function initializes the
150 .Fa sbuf
151 pointed to by its first argument.
152 If that pointer is
153 .Dv NULL ,
154 .Fn sbuf_new
155 allocates a
156 .Vt struct sbuf
157 using
158 .Xr malloc 9 .
159 The
160 .Fa buf
161 argument is a pointer to a buffer in which to store the actual string;
162 if it is
163 .Dv NULL ,
164 .Fn sbuf_new
165 will allocate one using
166 .Xr malloc 9 .
167 The
168 .Fa length
169 is the initial size of the storage buffer.
170 The fourth argument,
171 .Fa flags ,
172 may be comprised of the following flags:
173 .Bl -tag -width ".Dv SBUF_AUTOEXTEND"
174 .It Dv SBUF_FIXEDLEN
175 The storage buffer is fixed at its initial size.
176 Attempting to extend the sbuf beyond this size results in an overflow condition.
177 .It Dv SBUF_AUTOEXTEND
178 This indicates that the storage buffer may be extended as necessary, so long
179 as resources allow, to hold additional data.
180 .It Dv SBUF_INCLUDENUL
181 This causes the final nulterm byte to be counted in the length of the data.
182 .El
183 .Pp
184 Note that if
185 .Fa buf
186 is not
187 .Dv NULL ,
188 it must point to an array of at least
189 .Fa length
190 characters.
191 The result of accessing that array directly while it is in use by the
192 sbuf is undefined.
193 .Pp
194 The
195 .Fn sbuf_new_auto
196 function is a shortcut for creating a completely dynamic
197 .Nm .
198 It is the equivalent of calling
199 .Fn sbuf_new
200 with values
201 .Dv NULL ,
202 .Dv NULL ,
203 .Dv 0 ,
204 and
205 .Dv SBUF_AUTOEXTEND .
206 .Pp
207 The
208 .Fn sbuf_new_for_sysctl
209 function will set up an sbuf with a drain function to use
210 .Fn SYSCTL_OUT
211 when the internal buffer fills.
212 Note that if the various functions which append to an sbuf are used while
213 a non-sleepable lock is held, the user buffer should be wired using
214 .Fn sysctl_wire_old_buffer .
215 .Pp
216 The
217 .Fn sbuf_delete
218 function clears the
219 .Fa sbuf
220 and frees any memory allocated for it.
221 There must be a call to
222 .Fn sbuf_delete
223 for every call to
224 .Fn sbuf_new .
225 Any attempt to access the sbuf after it has been deleted will fail.
226 .Pp
227 The
228 .Fn sbuf_clear
229 function invalidates the contents of the
230 .Fa sbuf
231 and resets its position to zero.
232 .Pp
233 The
234 .Fn sbuf_get_flags
235 function returns the current user flags.
236 The
237 .Fn sbuf_set_flags
238 and
239 .Fn sbuf_get_flags
240 functions set or clear one or more user flags, respectively.
241 The user flags are described under the
242 .Fn sbuf_new
243 function.
244 .Pp
245 The
246 .Fn sbuf_setpos
247 function sets the
248 .Fa sbuf Ns 's
249 end position to
250 .Fa pos ,
251 which is a value between zero and one less than the size of the
252 storage buffer.
253 This effectively truncates the sbuf at the new position.
254 .Pp
255 The
256 .Fn sbuf_bcat
257 function appends the first
258 .Fa len
259 bytes from the buffer
260 .Fa buf
261 to the
262 .Fa sbuf .
263 .Pp
264 The
265 .Fn sbuf_bcopyin
266 function copies
267 .Fa len
268 bytes from the specified userland address into the
269 .Fa sbuf .
270 .Pp
271 The
272 .Fn sbuf_bcpy
273 function replaces the contents of the
274 .Fa sbuf
275 with the first
276 .Fa len
277 bytes from the buffer
278 .Fa buf .
279 .Pp
280 The
281 .Fn sbuf_cat
282 function appends the NUL-terminated string
283 .Fa str
284 to the
285 .Fa sbuf
286 at the current position.
287 .Pp
288 The
289 .Fn sbuf_set_drain
290 function sets a drain function
291 .Fa func
292 for the
293 .Fa sbuf ,
294 and records a pointer
295 .Fa arg
296 to be passed to the drain on callback.
297 The drain function cannot be changed while
298 .Fa sbuf_len
299 is non-zero.
300 .Pp
301 The registered drain function
302 .Vt sbuf_drain_func
303 will be called with the argument
304 .Fa arg
305 provided to
306 .Fn sbuf_set_drain ,
307 a pointer
308 .Fa data
309 to a byte string that is the contents of the sbuf, and the length
310 .Fa len
311 of the data.
312 If the drain function exists, it will be called when the sbuf internal
313 buffer is full, or on behalf of
314 .Fn sbuf_finish .
315 The drain function may drain some or all of the data, but must drain
316 at least 1 byte.
317 The return value from the drain function, if positive, indicates how
318 many bytes were drained.
319 If negative, the return value indicates the negative error code which
320 will be returned from this or a later call to
321 .Fn sbuf_finish .
322 The returned drained length cannot be zero.
323 To do unbuffered draining, initialize the sbuf with a two-byte buffer.
324 The drain will be called for every byte added to the sbuf.
325 The
326 .Fn sbuf_bcopyin ,
327 .Fn sbuf_copyin ,
328 .Fn sbuf_trim ,
329 and
330 .Fn sbuf_data
331 functions cannot be used on an sbuf with a drain.
332 .Pp
333 The
334 .Fn sbuf_copyin
335 function copies a NUL-terminated string from the specified userland
336 address into the
337 .Fa sbuf .
338 If the
339 .Fa len
340 argument is non-zero, no more than
341 .Fa len
342 characters (not counting the terminating NUL) are copied; otherwise
343 the entire string, or as much of it as can fit in the
344 .Fa sbuf ,
345 is copied.
346 .Pp
347 The
348 .Fn sbuf_cpy
349 function replaces the contents of the
350 .Fa sbuf
351 with those of the NUL-terminated string
352 .Fa str .
353 This is equivalent to calling
354 .Fn sbuf_cat
355 with a fresh
356 .Fa sbuf
357 or one which position has been reset to zero with
358 .Fn sbuf_clear
359 or
360 .Fn sbuf_setpos .
361 .Pp
362 The
363 .Fn sbuf_printf
364 function formats its arguments according to the format string pointed
365 to by
366 .Fa fmt
367 and appends the resulting string to the
368 .Fa sbuf
369 at the current position.
370 .Pp
371 The
372 .Fn sbuf_vprintf
373 function behaves the same as
374 .Fn sbuf_printf
375 except that the arguments are obtained from the variable-length argument list
376 .Fa ap .
377 .Pp
378 The
379 .Fn sbuf_putc
380 function appends the character
381 .Fa c
382 to the
383 .Fa sbuf
384 at the current position.
385 .Pp
386 The
387 .Fn sbuf_trim
388 function removes trailing whitespace from the
389 .Fa sbuf .
390 .Pp
391 The
392 .Fn sbuf_error
393 function returns any error value that the
394 .Fa sbuf
395 may have accumulated, either from the drain function, or ENOMEM if the
396 .Fa sbuf
397 overflowed.
398 This function is generally not needed and instead the error code from
399 .Fn sbuf_finish
400 is the preferred way to discover whether an sbuf had an error.
401 .Pp
402 The
403 .Fn sbuf_finish
404 function will call the attached drain function if one exists until all
405 the data in the
406 .Fa sbuf
407 is flushed.
408 If there is no attached drain,
409 .Fn sbuf_finish
410 NUL-terminates the
411 .Fa sbuf .
412 In either case it marks the
413 .Fa sbuf
414 as finished, which means that it may no longer be modified using
415 .Fn sbuf_setpos ,
416 .Fn sbuf_cat ,
417 .Fn sbuf_cpy ,
418 .Fn sbuf_printf
419 or
420 .Fn sbuf_putc ,
421 until
422 .Fn sbuf_clear
423 is used to reset the sbuf.
424 .Pp
425 The
426 .Fn sbuf_data
427 function returns the actual string;
428 .Fn sbuf_data
429 only works on a finished
430 .Fa sbuf .
431 The
432 .Fn sbuf_len
433 function returns the length of the string.
434 For an
435 .Fa sbuf
436 with an attached drain,
437 .Fn sbuf_len
438 returns the length of the un-drained data.
439 .Fn sbuf_done
440 returns non-zero if the
441 .Fa sbuf
442 is finished.
443 .Pp
444 The
445 .Fn sbuf_start_section
446 and
447 .Fn sbuf_end_section
448 functions may be used for automatic section alignment.
449 The arguments
450 .Fa pad
451 and
452 .Fa c
453 specify the padding size and a character used for padding.
454 The arguments
455 .Fa old_lenp
456 and
457 .Fa old_len
458 are to save and restore the current section length when nested sections
459 are used.
460 For the top level section
461 .Dv NULL
462 and \-1 can be specified for
463 .Fa old_lenp
464 and
465 .Fa old_len
466 respectively.
467 .Pp
468 The
469 .Fn sbuf_hexdump
470 function prints an array of bytes to the supplied sbuf, along with an ASCII
471 representation of the bytes if possible.
472 See the
473 .Xr hexdump 3
474 man page for more details on the interface.
475 .Sh NOTES
476 If an operation caused an
477 .Fa sbuf
478 to overflow, most subsequent operations on it will fail until the
479 .Fa sbuf
480 is finished using
481 .Fn sbuf_finish
482 or reset using
483 .Fn sbuf_clear ,
484 or its position is reset to a value between 0 and one less than the
485 size of its storage buffer using
486 .Fn sbuf_setpos ,
487 or it is reinitialized to a sufficiently short string using
488 .Fn sbuf_cpy .
489 .Pp
490 Drains in user-space will not always function as indicated.
491 While the drain function will be called immediately on overflow from
492 the
493 .Fa sbuf_putc ,
494 .Fa sbuf_bcat ,
495 .Fa sbuf_cat
496 functions,
497 .Fa sbuf_printf
498 and
499 .Fa sbuf_vprintf
500 currently have no way to determine whether there will be an overflow
501 until after it occurs, and cannot do a partial expansion of the format
502 string.
503 Thus when using libsbuf the buffer may be extended to allow completion
504 of a single printf call, even though a drain is attached.
505 .Sh RETURN VALUES
506 The
507 .Fn sbuf_new
508 function returns
509 .Dv NULL
510 if it failed to allocate a storage buffer, and a pointer to the new
511 .Fa sbuf
512 otherwise.
513 .Pp
514 The
515 .Fn sbuf_setpos
516 function returns \-1 if
517 .Fa pos
518 was invalid, and zero otherwise.
519 .Pp
520 The
521 .Fn sbuf_cat ,
522 .Fn sbuf_cpy ,
523 .Fn sbuf_printf ,
524 .Fn sbuf_putc ,
525 and
526 .Fn sbuf_trim
527 functions
528 all return \-1 if the buffer overflowed, and zero otherwise.
529 .Pp
530 The
531 .Fn sbuf_error
532 function returns a non-zero value if the buffer has an overflow or
533 drain error, and zero otherwise.
534 .Pp
535 The
536 .Fn sbuf_len
537 function returns \-1 if the buffer overflowed.
538 .Pp
539 The
540 .Fn sbuf_copyin
541 function
542 returns \-1 if copying string from userland failed, and number of bytes
543 copied otherwise.
544 .Pp
545 The
546 .Fn sbuf_end_section
547 function returns the section length or \-1 if the buffer has an error.
548 .Pp
549 The
550 .Fn sbuf_finish 9
551 function (the kernel version) returns ENOMEM if the sbuf overflowed before
552 being finished,
553 or returns the error code from the drain if one is attached.
554 .Pp
555 The
556 .Fn sbuf_finish 3
557 function (the userland version)
558 will return zero for success and \-1 and set errno on error.
559 .Sh EXAMPLES
560 .Bd -literal -compact
561 #include <sys/sbuf.h>
562
563 struct sbuf *sb;
564
565 sb = sbuf_new_auto();
566 sbuf_cat(sb, "Customers found:\en");
567 TAILQ_FOREACH(foo, &foolist, list) {
568         sbuf_printf(sb, "   %4d %s\en", foo->index, foo->name);
569         sbuf_printf(sb, "      Address: %s\en", foo->address);
570         sbuf_printf(sb, "      Zip: %s\en", foo->zipcode);
571 }
572 if (sbuf_finish(sb) != 0) /* Check for any and all errors */
573         err(1, "Could not generate message");
574 transmit_msg(sbuf_data(sb), sbuf_len(sb));
575 sbuf_delete(sb);
576 .Ed
577 .Sh SEE ALSO
578 .Xr hexdump 3 ,
579 .Xr printf 3 ,
580 .Xr strcat 3 ,
581 .Xr strcpy 3 ,
582 .Xr copyin 9 ,
583 .Xr copyinstr 9 ,
584 .Xr printf 9
585 .Sh HISTORY
586 The
587 .Nm
588 family of functions first appeared in
589 .Fx 4.4 .
590 .Sh AUTHORS
591 .An -nosplit
592 The
593 .Nm
594 family of functions was designed by
595 .An Poul-Henning Kamp Aq Mt phk@FreeBSD.org
596 and implemented by
597 .An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org .
598 Additional improvements were suggested by
599 .An Justin T. Gibbs Aq Mt gibbs@FreeBSD.org .
600 Auto-extend support added by
601 .An Kelly Yancey Aq Mt kbyanc@FreeBSD.org .
602 Drain functionality added by
603 .An Matthew Fleming Aq Mt mdf@FreeBSD.org .
604 .Pp
605 This manual page was written by
606 .An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org .