libucl.3 (6cec9cad762b6476313fb1f8e931a1647822db6b) | libucl.3 (3dcf5eb70598c88befd62f61f81e283e568ec519) |
---|---|
1.TH LIBUCL 5 "March 20, 2014" "Libucl manual" | 1.TH "LIBUCL" "3" "July 26, 2014" "Libucl manual" "" |
2.SH NAME 3.PP 4\f[B]ucl_parser_new\f[], \f[B]ucl_parser_register_macro\f[], 5\f[B]ucl_parser_register_variable\f[], \f[B]ucl_parser_add_chunk\f[], 6\f[B]ucl_parser_add_string\f[], \f[B]ucl_parser_add_file\f[], 7\f[B]ucl_parser_get_object\f[], \f[B]ucl_parser_get_error\f[], 8\f[B]ucl_parser_free\f[], \f[B]ucl_pubkey_add\f[], 9\f[B]ucl_parser_set_filevars\f[] \- universal configuration library --- 17 unchanged lines hidden (view full) --- 27for instance, it is impossible to parse a part of document and therefore 28it is impossible to use \f[C]libucl\f[] as a streaming parser. 29In future, this limitation can be removed. 30.SS Emitting functions 31.PP 32Convert \f[C]ucl\f[] objects to some textual or binary representation. 33Currently, libucl supports the following exports: 34.IP \[bu] 2 | 2.SH NAME 3.PP 4\f[B]ucl_parser_new\f[], \f[B]ucl_parser_register_macro\f[], 5\f[B]ucl_parser_register_variable\f[], \f[B]ucl_parser_add_chunk\f[], 6\f[B]ucl_parser_add_string\f[], \f[B]ucl_parser_add_file\f[], 7\f[B]ucl_parser_get_object\f[], \f[B]ucl_parser_get_error\f[], 8\f[B]ucl_parser_free\f[], \f[B]ucl_pubkey_add\f[], 9\f[B]ucl_parser_set_filevars\f[] \- universal configuration library --- 17 unchanged lines hidden (view full) --- 27for instance, it is impossible to parse a part of document and therefore 28it is impossible to use \f[C]libucl\f[] as a streaming parser. 29In future, this limitation can be removed. 30.SS Emitting functions 31.PP 32Convert \f[C]ucl\f[] objects to some textual or binary representation. 33Currently, libucl supports the following exports: 34.IP \[bu] 2 |
35\f[C]JSON\f[] \- valid json format (can possibly loose some original | 35\f[C]JSON\f[] \- valid json format (can possibly lose some original |
36data, such as implicit arrays) 37.IP \[bu] 2 | 36data, such as implicit arrays) 37.IP \[bu] 2 |
38\f[C]Config\f[] \- human\-readable configuration format (losseless) | 38\f[C]Config\f[] \- human\-readable configuration format (lossless) |
39.IP \[bu] 2 40\f[C]YAML\f[] \- embedded yaml format (has the same limitations as 41\f[C]json\f[] output) 42.SS Conversion functions 43.PP 44Help to convert \f[C]ucl\f[] objects to C types. 45These functions are used to convert \f[C]ucl_object_t\f[] to C primitive 46types, such as numbers, strings or boolean values. 47.SS Generation functions 48.PP | 39.IP \[bu] 2 40\f[C]YAML\f[] \- embedded yaml format (has the same limitations as 41\f[C]json\f[] output) 42.SS Conversion functions 43.PP 44Help to convert \f[C]ucl\f[] objects to C types. 45These functions are used to convert \f[C]ucl_object_t\f[] to C primitive 46types, such as numbers, strings or boolean values. 47.SS Generation functions 48.PP |
49Allow creating of \f[C]ucl\f[] objects from C types and creating of | 49Allow creation of \f[C]ucl\f[] objects from C types and creating of |
50complex \f[C]ucl\f[] objects, such as hashes or arrays from primitive 51\f[C]ucl\f[] objects, such as numbers or strings. 52.SS Iteration functions 53.PP 54Iterate over \f[C]ucl\f[] complex objects or over a chain of values, for 55example when a key in an object has multiple values (that can be treated 56as implicit array or implicit consolidation). 57.SS Validation functions --- 112 unchanged lines hidden (view full) --- 170bool\ ucl_parser_add_file\ (struct\ ucl_parser\ *parser,\ 171\ \ \ \ const\ char\ *filename); 172\f[] 173.fi 174.PP 175Load file \f[C]filename\f[] and parse it with the specified 176\f[C]parser\f[]. 177This function uses \f[C]mmap\f[] call to load file, therefore, it should | 50complex \f[C]ucl\f[] objects, such as hashes or arrays from primitive 51\f[C]ucl\f[] objects, such as numbers or strings. 52.SS Iteration functions 53.PP 54Iterate over \f[C]ucl\f[] complex objects or over a chain of values, for 55example when a key in an object has multiple values (that can be treated 56as implicit array or implicit consolidation). 57.SS Validation functions --- 112 unchanged lines hidden (view full) --- 170bool\ ucl_parser_add_file\ (struct\ ucl_parser\ *parser,\ 171\ \ \ \ const\ char\ *filename); 172\f[] 173.fi 174.PP 175Load file \f[C]filename\f[] and parse it with the specified 176\f[C]parser\f[]. 177This function uses \f[C]mmap\f[] call to load file, therefore, it should |
178not be \f[C]shrinked\f[] during parsing. | 178not be \f[C]shrunk\f[] during parsing. |
179Otherwise, \f[C]libucl\f[] can cause memory corruption and terminate the 180calling application. 181This function is also used by the internal handler of \f[C]include\f[] 182macro, hence, this macro has the same limitation. 183.SS ucl_parser_get_object 184.IP 185.nf 186\f[C] --- 98 unchanged lines hidden (view full) --- 285parser\ =\ ucl_parser_new\ (0); 286while\ (!feof\ (in)\ &&\ r\ <\ (int)sizeof\ (inbuf))\ { 287\ \ \ \ r\ +=\ fread\ (inbuf\ +\ r,\ 1,\ sizeof\ (inbuf)\ \-\ r,\ in); 288} 289ucl_parser_add_chunk\ (parser,\ inbuf,\ r); 290fclose\ (in); 291 292if\ (ucl_parser_get_error\ (parser))\ { | 179Otherwise, \f[C]libucl\f[] can cause memory corruption and terminate the 180calling application. 181This function is also used by the internal handler of \f[C]include\f[] 182macro, hence, this macro has the same limitation. 183.SS ucl_parser_get_object 184.IP 185.nf 186\f[C] --- 98 unchanged lines hidden (view full) --- 285parser\ =\ ucl_parser_new\ (0); 286while\ (!feof\ (in)\ &&\ r\ <\ (int)sizeof\ (inbuf))\ { 287\ \ \ \ r\ +=\ fread\ (inbuf\ +\ r,\ 1,\ sizeof\ (inbuf)\ \-\ r,\ in); 288} 289ucl_parser_add_chunk\ (parser,\ inbuf,\ r); 290fclose\ (in); 291 292if\ (ucl_parser_get_error\ (parser))\ { |
293\ \ \ \ printf\ ("Error\ occured:\ %s\\n",\ ucl_parser_get_error\ (parser)); | 293\ \ \ \ printf\ ("Error\ occurred:\ %s\\n",\ ucl_parser_get_error\ (parser)); |
294\ \ \ \ ret\ =\ 1; 295} 296else\ { 297\ \ \ \ obj\ =\ ucl_parser_get_object\ (parser); 298} 299 300if\ (parser\ !=\ NULL)\ { 301\ \ \ \ ucl_parser_free\ (parser); --- 16 unchanged lines hidden (view full) --- 318without spaces 319.IP \[bu] 2 320formatted json: \f[C]UCL_EMIT_JSON\f[] \- pretty formatted JSON with 321newlines and spaces 322.IP \[bu] 2 323compact yaml: \f[C]UCL_EMIT_YAML\f[] \- compact YAML output 324.PP 325Moreover, libucl API allows to select a custom set of emitting functions | 294\ \ \ \ ret\ =\ 1; 295} 296else\ { 297\ \ \ \ obj\ =\ ucl_parser_get_object\ (parser); 298} 299 300if\ (parser\ !=\ NULL)\ { 301\ \ \ \ ucl_parser_free\ (parser); --- 16 unchanged lines hidden (view full) --- 318without spaces 319.IP \[bu] 2 320formatted json: \f[C]UCL_EMIT_JSON\f[] \- pretty formatted JSON with 321newlines and spaces 322.IP \[bu] 2 323compact yaml: \f[C]UCL_EMIT_YAML\f[] \- compact YAML output 324.PP 325Moreover, libucl API allows to select a custom set of emitting functions |
326allowing efficent and zero\-copy output of libucl objects. | 326allowing efficient and zero\-copy output of libucl objects. |
327Libucl uses the following structure to support this feature: 328.IP 329.nf 330\f[C] 331struct\ ucl_emitter_functions\ { 332\ \ \ \ /**\ Append\ a\ single\ character\ */ 333\ \ \ \ int\ (*ucl_emitter_append_character)\ (unsigned\ char\ c,\ size_t\ nchars,\ void\ *ud); 334\ \ \ \ /**\ Append\ a\ string\ of\ a\ specified\ length\ */ --- 50 unchanged lines hidden (view full) --- 385This function is similar to the previous with the exception that it 386accepts the additional argument \f[C]emitter\f[] that defines the 387concrete set of output functions. 388This emit function could be useful for custom structures or streams 389emitters (including C++ ones, for example). 390.SH CONVERSION FUNCTIONS 391.PP 392Conversion functions are used to convert UCL objects to primitive types, | 327Libucl uses the following structure to support this feature: 328.IP 329.nf 330\f[C] 331struct\ ucl_emitter_functions\ { 332\ \ \ \ /**\ Append\ a\ single\ character\ */ 333\ \ \ \ int\ (*ucl_emitter_append_character)\ (unsigned\ char\ c,\ size_t\ nchars,\ void\ *ud); 334\ \ \ \ /**\ Append\ a\ string\ of\ a\ specified\ length\ */ --- 50 unchanged lines hidden (view full) --- 385This function is similar to the previous with the exception that it 386accepts the additional argument \f[C]emitter\f[] that defines the 387concrete set of output functions. 388This emit function could be useful for custom structures or streams 389emitters (including C++ ones, for example). 390.SH CONVERSION FUNCTIONS 391.PP 392Conversion functions are used to convert UCL objects to primitive types, |
393such as strings, numbers or boolean values. | 393such as strings, numbers, or boolean values. |
394There are two types of conversion functions: 395.IP \[bu] 2 396safe: try to convert an ucl object to a primitive type and fail if such 397a conversion is not possible 398.IP \[bu] 2 399unsafe: return primitive type without additional checks, if the object 400cannot be converted then some reasonable default is returned (NULL for 401strings and 0 for numbers) 402.PP 403Also there is a single \f[C]ucl_object_tostring_forced\f[] function that 404converts any UCL object (including compound types \- arrays and objects) 405to a string representation. | 394There are two types of conversion functions: 395.IP \[bu] 2 396safe: try to convert an ucl object to a primitive type and fail if such 397a conversion is not possible 398.IP \[bu] 2 399unsafe: return primitive type without additional checks, if the object 400cannot be converted then some reasonable default is returned (NULL for 401strings and 0 for numbers) 402.PP 403Also there is a single \f[C]ucl_object_tostring_forced\f[] function that 404converts any UCL object (including compound types \- arrays and objects) 405to a string representation. |
406For compound and numeric types this function performs emitting to a 407compact json format actually. | 406For objects, arrays, booleans and numeric types this function performs 407emitting to a compact json format actually. |
408.PP 409Here is a list of all conversion functions: 410.IP \[bu] 2 411\f[C]ucl_object_toint\f[] \- returns \f[C]int64_t\f[] of UCL object 412.IP \[bu] 2 413\f[C]ucl_object_todouble\f[] \- returns \f[C]double\f[] of UCL object 414.IP \[bu] 2 415\f[C]ucl_object_toboolean\f[] \- returns \f[C]bool\f[] of UCL object 416.IP \[bu] 2 417\f[C]ucl_object_tostring\f[] \- returns \f[C]const\ char\ *\f[] of UCL 418object (this string is NULL terminated) 419.IP \[bu] 2 420\f[C]ucl_object_tolstring\f[] \- returns \f[C]const\ char\ *\f[] and | 408.PP 409Here is a list of all conversion functions: 410.IP \[bu] 2 411\f[C]ucl_object_toint\f[] \- returns \f[C]int64_t\f[] of UCL object 412.IP \[bu] 2 413\f[C]ucl_object_todouble\f[] \- returns \f[C]double\f[] of UCL object 414.IP \[bu] 2 415\f[C]ucl_object_toboolean\f[] \- returns \f[C]bool\f[] of UCL object 416.IP \[bu] 2 417\f[C]ucl_object_tostring\f[] \- returns \f[C]const\ char\ *\f[] of UCL 418object (this string is NULL terminated) 419.IP \[bu] 2 420\f[C]ucl_object_tolstring\f[] \- returns \f[C]const\ char\ *\f[] and |
421\f[C]size_t\f[] len of UCL object (string can be not NULL terminated) | 421\f[C]size_t\f[] len of UCL object (string does not need to be NULL 422terminated) |
422.IP \[bu] 2 423\f[C]ucl_object_tostring_forced\f[] \- returns string representation of 424any UCL object 425.PP 426Strings returned by these pointers are associated with the UCL object 427and exist over its lifetime. 428A caller should not free this memory. 429.SH GENERATION FUNCTIONS 430.PP 431It is possible to generate UCL objects from C primitive types. | 423.IP \[bu] 2 424\f[C]ucl_object_tostring_forced\f[] \- returns string representation of 425any UCL object 426.PP 427Strings returned by these pointers are associated with the UCL object 428and exist over its lifetime. 429A caller should not free this memory. 430.SH GENERATION FUNCTIONS 431.PP 432It is possible to generate UCL objects from C primitive types. |
432Moreover, libucl permits to create and modify complex UCL objects, such | 433Moreover, libucl allows creation and modifying complex UCL objects, such |
433as arrays or associative objects. 434.SS ucl_object_new 435.IP 436.nf 437\f[C] 438ucl_object_t\ *\ ucl_object_new\ (void) 439\f[] 440.fi --- 21 unchanged lines hidden (view full) --- 462.SS Primitive objects generation 463.PP 464Libucl provides the functions similar to inverse conversion functions 465called with the specific C type: \- \f[C]ucl_object_fromint\f[] \- 466converts \f[C]int64_t\f[] to UCL object \- 467\f[C]ucl_object_fromdouble\f[] \- converts \f[C]double\f[] to UCL object 468\- \f[C]ucl_object_fromboolean\f[] \- converts \f[C]bool\f[] to UCL 469object \- \f[C]ucl_object_fromstring\f[] \- converts | 434as arrays or associative objects. 435.SS ucl_object_new 436.IP 437.nf 438\f[C] 439ucl_object_t\ *\ ucl_object_new\ (void) 440\f[] 441.fi --- 21 unchanged lines hidden (view full) --- 463.SS Primitive objects generation 464.PP 465Libucl provides the functions similar to inverse conversion functions 466called with the specific C type: \- \f[C]ucl_object_fromint\f[] \- 467converts \f[C]int64_t\f[] to UCL object \- 468\f[C]ucl_object_fromdouble\f[] \- converts \f[C]double\f[] to UCL object 469\- \f[C]ucl_object_fromboolean\f[] \- converts \f[C]bool\f[] to UCL 470object \- \f[C]ucl_object_fromstring\f[] \- converts |
470\f[C]const\ char\ *\f[] to UCL object (this string is NULL terminated) 471\- \f[C]ucl_object_fromlstring\f[] \- converts \f[C]const\ char\ *\f[] 472and \f[C]size_t\f[] len to UCL object (string can be not NULL 473terminated) | 471\f[C]const\ char\ *\f[] to UCL object (this string should be NULL 472terminated) \- \f[C]ucl_object_fromlstring\f[] \- converts 473\f[C]const\ char\ *\f[] and \f[C]size_t\f[] len to UCL object (string 474does not need to be NULL terminated) |
474.PP 475Also there is a function to generate UCL object from a string performing 476various parsing or conversion operations called 477\f[C]ucl_object_fromstring_common\f[]. 478.SS ucl_object_fromstring_common 479.IP 480.nf 481\f[C] 482ucl_object_t\ *\ ucl_object_fromstring_common\ (const\ char\ *str,\ 483\ \ \ \ size_t\ len,\ enum\ ucl_string_flags\ flags) 484\f[] 485.fi 486.PP 487This function is used to convert a string \f[C]str\f[] of size | 475.PP 476Also there is a function to generate UCL object from a string performing 477various parsing or conversion operations called 478\f[C]ucl_object_fromstring_common\f[]. 479.SS ucl_object_fromstring_common 480.IP 481.nf 482\f[C] 483ucl_object_t\ *\ ucl_object_fromstring_common\ (const\ char\ *str,\ 484\ \ \ \ size_t\ len,\ enum\ ucl_string_flags\ flags) 485\f[] 486.fi 487.PP 488This function is used to convert a string \f[C]str\f[] of size |
488\f[C]len\f[] to an UCL objects applying \f[C]flags\f[] conversions. | 489\f[C]len\f[] to a UCL object applying \f[C]flags\f[] conversions. |
489If \f[C]len\f[] is equal to zero then a \f[C]str\f[] is assumed as 490NULL\-terminated. 491This function supports the following flags (a set of flags can be 492specified using logical \f[C]OR\f[] operation): 493.IP \[bu] 2 494\f[C]UCL_STRING_ESCAPE\f[] \- perform JSON escape 495.IP \[bu] 2 496\f[C]UCL_STRING_TRIM\f[] \- trim leading and trailing whitespaces --- 36 unchanged lines hidden (view full) --- 533.IP 534.nf 535\f[C] 536const\ ucl_object_t*\ ucl_iterate_object\ (const\ ucl_object_t\ *obj,\ 537\ \ \ \ ucl_object_iter_t\ *iter,\ bool\ expand_values); 538\f[] 539.fi 540.PP | 490If \f[C]len\f[] is equal to zero then a \f[C]str\f[] is assumed as 491NULL\-terminated. 492This function supports the following flags (a set of flags can be 493specified using logical \f[C]OR\f[] operation): 494.IP \[bu] 2 495\f[C]UCL_STRING_ESCAPE\f[] \- perform JSON escape 496.IP \[bu] 2 497\f[C]UCL_STRING_TRIM\f[] \- trim leading and trailing whitespaces --- 36 unchanged lines hidden (view full) --- 534.IP 535.nf 536\f[C] 537const\ ucl_object_t*\ ucl_iterate_object\ (const\ ucl_object_t\ *obj,\ 538\ \ \ \ ucl_object_iter_t\ *iter,\ bool\ expand_values); 539\f[] 540.fi 541.PP |
541This function accept opaque iterator pointer \f[C]iter\f[]. | 542This function accepts opaque iterator pointer \f[C]iter\f[]. |
542In the first call this iterator \f[I]must\f[] be initialized to 543\f[C]NULL\f[]. 544Iterator is changed by this function call. 545\f[C]ucl_iterate_object\f[] returns the next UCL object in the compound 546object \f[C]obj\f[] or \f[C]NULL\f[] if all objects have been iterated. 547The reference count of the object returned is not increased, so a caller 548should not unref the object or modify its content (e.g. 549by inserting to another compound object). 550The object \f[C]obj\f[] should not be changed during the iteration 551process as well. 552\f[C]expand_values\f[] flag speicifies whether 553\f[C]ucl_iterate_object\f[] should expand keys with multiple values. | 543In the first call this iterator \f[I]must\f[] be initialized to 544\f[C]NULL\f[]. 545Iterator is changed by this function call. 546\f[C]ucl_iterate_object\f[] returns the next UCL object in the compound 547object \f[C]obj\f[] or \f[C]NULL\f[] if all objects have been iterated. 548The reference count of the object returned is not increased, so a caller 549should not unref the object or modify its content (e.g. 550by inserting to another compound object). 551The object \f[C]obj\f[] should not be changed during the iteration 552process as well. 553\f[C]expand_values\f[] flag speicifies whether 554\f[C]ucl_iterate_object\f[] should expand keys with multiple values. |
554The general rule is that if you need to iterate throught the | 555The general rule is that if you need to iterate through the |
555\f[I]object\f[] or \f[I]explicit array\f[], then you always need to set 556this flag to \f[C]true\f[]. 557However, if you get some key in the object and want to extract all its 558values then you should set \f[C]expand_values\f[] to \f[C]false\f[]. | 556\f[I]object\f[] or \f[I]explicit array\f[], then you always need to set 557this flag to \f[C]true\f[]. 558However, if you get some key in the object and want to extract all its 559values then you should set \f[C]expand_values\f[] to \f[C]false\f[]. |
559Mixing of iteration types are not permitted since the iterator is set | 560Mixing of iteration types is not permitted since the iterator is set |
560according to the iteration type and cannot be reused. 561Here is an example of iteration over the objects using libucl API 562(assuming that \f[C]top\f[] is \f[C]UCL_OBJECT\f[] in this example): 563.IP 564.nf 565\f[C] 566ucl_object_iter_t\ it\ =\ NULL,\ it_obj\ =\ NULL; 567const\ ucl_object_t\ *cur,\ *tmp; --- 26 unchanged lines hidden (view full) --- 594.PP 595This function uses ucl object \f[C]schema\f[], that must be valid in 596terms of \f[C]json\-schema\f[] draft v4, to validate input object 597\f[C]obj\f[]. 598If this function returns \f[C]true\f[] then validation procedure has 599been succeed. 600Otherwise, \f[C]false\f[] is returned and \f[C]err\f[] is set to a 601specific value. | 561according to the iteration type and cannot be reused. 562Here is an example of iteration over the objects using libucl API 563(assuming that \f[C]top\f[] is \f[C]UCL_OBJECT\f[] in this example): 564.IP 565.nf 566\f[C] 567ucl_object_iter_t\ it\ =\ NULL,\ it_obj\ =\ NULL; 568const\ ucl_object_t\ *cur,\ *tmp; --- 26 unchanged lines hidden (view full) --- 595.PP 596This function uses ucl object \f[C]schema\f[], that must be valid in 597terms of \f[C]json\-schema\f[] draft v4, to validate input object 598\f[C]obj\f[]. 599If this function returns \f[C]true\f[] then validation procedure has 600been succeed. 601Otherwise, \f[C]false\f[] is returned and \f[C]err\f[] is set to a 602specific value. |
602If caller set \f[C]err\f[] to NULL then this function does not set any 603error just returning \f[C]false\f[]. | 603If a caller sets \f[C]err\f[] to NULL then this function does not set 604any error just returning \f[C]false\f[]. |
604Error is the structure defined as following: 605.IP 606.nf 607\f[C] 608struct\ ucl_schema_error\ { 609\ \ \ \ enum\ ucl_schema_error_code\ code;\ \ \ \ /*\ error\ code\ */ 610\ \ \ \ char\ msg[128];\ \ \ \ \ \ \ \ \ \ \ \ \ \ /*\ error\ message\ */ | 605Error is the structure defined as following: 606.IP 607.nf 608\f[C] 609struct\ ucl_schema_error\ { 610\ \ \ \ enum\ ucl_schema_error_code\ code;\ \ \ \ /*\ error\ code\ */ 611\ \ \ \ char\ msg[128];\ \ \ \ \ \ \ \ \ \ \ \ \ \ /*\ error\ message\ */ |
611\ \ \ \ ucl_object_t\ *obj;\ \ \ \ \ \ \ \ \ \ /*\ object\ where\ error\ occured\ */ | 612\ \ \ \ ucl_object_t\ *obj;\ \ \ \ \ \ \ \ \ \ /*\ object\ where\ error\ occurred\ */ |
612}; 613\f[] 614.fi 615.PP 616Caller may use \f[C]code\f[] field to get a numeric error code: 617.IP 618.nf 619\f[C] --- 4 unchanged lines hidden (view full) --- 624\ \ \ \ UCL_SCHEMA_MISSING_PROPERTY,/*\ missing\ properties\ */ 625\ \ \ \ UCL_SCHEMA_CONSTRAINT,\ \ \ \ \ \ /*\ constraint\ found\ */ 626\ \ \ \ UCL_SCHEMA_MISSING_DEPENDENCY,\ /*\ missing\ dependency\ */ 627\ \ \ \ UCL_SCHEMA_UNKNOWN\ \ \ \ \ \ \ \ \ \ /*\ generic\ error\ */ 628}; 629\f[] 630.fi 631.PP | 613}; 614\f[] 615.fi 616.PP 617Caller may use \f[C]code\f[] field to get a numeric error code: 618.IP 619.nf 620\f[C] --- 4 unchanged lines hidden (view full) --- 625\ \ \ \ UCL_SCHEMA_MISSING_PROPERTY,/*\ missing\ properties\ */ 626\ \ \ \ UCL_SCHEMA_CONSTRAINT,\ \ \ \ \ \ /*\ constraint\ found\ */ 627\ \ \ \ UCL_SCHEMA_MISSING_DEPENDENCY,\ /*\ missing\ dependency\ */ 628\ \ \ \ UCL_SCHEMA_UNKNOWN\ \ \ \ \ \ \ \ \ \ /*\ generic\ error\ */ 629}; 630\f[] 631.fi 632.PP |
632\f[C]msg\f[] is a stiring description of an error and \f[C]obj\f[] is an 633object where error has been occurred. | 633\f[C]msg\f[] is a string description of an error and \f[C]obj\f[] is an 634object where error has occurred. |
634Error object is not allocated by libucl, so there is no need to free it 635after validation (a static object should thus be used). 636.SH AUTHORS 637Vsevolod Stakhov <vsevolod@highsecure.ru>. | 635Error object is not allocated by libucl, so there is no need to free it 636after validation (a static object should thus be used). 637.SH AUTHORS 638Vsevolod Stakhov <vsevolod@highsecure.ru>. |