1 .\" Copyright (c) Michael Smith
2 .\" All rights reserved.
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\" notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\" notice, this list of conditions and the following disclaimer in the
11 .\" documentation and/or other materials provided with the distribution.
13 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 .\" $FreeBSD: src/lib/libstand/libstand.3,v 1.5.2.11 2002/06/26 19:14:43 schweikh Exp $
32 .Nd support library for standalone executables
39 provides a set of supporting functions for standalone
40 applications, mimicking where possible the standard
44 The following sections group these functions by kind.
45 Unless specifically described here, see the corresponding section 3
46 manpages for the given functions.
48 String functions are available as documented in
56 .Fn malloc "size_t size"
61 bytes of memory from the heap using a best-fit algorithm.
67 Free the allocated object at
71 .Fn setheap "void *start" "void *limit"
75 This function must be called before calling
82 will be used for the heap; attempting to allocate beyond this will result
89 Provides the behaviour of
91 i.e.\& returns the highest point that the heap has reached.
93 be used during testing to determine the actual heap usage.
99 A set of functions are provided for manipulating a flat variable space similar
100 to the traditional shell-supported environment.
101 Major enhancements are support
102 for set/unset hook functions.
106 .Fn getenv "const char *name"
110 .Fn setenv "const char *name" "char *value" "int overwrite"
114 .Fn putenv "const char *string"
118 .Fn unsetenv "const char *name"
121 These functions behave similarly to their standard library counterparts.
123 .Ft "struct env_var *"
124 .Fn env_getenv "const char *name"
127 Looks up a variable in the environment and returns its entire
131 .Fn env_setenv "const char *name" "int flags" "char *value" "ev_sethook_t sethook" "ev_unsethook_t unsethook"
134 Creates a new or sets an existing environment variable called
136 If creating a new variable, the
140 arguments may be specified.
142 The set hook is invoked whenever an attempt
143 is made to set the variable, unless the
147 a set hook will validate the
149 argument, and then call
153 set to actually save the value.
154 The predefined function
156 may be specified to refuse all attempts to set a variable.
158 The unset hook is invoked when an attempt is made to unset a variable.
160 returns zero, the variable will be unset.
161 The predefined function
163 may be used to prevent a variable being unset.
165 .Sh STANDARD LIBRARY SUPPORT
169 .Fn getopt "int argc" "char * const *argv" "const char *optstring"
173 .Fn strtol "const char *nptr" "char **endptr" "int base"
177 .Fn srandom "unsigned long seed"
185 .Fn strerror "int error"
188 Returns error messages for the subset of
192 .It Fn assert expression
198 .Fn setjmp "jmp_buf env"
202 .Fn longjmp "jmp_buf env" "int val"
209 respectively as there is no signal state to manipulate.
220 Read characters from the console into
222 All of the standard cautions apply to this function.
225 .Fn ngets "char *buf" "size_t size"
230 - 1 characters from the console into
234 is less than 1, the function's behaviour is as for
238 .Fn fgets "char *buf" "int size" "int fd"
241 Read a line of at most
245 Line terminating characters are not stripped,
246 and the buffer is always nul-terminated.
247 Upon successful completion a pointer to the string is returned.
248 If end-of-file occurs before any characters are read,
249 NULL is returned and the buffer contents remain unchanged.
251 NULL is returned and the buffer contents are indeterminate.
254 .Fn fgetstr "char *buf" "int size" "int fd"
257 Read a line of at most
261 Line terminating characters are stripped, and the buffer is always
263 Returns the number of characters in
265 if successful, or -1 if a read error occurs.
268 .Fn printf "const char *fmt" "..."
272 .Fn vprintf "const char *fmt" "va_list ap"
276 .Fn sprintf "char *buf" "const char *fmt" "..."
280 .Fn vsprintf "char *buf" "const char *fmt" "va_list ap"
283 The *printf functions implement a subset of the standard
285 family functionality and some extensions.
286 The following standard conversions
288 .Cm c , d , n , o , p , s , u , x .
289 The following modifiers are supported:
290 .Cm + , - , # , * , 0 , field width, precision, l .
294 conversion is provided to decode error registers.
296 .Bd -ragged -offset indent
304 where <base> is the output expressed as a control character, e.g.\& \e10 gives
305 octal, \e20 gives hex.
306 Each <arg> is a sequence of characters, the first of
307 which gives the bit number to be inspected (origin 1) and the next characters
308 (up to a character less than 32) give the text to be displayed if the bit is set.
310 .Bd -ragged -offset indent
314 .Qq \e10\e2BITTWO\e1BITONE\en
318 would give the output
319 .Bd -ragged -offset indent
325 conversion provides a hexdump facility, eg.
326 .Bd -ragged -offset indent
332 .Qq XX:XX:XX:XX:XX:XX
334 .Bd -ragged -offset indent
344 .Sh CHARACTER TESTS AND CONVERSIONS
387 .Fn open "const char *path" "int flags"
390 Similar to the behaviour as specified in
392 except that file creation is not supported, so the mode parameter is not
396 argument may be one of
401 (although no filesystems currently support writing).
411 Close all open files.
414 .Fn read "int fd" "void *buf" "size_t len"
418 .Fn write "int fd" "void *buf" "size_t len"
421 (No filesystems currently support writing.)
424 .Fn lseek "int fd" "off_t offset" "int whence"
427 Files being automatically uncompressed during reading cannot seek backwards
428 from the current point.
431 .Fn stat "const char *path" "struct stat *sb"
435 .Fn fstat "int fd" "struct stat *sb"
442 functions only fill out the following fields in the
445 .Fa st_mode , st_nlink , st_uid , st_gid , st_size .
448 filesystem cannot provide meaningful values for this call, and the
450 filesystem always reports files having uid/gid of zero.
454 supplies a simple internal pager to ease reading the output of large commands.
461 Initialises the pager and tells it that the next line output will be the
463 The environment variable LINES is consulted to determine the number of
464 lines to be displayed before pausing.
473 .Fn pager_output "char *lines"
476 Sends the lines in the nul-terminated buffer at
479 Newline characters are counted in order to determine the number
480 of lines being output (wrapped lines are not accounted for).
482 will return zero when all of the lines have been output, or nonzero if the
483 display was paused and the user elected to quit.
486 .Fn pager_file "char *fname"
489 Attempts to open and display the file
491 Returns -1 on error, 0 at
493 or 1 if the user elects to quit while reading.
502 Successive calls emit the characters in the sequence |, /, -, \\ followed by a
503 backspace in order to provide reassurance to the user.
505 .Sh REQUIRED LOW-LEVEL SUPPORT
506 The following resources are consumed by
508 - stack, heap, console and devices.
510 The stack must be established before
512 functions can be invoked.
513 Stack requirements vary depending on the functions
514 and filesystems used by the consumer and the support layer functions detailed
517 The heap must be established before calling
523 Heap usage will vary depending on the number of simultaneously open files,
524 as well as client behaviour.
525 Automatic decompression will allocate more
526 than 64K of data per open file.
528 Console access is performed via the
533 functions detailed below.
535 Device access is initiated via
537 and is performed through the
542 functions in the device switch structure that
546 The consumer must provide the following support functions:
553 Return a character from the console, used by
562 Returns nonzero if a character is waiting from the console.
568 Write a character to the console, used by
575 and thus by many other functions for debugging and informational output.
578 .Fn devopen "struct open_file *of" "const char *name" "char **file"
581 Open the appropriate device for the file named in
585 a pointer to the remaining body of
587 which does not refer to the device.
592 will be set to point to the
594 structure for the opened device if successful.
595 Device identifiers must
596 always precede the path component, but may otherwise be arbitrarily formatted.
599 and thus for all device-related I/O.
602 .Fn devclose "struct open_file *of"
605 Close the device allocated for
607 The device driver itself will already have been called for the close;
608 this call should clean up any allocation made by
613 .Fn panic "const char *msg" "..."
616 Signal a fatal and unrecoverable error condition.
622 .Sh INTERNAL FILESYSTEMS
623 Internal filesystems are enabled by the consumer exporting the array
624 .Vt struct fs_ops *file_system[] ,
625 which should be initialised with pointers
629 The following filesystem handlers are supplied by
631 the consumer may supply other filesystems of their own:
632 .Bl -hang -width ".Va cd9660_fsops"
641 Linux ext2fs filesystem.
645 File access via TFTP.
649 ISO 9660 (CD-ROM) filesystem.
651 Stacked filesystem supporting gzipped files.
652 When trying the zipfs filesystem,
656 to the end of the filename, and then tries to locate the file using the other
658 Placement of this filesystem in the
660 array determines whether gzipped files will be opened in preference to non-gzipped
662 It is only possible to seek a gzipped file forwards, and
666 on gzipped files will report an invalid length.
671 .Xr bzip2 1 Ns -compressed
677 pointers should be terminated with a NULL.
679 Devices are exported by the supporting code via the array
680 .Vt struct devsw *devsw[]
681 which is a NULL terminated array of pointers to device switch structures.
684 contains contributions from many sources, including:
699 .An Matthew Dillon Aq dillon@backplane.com
702 The reorganisation and port to
704 the environment functions and this manpage were written by
705 .An Mike Smith Aq msmith@FreeBSD.org .
707 The lack of detailed memory usage data is unhelpful.