]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/man/man9/sbuf.9
dts: Import DTS for arm64
[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 May 23, 2018
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 .Nm sbuf_putbuf
62 .Nd safe string composition
63 .Sh SYNOPSIS
64 .In sys/types.h
65 .In sys/sbuf.h
66 .Ft typedef\ int ( sbuf_drain_func ) ( void\ *arg, const\ char\ *data, int\ len ) ;
67 .Pp
68 .Ft struct sbuf *
69 .Fo sbuf_new
70 .Fa "struct sbuf *s"
71 .Fa "char *buf"
72 .Fa "int length"
73 .Fa "int flags"
74 .Fc
75 .Ft struct sbuf *
76 .Fo sbuf_new_auto
77 .Fa "void"
78 .Fc
79 .Ft void
80 .Fo sbuf_clear
81 .Fa "struct sbuf *s"
82 .Fc
83 .Ft int
84 .Fo sbuf_get_flags
85 .Fa "struct sbuf *s"
86 .Fc
87 .Ft void
88 .Fo sbuf_set_flags
89 .Fa "struct sbuf *s"
90 .Fa "int flags"
91 .Fc
92 .Ft void
93 .Fo sbuf_clear_flags
94 .Fa "struct sbuf *s"
95 .Fa "int flags"
96 .Fc
97 .Ft int
98 .Fo sbuf_setpos
99 .Fa "struct sbuf *s"
100 .Fa "int pos"
101 .Fc
102 .Ft int
103 .Fo sbuf_bcat
104 .Fa "struct sbuf *s"
105 .Fa "const void *buf"
106 .Fa "size_t len"
107 .Fc
108 .Ft int
109 .Fo sbuf_bcpy
110 .Fa "struct sbuf *s"
111 .Fa "const void *buf"
112 .Fa "size_t len"
113 .Fc
114 .Ft int
115 .Fo sbuf_cat
116 .Fa "struct sbuf *s"
117 .Fa "const char *str"
118 .Fc
119 .Ft int
120 .Fo sbuf_cpy
121 .Fa "struct sbuf *s"
122 .Fa "const char *str"
123 .Fc
124 .Ft int
125 .Fo sbuf_printf
126 .Fa "struct sbuf *s"
127 .Fa "const char *fmt" "..."
128 .Fc
129 .Ft int
130 .Fo sbuf_vprintf
131 .Fa "struct sbuf *s"
132 .Fa "const char *fmt"
133 .Fa "va_list ap"
134 .Fc
135 .Ft int
136 .Fo sbuf_putc
137 .Fa "struct sbuf *s"
138 .Fa "int c"
139 .Fc
140 .Ft void
141 .Fo sbuf_set_drain
142 .Fa "struct sbuf *s"
143 .Fa "sbuf_drain_func *func"
144 .Fa "void *arg"
145 .Fc
146 .Ft int
147 .Fo sbuf_trim
148 .Fa "struct sbuf *s"
149 .Fc
150 .Ft int
151 .Fo sbuf_error
152 .Fa "struct sbuf *s"
153 .Fc
154 .Ft int
155 .Fo sbuf_finish
156 .Fa "struct sbuf *s"
157 .Fc
158 .Ft char *
159 .Fo sbuf_data
160 .Fa "struct sbuf *s"
161 .Fc
162 .Ft ssize_t
163 .Fo sbuf_len
164 .Fa "struct sbuf *s"
165 .Fc
166 .Ft int
167 .Fo sbuf_done
168 .Fa "struct sbuf *s"
169 .Fc
170 .Ft void
171 .Fo sbuf_delete
172 .Fa "struct sbuf *s"
173 .Fc
174 .Ft void
175 .Fo sbuf_start_section
176 .Fa "struct sbuf *s"
177 .Fa "ssize_t *old_lenp"
178 .Fc
179 .Ft ssize_t
180 .Fo sbuf_end_section
181 .Fa "struct sbuf *s"
182 .Fa "ssize_t old_len"
183 .Fa "size_t pad"
184 .Fa "int c"
185 .Fc
186 .Ft void
187 .Fo sbuf_hexdump
188 .Fa "struct sbuf *sb"
189 .Fa "void *ptr"
190 .Fa "int length"
191 .Fa "const char *hdr"
192 .Fa "int flags"
193 .Fc
194 .Ft void
195 .Fo sbuf_putbuf
196 .Fa "struct sbuf *s"
197 .Fc
198 .Fd #ifdef _KERNEL
199 .In sys/types.h
200 .In sys/sbuf.h
201 .Ft int
202 .Fo sbuf_bcopyin
203 .Fa "struct sbuf *s"
204 .Fa "const void *uaddr"
205 .Fa "size_t len"
206 .Fc
207 .Ft int
208 .Fo sbuf_copyin
209 .Fa "struct sbuf *s"
210 .Fa "const void *uaddr"
211 .Fa "size_t len"
212 .Fc
213 .In sys/sysctl.h
214 .Ft struct sbuf *
215 .Fo sbuf_new_for_sysctl
216 .Fa "struct sbuf *s"
217 .Fa "char *buf"
218 .Fa "int length"
219 .Fa "struct sysctl_req *req"
220 .Fc
221 .Fd #endif      /* _KERNEL */
222 .Sh DESCRIPTION
223 The
224 .Nm
225 family of functions allows one to safely allocate, compose and
226 release strings in kernel or user space.
227 .Pp
228 Instead of arrays of characters, these functions operate on structures
229 called
230 .Fa sbufs ,
231 defined in
232 .In sys/sbuf.h .
233 .Pp
234 Any errors encountered during the allocation or composition of the
235 string will be latched in the data structure,
236 making a single error test at the end of the composition
237 sufficient to determine success or failure of the entire process.
238 .Pp
239 The
240 .Fn sbuf_new
241 function initializes the
242 .Fa sbuf
243 pointed to by its first argument.
244 If that pointer is
245 .Dv NULL ,
246 .Fn sbuf_new
247 allocates a
248 .Vt struct sbuf
249 using
250 .Xr malloc 9 .
251 The
252 .Fa buf
253 argument is a pointer to a buffer in which to store the actual string;
254 if it is
255 .Dv NULL ,
256 .Fn sbuf_new
257 will allocate one using
258 .Xr malloc 9 .
259 The
260 .Fa length
261 is the initial size of the storage buffer.
262 The fourth argument,
263 .Fa flags ,
264 may be comprised of the following flags:
265 .Bl -tag -width ".Dv SBUF_AUTOEXTEND"
266 .It Dv SBUF_FIXEDLEN
267 The storage buffer is fixed at its initial size.
268 Attempting to extend the sbuf beyond this size results in an overflow condition.
269 .It Dv SBUF_AUTOEXTEND
270 This indicates that the storage buffer may be extended as necessary, so long
271 as resources allow, to hold additional data.
272 .It Dv SBUF_INCLUDENUL
273 This causes the final nulterm byte to be counted in the length of the data.
274 .It Dv SBUF_DRAINTOEOR
275 Treat top-level sections started with
276 .Fn sbuf_start_section
277 as a record boundary marker that will be used during drain operations to avoid
278 records being split.
279 If a record grows sufficiently large such that it fills the
280 .Fa sbuf
281 and therefore cannot be drained without being split, an error of EDEADLK is set.
282 .El
283 .Pp
284 Note that if
285 .Fa buf
286 is not
287 .Dv NULL ,
288 it must point to an array of at least
289 .Fa length
290 characters.
291 The result of accessing that array directly while it is in use by the
292 sbuf is undefined.
293 .Pp
294 The
295 .Fn sbuf_new_auto
296 function is a shortcut for creating a completely dynamic
297 .Nm .
298 It is the equivalent of calling
299 .Fn sbuf_new
300 with values
301 .Dv NULL ,
302 .Dv NULL ,
303 .Dv 0 ,
304 and
305 .Dv SBUF_AUTOEXTEND .
306 .Pp
307 The
308 .Fn sbuf_new_for_sysctl
309 function will set up an sbuf with a drain function to use
310 .Fn SYSCTL_OUT
311 when the internal buffer fills.
312 Note that if the various functions which append to an sbuf are used while
313 a non-sleepable lock is held, the user buffer should be wired using
314 .Fn sysctl_wire_old_buffer .
315 .Pp
316 The
317 .Fn sbuf_delete
318 function clears the
319 .Fa sbuf
320 and frees any memory allocated for it.
321 There must be a call to
322 .Fn sbuf_delete
323 for every call to
324 .Fn sbuf_new .
325 Any attempt to access the sbuf after it has been deleted will fail.
326 .Pp
327 The
328 .Fn sbuf_clear
329 function invalidates the contents of the
330 .Fa sbuf
331 and resets its position to zero.
332 .Pp
333 The
334 .Fn sbuf_get_flags
335 function returns the current user flags.
336 The
337 .Fn sbuf_set_flags
338 and
339 .Fn sbuf_get_flags
340 functions set or clear one or more user flags, respectively.
341 The user flags are described under the
342 .Fn sbuf_new
343 function.
344 .Pp
345 The
346 .Fn sbuf_setpos
347 function sets the
348 .Fa sbuf Ns 's
349 end position to
350 .Fa pos ,
351 which is a value between zero and one less than the size of the
352 storage buffer.
353 This effectively truncates the sbuf at the new position.
354 .Pp
355 The
356 .Fn sbuf_bcat
357 function appends the first
358 .Fa len
359 bytes from the buffer
360 .Fa buf
361 to the
362 .Fa sbuf .
363 .Pp
364 The
365 .Fn sbuf_bcopyin
366 function copies
367 .Fa len
368 bytes from the specified userland address into the
369 .Fa sbuf .
370 .Pp
371 The
372 .Fn sbuf_bcpy
373 function replaces the contents of the
374 .Fa sbuf
375 with the first
376 .Fa len
377 bytes from the buffer
378 .Fa buf .
379 .Pp
380 The
381 .Fn sbuf_cat
382 function appends the NUL-terminated string
383 .Fa str
384 to the
385 .Fa sbuf
386 at the current position.
387 .Pp
388 The
389 .Fn sbuf_set_drain
390 function sets a drain function
391 .Fa func
392 for the
393 .Fa sbuf ,
394 and records a pointer
395 .Fa arg
396 to be passed to the drain on callback.
397 The drain function cannot be changed while
398 .Fa sbuf_len
399 is non-zero.
400 .Pp
401 The registered drain function
402 .Vt sbuf_drain_func
403 will be called with the argument
404 .Fa arg
405 provided to
406 .Fn sbuf_set_drain ,
407 a pointer
408 .Fa data
409 to a byte string that is the contents of the sbuf, and the length
410 .Fa len
411 of the data.
412 If the drain function exists, it will be called when the sbuf internal
413 buffer is full, or on behalf of
414 .Fn sbuf_finish .
415 The drain function may drain some or all of the data, but must drain
416 at least 1 byte.
417 The return value from the drain function, if positive, indicates how
418 many bytes were drained.
419 If negative, the return value indicates the negative error code which
420 will be returned from this or a later call to
421 .Fn sbuf_finish .
422 The returned drained length cannot be zero.
423 To do unbuffered draining, initialize the sbuf with a two-byte buffer.
424 The drain will be called for every byte added to the sbuf.
425 The
426 .Fn sbuf_bcopyin ,
427 .Fn sbuf_copyin ,
428 .Fn sbuf_trim ,
429 and
430 .Fn sbuf_data
431 functions cannot be used on an sbuf with a drain.
432 .Pp
433 The
434 .Fn sbuf_copyin
435 function copies a NUL-terminated string from the specified userland
436 address into the
437 .Fa sbuf .
438 If the
439 .Fa len
440 argument is non-zero, no more than
441 .Fa len
442 characters (not counting the terminating NUL) are copied; otherwise
443 the entire string, or as much of it as can fit in the
444 .Fa sbuf ,
445 is copied.
446 .Pp
447 The
448 .Fn sbuf_cpy
449 function replaces the contents of the
450 .Fa sbuf
451 with those of the NUL-terminated string
452 .Fa str .
453 This is equivalent to calling
454 .Fn sbuf_cat
455 with a fresh
456 .Fa sbuf
457 or one which position has been reset to zero with
458 .Fn sbuf_clear
459 or
460 .Fn sbuf_setpos .
461 .Pp
462 The
463 .Fn sbuf_printf
464 function formats its arguments according to the format string pointed
465 to by
466 .Fa fmt
467 and appends the resulting string to the
468 .Fa sbuf
469 at the current position.
470 .Pp
471 The
472 .Fn sbuf_vprintf
473 function behaves the same as
474 .Fn sbuf_printf
475 except that the arguments are obtained from the variable-length argument list
476 .Fa ap .
477 .Pp
478 The
479 .Fn sbuf_putc
480 function appends the character
481 .Fa c
482 to the
483 .Fa sbuf
484 at the current position.
485 .Pp
486 The
487 .Fn sbuf_trim
488 function removes trailing whitespace from the
489 .Fa sbuf .
490 .Pp
491 The
492 .Fn sbuf_error
493 function returns any error value that the
494 .Fa sbuf
495 may have accumulated, either from the drain function, or ENOMEM if the
496 .Fa sbuf
497 overflowed.
498 This function is generally not needed and instead the error code from
499 .Fn sbuf_finish
500 is the preferred way to discover whether an sbuf had an error.
501 .Pp
502 The
503 .Fn sbuf_finish
504 function will call the attached drain function if one exists until all
505 the data in the
506 .Fa sbuf
507 is flushed.
508 If there is no attached drain,
509 .Fn sbuf_finish
510 NUL-terminates the
511 .Fa sbuf .
512 In either case it marks the
513 .Fa sbuf
514 as finished, which means that it may no longer be modified using
515 .Fn sbuf_setpos ,
516 .Fn sbuf_cat ,
517 .Fn sbuf_cpy ,
518 .Fn sbuf_printf
519 or
520 .Fn sbuf_putc ,
521 until
522 .Fn sbuf_clear
523 is used to reset the sbuf.
524 .Pp
525 The
526 .Fn sbuf_data
527 function returns the actual string;
528 .Fn sbuf_data
529 only works on a finished
530 .Fa sbuf .
531 The
532 .Fn sbuf_len
533 function returns the length of the string.
534 For an
535 .Fa sbuf
536 with an attached drain,
537 .Fn sbuf_len
538 returns the length of the un-drained data.
539 .Fn sbuf_done
540 returns non-zero if the
541 .Fa sbuf
542 is finished.
543 .Pp
544 The
545 .Fn sbuf_start_section
546 and
547 .Fn sbuf_end_section
548 functions may be used for automatic section alignment.
549 The arguments
550 .Fa pad
551 and
552 .Fa c
553 specify the padding size and a character used for padding.
554 The arguments
555 .Fa old_lenp
556 and
557 .Fa old_len
558 are to save and restore the current section length when nested sections
559 are used.
560 For the top level section
561 .Dv NULL
562 and \-1 can be specified for
563 .Fa old_lenp
564 and
565 .Fa old_len
566 respectively.
567 .Pp
568 The
569 .Fn sbuf_hexdump
570 function prints an array of bytes to the supplied sbuf, along with an ASCII
571 representation of the bytes if possible.
572 See the
573 .Xr hexdump 3
574 man page for more details on the interface.
575 .Pp
576 The
577 .Fn sbuf_putbuf
578 function printfs the sbuf to stdout if in userland, and to the console
579 and log if in the kernel.
580 It does not drain the buffer or update any pointers.
581 .Sh NOTES
582 If an operation caused an
583 .Fa sbuf
584 to overflow, most subsequent operations on it will fail until the
585 .Fa sbuf
586 is finished using
587 .Fn sbuf_finish
588 or reset using
589 .Fn sbuf_clear ,
590 or its position is reset to a value between 0 and one less than the
591 size of its storage buffer using
592 .Fn sbuf_setpos ,
593 or it is reinitialized to a sufficiently short string using
594 .Fn sbuf_cpy .
595 .Pp
596 Drains in user-space will not always function as indicated.
597 While the drain function will be called immediately on overflow from
598 the
599 .Fa sbuf_putc ,
600 .Fa sbuf_bcat ,
601 .Fa sbuf_cat
602 functions,
603 .Fa sbuf_printf
604 and
605 .Fa sbuf_vprintf
606 currently have no way to determine whether there will be an overflow
607 until after it occurs, and cannot do a partial expansion of the format
608 string.
609 Thus when using libsbuf the buffer may be extended to allow completion
610 of a single printf call, even though a drain is attached.
611 .Sh RETURN VALUES
612 The
613 .Fn sbuf_new
614 function returns
615 .Dv NULL
616 if it failed to allocate a storage buffer, and a pointer to the new
617 .Fa sbuf
618 otherwise.
619 .Pp
620 The
621 .Fn sbuf_setpos
622 function returns \-1 if
623 .Fa pos
624 was invalid, and zero otherwise.
625 .Pp
626 The
627 .Fn sbuf_bcat ,
628 .Fn sbuf_cat ,
629 .Fn sbuf_cpy ,
630 .Fn sbuf_printf ,
631 .Fn sbuf_putc ,
632 and
633 .Fn sbuf_trim
634 functions
635 all return \-1 if the buffer overflowed, and zero otherwise.
636 .Pp
637 The
638 .Fn sbuf_error
639 function returns a non-zero value if the buffer has an overflow or
640 drain error, and zero otherwise.
641 .Pp
642 The
643 .Fn sbuf_len
644 function returns \-1 if the buffer overflowed.
645 .Pp
646 The
647 .Fn sbuf_copyin
648 function
649 returns \-1 if copying string from userland failed, and number of bytes
650 copied otherwise.
651 .Pp
652 The
653 .Fn sbuf_end_section
654 function returns the section length or \-1 if the buffer has an error.
655 .Pp
656 The
657 .Fn sbuf_finish 9
658 function (the kernel version) returns ENOMEM if the sbuf overflowed before
659 being finished,
660 or returns the error code from the drain if one is attached.
661 .Pp
662 The
663 .Fn sbuf_finish 3
664 function (the userland version)
665 will return zero for success and \-1 and set errno on error.
666 .Sh EXAMPLES
667 .Bd -literal -compact
668 #include <sys/types.h>
669 #include <sys/sbuf.h>
670
671 struct sbuf *sb;
672
673 sb = sbuf_new_auto();
674 sbuf_cat(sb, "Customers found:\en");
675 TAILQ_FOREACH(foo, &foolist, list) {
676         sbuf_printf(sb, "   %4d %s\en", foo->index, foo->name);
677         sbuf_printf(sb, "      Address: %s\en", foo->address);
678         sbuf_printf(sb, "      Zip: %s\en", foo->zipcode);
679 }
680 if (sbuf_finish(sb) != 0) /* Check for any and all errors */
681         err(1, "Could not generate message");
682 transmit_msg(sbuf_data(sb), sbuf_len(sb));
683 sbuf_delete(sb);
684 .Ed
685 .Sh SEE ALSO
686 .Xr hexdump 3 ,
687 .Xr printf 3 ,
688 .Xr strcat 3 ,
689 .Xr strcpy 3 ,
690 .Xr copyin 9 ,
691 .Xr copyinstr 9 ,
692 .Xr printf 9
693 .Sh HISTORY
694 The
695 .Nm
696 family of functions first appeared in
697 .Fx 4.4 .
698 .Sh AUTHORS
699 .An -nosplit
700 The
701 .Nm
702 family of functions was designed by
703 .An Poul-Henning Kamp Aq Mt phk@FreeBSD.org
704 and implemented by
705 .An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org .
706 Additional improvements were suggested by
707 .An Justin T. Gibbs Aq Mt gibbs@FreeBSD.org .
708 Auto-extend support added by
709 .An Kelly Yancey Aq Mt kbyanc@FreeBSD.org .
710 Drain functionality added by
711 .An Matthew Fleming Aq Mt mdf@FreeBSD.org .
712 .Pp
713 This manual page was written by
714 .An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org .