FreeBSD Manual Pages
LIBXO(3) Library Functions Manual LIBXO(3) NAME xo_open_marker, xo_open_marker_h, xo_close_marker, xo_close_marker_h -- prevent and allow closing of open constructs LIBRARY library "libxo" SYNOPSIS #include <libxo/xo.h> int xo_open_marker(const char *name); int xo_open_marker_h(xo_handle_t *handle, const char *name); int xo_close_marker(const char *name); int xo_close_marker_h(xo_handle_t *handle, const char *name); DESCRIPTION libxo represents hierarchy using two constructs: "containers" and "lists". A marker can be used to affect how open constructs are closed, either by preventing their (implicit or explicit) closure or by forcing their closure. While a marker is open, no other open con- structs can be closed. When a marker is closed, all constructs open since the marker was opened will be closed. A marker is used to "freeze" any open constructs. Calls to xo_close_*() functions that would normally close them will be ignored, effectively blocking their closure. However when xo_close_marker() is called, any containers, lists, or leaf-lists open since the matching xo_open_marker() call will be close and the marker discarded. Markers use names which are not user-visible, allowing the caller to choose appropriate internal names. The marker has no value and is not emitted in any form. To open a marker, call xo_open_marker() or xo_open_marker_h(). The former uses the default handle and the latter accepts a specific han- dle. To close a marker, use the xo_close_marker() or xo_close_marker_h() functions. Each open call must have a matching close call. In this example, the xo_close_container() call on line [1] will be ig- nored, since the open marker "outer" will prevent close of any open constructs that precede it. The xo_close_marker() call on line [2] will close the "system" container, since it was opened after the "outer" marker. Example: xo_open_container("top"); xo_open_marker("outer"); xo_open_container("system"); xo_emit("{:host-name/%s%s%s", hostname, domainname ? "." : "", domainname ?: ""); xo_close_container("top"); /* [1] */ xo_close_marker("outer"); /* [2] */ xo_close_container("top"); In this example, the code whiffles through a list of fish, calling a function to emit details about each fish. The marker "fish-guts" is used to ensure that any constructs opened by the function are closed properly. for (i = 0; fish[i]; i++) { xo_open_instance("fish"); xo_open_marker("fish-guts"); dump_fish_details(i); xo_close_marker("fish-guts"); } SEE ALSO xo_emit(3), libxo(3) ADDITIONAL DOCUMENTATION FreeBSD uses libxo version 0.6.1. Complete documentation can be found on github: http://juniper.github.io/libxo/0.6.1/libxo-manual.html libxo lives on github as: https://github.com/Juniper/libxo The latest release of libxo is available at: https://github.com/Juniper/libxo/releases HISTORY The libxo library was added in FreeBSD 11.0. AUTHOR Phil Shafer FreeBSD ports 15.0 January 22, 2015 LIBXO(3)
NAME | LIBRARY | SYNOPSIS | DESCRIPTION | SEE ALSO | ADDITIONAL DOCUMENTATION | HISTORY | AUTHOR
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=xo_open_marker&sektion=3&manpath=FreeBSD+Ports+15.0>
