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 $
26 .\" $DragonFly: src/lib/libstand/libstand.3,v 1.9 2008/11/23 21:55:52 swildner Exp $
33 .Nd support library for standalone executables
40 provides a set of supporting functions for standalone
41 applications, mimicking where possible the standard
45 The following sections group these functions by kind.
46 Unless specifically described here, see the corresponding section 3
47 manpages for the given functions.
49 String functions are available as documented in
57 Fn malloc "size_t size"
61 bytes of memory from the heap using a best-fit algorithm.
66 Free the allocated object at
70 Fn setheap "void *start" "void *limit"
73 This function must be called before calling
80 will be used for the heap; attempting to allocate beyond this will result
86 Provides the behaviour of
88 i.e.\& returns the highest point that the heap has reached.
90 be used during testing to determine the actual heap usage.
96 A set of functions are provided for manipulating a flat variable space similar
97 to the traditional shell-supported environment.
98 Major enhancements are support
99 for set/unset hook functions.
103 Fn getenv "const char *name"
106 Fn setenv "const char *name" "char *value" "int overwrite"
109 Fn putenv "const char *string"
112 Fn unsetenv "const char *name"
114 These functions behave similarly to their standard library counterparts.
116 Ft "struct env_var *" \
117 Fn env_getenv "const char *name"
119 Looks up a variable in the environment and returns its entire
123 Fn env_setenv "const char *name" "int flags" "char *value" "ev_sethook_t sethook" "ev_unsethook_t unsethook"
125 Creates a new or sets an existing environment variable called
127 If creating a new variable, the
131 arguments may be specified.
133 The set hook is invoked whenever an attempt
134 is made to set the variable, unless the
138 a set hook will validate the
140 argument, and then call
144 set to actually save the value.
145 The predefined function
147 may be specified to refuse all attempts to set a variable.
149 The unset hook is invoked when an attempt is made to unset a variable.
151 returns zero, the variable will be unset.
152 The predefined function
154 may be used to prevent a variable being unset.
156 .Sh STANDARD LIBRARY SUPPORT
160 Fn getopt "int argc" "char * const *argv" "const char *optstring"
163 Fn strtol "const char *nptr" "char **endptr" "int base"
166 Fn srandom "unsigned long seed"
172 Fn strerror "int error"
174 Returns error messages for the subset of
178 .It Fn assert expression
184 Fn setjmp "jmp_buf env"
187 Fn longjmp "jmp_buf env" "int val"
193 respectively as there is no signal state to manipulate.
203 Read characters from the console into
205 All of the standard cautions apply to this function.
208 Fn ngets "char *buf" "size_t size"
212 - 1 characters from the console into
216 is less than 1, the function's behaviour is as for
220 Fn fgets "char *buf" "int size" "int fd"
222 Read a line of at most
226 Line terminating characters are not stripped,
227 and the buffer is always nul-terminated.
228 Upon successful completion a pointer to the string is returned.
229 If end-of-file occurs before any characters are read,
230 NULL is returned and the buffer contents remain unchanged.
232 NULL is returned and the buffer contents are indeterminate.
235 Fn fgetstr "char *buf" "int size" "int fd"
237 Read a line of at most
241 Line terminating characters are stripped, and the buffer is always
243 Returns the number of characters in
245 if successful, or -1 if a read error occurs.
248 Fn printf "const char *fmt" "..."
251 Fn vprintf "const char *fmt" "va_list ap"
254 Fn sprintf "char *buf" "const char *fmt" "..."
257 Fn vsprintf "char *buf" "const char *fmt" "va_list ap"
259 The *printf functions implement a subset of the standard
261 family functionality and some extensions.
262 The following standard conversions
264 .Cm c , d , n , o , p , s , u , x .
265 The following modifiers are supported:
266 .Cm + , - , # , * , 0 , field width, precision, l .
270 conversion is provided to decode error registers.
272 .Bd -ragged -offset indent
280 where <base> is the output expressed as a control character, e.g.\& \e10 gives
281 octal, \e20 gives hex.
282 Each <arg> is a sequence of characters, the first of
283 which gives the bit number to be inspected (origin 1) and the next characters
284 (up to a character less than 32) give the text to be displayed if the bit is set.
286 .Bd -ragged -offset indent
290 .Qq \e10\e2BITTWO\e1BITONE\en
294 would give the output
295 .Bd -ragged -offset indent
301 conversion provides a hexdump facility, eg.
302 .Bd -ragged -offset indent
308 .Qq XX:XX:XX:XX:XX:XX
310 .Bd -ragged -offset indent
320 .Sh CHARACTER TESTS AND CONVERSIONS
354 Fn open "const char *path" "int flags"
356 Similar to the behaviour as specified in
358 except that file creation is not supported, so the mode parameter is not
362 argument may be one of
367 (although no filesystems currently support writing).
375 Close all open files.
378 Fn read "int fd" "void *buf" "size_t len"
381 Fn write "int fd" "void *buf" "size_t len"
383 (No filesystems currently support writing.)
386 Fn lseek "int fd" "off_t offset" "int whence"
388 Files being automatically uncompressed during reading cannot seek backwards
389 from the current point.
392 Fn stat "const char *path" "struct stat *sb"
395 Fn fstat "int fd" "struct stat *sb"
401 functions only fill out the following fields in the
404 .Fa st_mode , st_nlink , st_uid , st_gid , st_size .
407 filesystem cannot provide meaningful values for this call, and the
409 filesystem always reports files having uid/gid of zero.
413 supplies a simple internal pager to ease reading the output of large commands.
419 Initialises the pager and tells it that the next line output will be the
421 The environment variable LINES is consulted to determine the number of
422 lines to be displayed before pausing.
430 Fn pager_output "char *lines"
432 Sends the lines in the nul-terminated buffer at
435 Newline characters are counted in order to determine the number
436 of lines being output (wrapped lines are not accounted for).
438 will return zero when all of the lines have been output, or nonzero if the
439 display was paused and the user elected to quit.
442 Fn pager_file "char *fname"
444 Attempts to open and display the file
446 Returns -1 on error, 0 at
448 or 1 if the user elects to quit while reading.
456 Successive calls emit the characters in the sequence |, /, -, \e followed by a
457 backspace in order to provide reassurance to the user.
459 .Sh REQUIRED LOW-LEVEL SUPPORT
460 The following resources are consumed by
462 - stack, heap, console and devices.
464 The stack must be established before
466 functions can be invoked.
467 Stack requirements vary depending on the functions
468 and filesystems used by the consumer and the support layer functions detailed
471 The heap must be established before calling
477 Heap usage will vary depending on the number of simultaneously open files,
478 as well as client behaviour.
479 Automatic decompression will allocate more
480 than 64K of data per open file.
482 Console access is performed via the
487 functions detailed below.
489 Device access is initiated via
491 and is performed through the
496 functions in the device switch structure that
500 The consumer must provide the following support functions:
506 Return a character from the console, used by
514 Returns nonzero if a character is waiting from the console.
519 Write a character to the console, used by
526 and thus by many other functions for debugging and informational output.
529 Fn devopen "struct open_file *of" "const char *name" "char **file"
531 Open the appropriate device for the file named in
535 a pointer to the remaining body of
537 which does not refer to the device.
542 will be set to point to the
544 structure for the opened device if successful.
545 Device identifiers must
546 always precede the path component, but may otherwise be arbitrarily formatted.
549 and thus for all device-related I/O.
552 Fn devclose "struct open_file *of"
554 Close the device allocated for
556 The device driver itself will already have been called for the close;
557 this call should clean up any allocation made by
562 Fn panic "const char *msg" "..."
564 Signal a fatal and unrecoverable error condition.
570 .Sh INTERNAL FILESYSTEMS
571 Internal filesystems are enabled by the consumer exporting the array
572 .Vt struct fs_ops *file_system[] ,
573 which should be initialised with pointers
577 The following filesystem handlers are supplied by
579 the consumer may supply other filesystems of their own:
580 .Bl -hang -width ".Va cd9660_fsops"
589 Linux ext2fs filesystem.
593 File access via TFTP.
597 ISO 9660 (CD-ROM) filesystem.
599 Stacked filesystem supporting gzipped files.
600 When trying the zipfs filesystem,
604 to the end of the filename, and then tries to locate the file using the other
606 Placement of this filesystem in the
608 array determines whether gzipped files will be opened in preference to non-gzipped
610 It is only possible to seek a gzipped file forwards, and
614 on gzipped files will report an invalid length.
619 .Xr bzip2 1 Ns -compressed
625 pointers should be terminated with a NULL.
627 Devices are exported by the supporting code via the array
628 .Vt struct devsw *devsw[]
629 which is a NULL terminated array of pointers to device switch structures.
632 contains contributions from many sources, including:
647 .An Matthew Dillon Aq dillon@backplane.com
650 The reorganisation and port to
652 the environment functions and this manpage were written by
653 .An Mike Smith Aq msmith@FreeBSD.org .
655 The lack of detailed memory usage data is unhelpful.