diff options
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/api.md | 17 | ||||
| -rw-r--r-- | doc/libucl.3 | 26 | ||||
| -rw-r--r-- | doc/lua_api.md | 4 |
3 files changed, 38 insertions, 9 deletions
diff --git a/doc/api.md b/doc/api.md index 75b954bb302c..a0d33c0e68a9 100644 --- a/doc/api.md +++ b/doc/api.md @@ -243,7 +243,7 @@ return ret; # Emitting functions -Libucl can transform UCL objects to a number of tectual formats: +Libucl can transform UCL objects to a number of textual formats: - configuration (`UCL_EMIT_CONFIG`) - nginx like human readable configuration file where implicit arrays are transformed to the duplicate keys - compact json: `UCL_EMIT_JSON_COMPACT` - single line valid json without spaces @@ -349,7 +349,7 @@ This object should be released by caller. Libucl provides the functions similar to inverse conversion functions called with the specific C type: - `ucl_object_fromint` - converts `int64_t` to UCL object - `ucl_object_fromdouble` - converts `double` to UCL object -- `ucl_object_fromboolean` - converts `bool` to UCL object +- `ucl_object_frombool` - converts `bool` to UCL object - `ucl_object_fromstring` - converts `const char *` to UCL object (this string should be NULL terminated) - `ucl_object_fromlstring` - converts `const char *` and `size_t` len to UCL object (string does not need to be NULL terminated) @@ -432,7 +432,8 @@ UCL defines the following functions to manage safe iterators: - `ucl_object_iterate_new` - creates new safe iterator - `ucl_object_iterate_reset` - resets iterator to a new object -- `ucl_object_iterate_safe` - safely iterate the object inside iterator +- `ucl_object_iterate_safe` - safely iterate the object inside iterator. Note: function may allocate and free memory during its operation. Therefore it returns `NULL` either while trying to access item after the last one or when exception (such as memory allocation failure) happens. +- `ucl_object_iter_chk_excpn` - check if the last call to `ucl_object_iterate_safe` ended up in unrecoverable exception (e.g. `ENOMEM`). - `ucl_object_iterate_free` - free memory associated with the safe iterator Please note that unlike unsafe iterators, safe iterators *must* be explicitly initialized and freed. @@ -447,6 +448,11 @@ it = ucl_object_iterate_new (obj); while ((cur = ucl_object_iterate_safe (it, true)) != NULL) { /* Do something */ } +/* Check error condition */ +if (ucl_object_iter_chk_excpn (it)) { + ucl_object_iterate_free (it); + exit (1); +} /* Switch to another object */ it = ucl_object_iterate_reset (it, another_obj); @@ -454,6 +460,11 @@ it = ucl_object_iterate_reset (it, another_obj); while ((cur = ucl_object_iterate_safe (it, true)) != NULL) { /* Do something else */ } +/* Check error condition */ +if (ucl_object_iter_chk_excpn (it)) { + ucl_object_iterate_free (it); + exit (1); +} ucl_object_iterate_free (it); ~~~ diff --git a/doc/libucl.3 b/doc/libucl.3 index ec5046325700..b5fef09f7691 100644 --- a/doc/libucl.3 +++ b/doc/libucl.3 @@ -612,15 +612,23 @@ Iteration\ without\ expansion: .PP UCL defines the following functions to manage safe iterators: .IP \[bu] 2 -\f[C]ucl_object_iterate_new\f[] \- creates new safe iterator +\f[C]ucl_object_iterate_new\f[] \- creates new safe iterator. .IP \[bu] 2 -\f[C]ucl_object_iterate_reset\f[] \- resets iterator to a new object +\f[C]ucl_object_iterate_reset\f[] \- resets iterator to a new object. .IP \[bu] 2 \f[C]ucl_object_iterate_safe\f[] \- safely iterate the object inside -iterator +iterator. +Note: function may allocate and free memory during its operation. +Therefore it returns \f[C]NULL\f[] either while trying to access item +after the last one or when exception (such as memory allocation +failure) happens. +.IP \[bu] 2 +\f[C]ucl_object_iter_chk_excpn\f[] \- check if the last call to +\f[C]ucl_object_iterate_safe\f[] ended up in unrecoverable exception +(e.g. \f[C]ENOMEM\f[]). .IP \[bu] 2 \f[C]ucl_object_iterate_free\f[] \- free memory associated with the safe -iterator +iterator. .PP Please note that unlike unsafe iterators, safe iterators \f[I]must\f[] be explicitly initialized and freed. @@ -637,6 +645,11 @@ it\ =\ ucl_object_iterate_new\ (obj); while\ ((cur\ =\ ucl_object_iterate_safe\ (it,\ true))\ !=\ NULL)\ { \ \ \ \ /*\ Do\ something\ */ } +/*\ Check\ error\ condition\ */ +if\ (ucl_object_iter_chk_excpn\ (it))\ { +\ \ \ \ ucl_object_iterate_free\ (it); +\ \ \ \ exit\ (1); +} /*\ Switch\ to\ another\ object\ */ it\ =\ ucl_object_iterate_reset\ (it,\ another_obj); @@ -644,6 +657,11 @@ it\ =\ ucl_object_iterate_reset\ (it,\ another_obj); while\ ((cur\ =\ ucl_object_iterate_safe\ (it,\ true))\ !=\ NULL)\ { \ \ \ \ /*\ Do\ something\ else\ */ } +/*\ Check\ error\ condition\ */ +if\ (ucl_object_iter_chk_excpn\ (it))\ { +\ \ \ \ ucl_object_iterate_free\ (it); +\ \ \ \ exit\ (1); +} ucl_object_iterate_free\ (it); \f[] diff --git a/doc/lua_api.md b/doc/lua_api.md index f7af3caffff4..7da414903b01 100644 --- a/doc/lua_api.md +++ b/doc/lua_api.md @@ -69,8 +69,8 @@ converts `obj` to lua representation using the following conversions: - *scalar* values are directly presented by lua objects - *userdata* values are converted to lua function objects using `LUA_REGISTRYINDEX`, this can be used to pass functions from lua to c and vice-versa -- *arrays* are converted to lua tables with numeric indicies suitable for `ipairs` iterations -- *objects* are converted to lua tables with string indicies +- *arrays* are converted to lua tables with numeric indices suitable for `ipairs` iterations +- *objects* are converted to lua tables with string indices **Parameters:** |
