]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/libcbor/README.md
Import libcbor at 'contrib/libcbor/'
[FreeBSD/FreeBSD.git] / contrib / libcbor / README.md
1 # [libcbor](https://github.com/PJK/libcbor)
2
3 [![Build Status](https://travis-ci.org/PJK/libcbor.svg?branch=master)](https://travis-ci.org/PJK/libcbor)
4 [![Build status](https://ci.appveyor.com/api/projects/status/8kkmvmefelsxp5u2?svg=true)](https://ci.appveyor.com/project/PJK/libcbor)
5 [![Documentation Status](https://readthedocs.org/projects/libcbor/badge/?version=latest)](https://readthedocs.org/projects/libcbor/?badge=latest)
6 [![latest packaged version(s)](https://repology.org/badge/latest-versions/libcbor.svg)](https://repology.org/project/libcbor/versions)
7 [![codecov](https://codecov.io/gh/PJK/libcbor/branch/master/graph/badge.svg)](https://codecov.io/gh/PJK/libcbor)
8
9 **libcbor** is a C library for parsing and generating [CBOR](http://tools.ietf.org/html/rfc7049), the general-purpose schema-less binary data format.
10
11 ## Main features
12  - Complete RFC conformance
13  - Robust C99 implementation
14  - Layered architecture offers both control and convenience
15  - Flexible memory management
16  - No shared global state - threading friendly
17  - Proper handling of UTF-8
18  - Full support for streams & incremental processing
19  - Extensive documentation and test suite
20  - No runtime dependencies, small footprint
21  
22 ## Getting started
23
24 ### Compile from source
25
26 ```bash
27 git clone https://github.com/PJK/libcbor
28 cmake -DCMAKE_BUILD_TYPE=Release -DCBOR_CUSTOM_ALLOC=ON libcbor
29 make
30 make install
31 ```
32
33 ### Homebrew
34
35 ```bash
36 brew install libcbor
37 ```
38
39 ### Ubuntu 18.04 and above
40
41 ```bash
42 sudo add-apt-repository universe
43 sudo apt-get install libcbor-dev
44 ```
45
46 ### Fedora & RPM friends
47
48 ```bash
49 yum install libcbor-devel
50 ```
51
52 ### Others 
53
54 <details>
55   <summary>Packaged libcbor is available from 15+ major repositories. Click here for more detail</summary>
56   
57   [![Packaging status](https://repology.org/badge/vertical-allrepos/libcbor.svg)](https://repology.org/project/libcbor/versions)
58 </details>
59
60 ## Usage example
61
62 ```c
63 #include <cbor.h>
64 #include <stdio.h>
65
66 int main(int argc, char * argv[])
67 {
68         /* Preallocate the map structure */
69         cbor_item_t * root = cbor_new_definite_map(2);
70         /* Add the content */
71         cbor_map_add(root, (struct cbor_pair) {
72                 .key = cbor_move(cbor_build_string("Is CBOR awesome?")),
73                 .value = cbor_move(cbor_build_bool(true))
74         });
75         cbor_map_add(root, (struct cbor_pair) {
76                 .key = cbor_move(cbor_build_uint8(42)),
77                 .value = cbor_move(cbor_build_string("Is the answer"))
78         });
79         /* Output: `length` bytes of data in the `buffer` */
80         unsigned char * buffer;
81         size_t buffer_size,
82                 length = cbor_serialize_alloc(root, &buffer, &buffer_size);
83
84         fwrite(buffer, 1, length, stdout);
85         free(buffer);
86
87         fflush(stdout);
88         cbor_decref(&root);
89 }
90 ```
91
92 ## Documentation
93 Get the latest documentation at [libcbor.readthedocs.org](http://libcbor.readthedocs.org/)
94
95 ## Contributions
96
97 All bug reports and contributions are welcome. Please see https://github.com/PJK/libcbor for more info.
98
99 Kudos to all the [contributors](https://github.com/PJK/libcbor/graphs/contributors)!
100
101 ## License
102 The MIT License (MIT)
103
104 Copyright (c) Pavel Kalvoda, 2014-2020
105
106 Permission is hereby granted, free of charge, to any person obtaining a copy
107 of this software and associated documentation files (the "Software"), to deal
108 in the Software without restriction, including without limitation the rights
109 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
110 copies of the Software, and to permit persons to whom the Software is
111 furnished to do so, subject to the following conditions:
112
113 The above copyright notice and this permission notice shall be included in all
114 copies or substantial portions of the Software.
115
116 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
117 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
118 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
119 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
120 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
121 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
122 SOFTWARE.