Import libxo-1.0.4:

- Avoid NULL deref in xo_xml_leader_len (replacing local fix in rS345967)
- update copyright dates
- update test cases
- fix uncommitted version change

Submitted by:	phil
MFC after:	2 weeks
This commit is contained in:
Phil Shafer 2019-05-06 20:20:21 +00:00
commit 5e203a9ddb
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=347207
28 changed files with 109 additions and 78 deletions

View file

@ -12,7 +12,7 @@
#
AC_PREREQ(2.2)
AC_INIT([libxo], [1.0.2], [phil@juniper.net])
AC_INIT([libxo], [1.0.4], [phil@juniper.net])
AM_INIT_AUTOMAKE([-Wall -Werror foreign -Wno-portability])
# Support silent build rules. Requires at least automake-1.11.

View file

@ -22011,7 +22011,7 @@ jQuery(function ($) {
</tr>
<tr>
<td class="header left"></td>
<td class="header right">April 2, 2019</td>
<td class="header right">April 24, 2019</td>
</tr>
</table></div>
<p id="title" class="title">libxo: The Easy Way to Generate text, XML, JSON, and HTML output<br><span class="filename">libxo-manual</span></p>

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2014-2018, Juniper Networks, Inc.
* Copyright (c) 2014-2019, Juniper Networks, Inc.
* All rights reserved.
* This SOFTWARE is licensed under the LICENSE provided in the
* ../Copyright file. By downloading, installing, copying, or otherwise

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, Juniper Networks, Inc.
* Copyright (c) 2019, Juniper Networks, Inc.
* All rights reserved.
* This SOFTWARE is licensed under the LICENSE provided in the
* ../Copyright file. By downloading, installing, copying, or otherwise

View file

@ -0,0 +1 @@
test_02.test: key field emitted after normal value field: 'name'

View file

@ -1,6 +1,10 @@
op create: [] [] [0]
op open_container: [top] [] [0x40010]
op open_container: [data] [] [0x40010]
op string: [name] [em0] [0x1080]
op string: [flags] [0x8843] [0x18]
op string: [name] [em0] [0x1088]
op string: [flags] [0x8843] [0x18]
op string: [what] [braces] [0]
op string: [length] [abcdef] [0]
op content: [fd] [-1] [0]

View file

@ -0,0 +1 @@
test_02.test: key field emitted after normal value field: 'name'

View file

@ -1,4 +1,4 @@
<div class="line"><div class="text">We are </div><div class="text">{emit}</div><div class="text">{ting}</div><div class="text"> some </div><div class="data" data-tag="what">braces</div></div><div class="line"><div class="message">abcdef
<div class="line"><div class="data" data-tag="name">em0 </div><div class="data">em0 </div><div class="text">We are </div><div class="text">{emit}</div><div class="text">{ting}</div><div class="text"> some </div><div class="data" data-tag="what">braces</div></div><div class="line"><div class="message">abcdef
</div></div><div class="line"><div class="message">abcdef: Bad file descriptor
</div></div><div class="line"><div class="message">improper use of profanity; ten yard penalty; first down
</div></div><div class="line"><div class="text">length </div><div class="data" data-tag="length">abcdef</div></div><div class="line"><div class="text">close </div><div class="data" data-tag="fd">-1</div><div class="text"> returned </div><div class="data" data-tag="error">Bad file descriptor</div><div class="text"> </div><div class="data" data-tag="test">good</div></div><div class="line"><div class="text">close </div><div class="data" data-tag="fd">-1</div><div class="text"> returned </div><div class="data" data-tag="error">Bad fi</div><div class="text"> </div><div class="data" data-tag="test">good</div></div><div class="line"><div class="message">improper use of profanity; ten yard penalty; first down

View file

@ -0,0 +1 @@
test_02.test: key field emitted after normal value field: 'name'

View file

@ -1,9 +1,11 @@
<div class="line">
<div class="data" data-tag="name" data-xpath="/top/data/name">em0 </div>
<div class="data">em0 </div>
<div class="text">We are </div>
<div class="text">{emit}</div>
<div class="text">{ting}</div>
<div class="text"> some </div>
<div class="data" data-tag="what" data-xpath="/top/data/what">braces</div>
<div class="data" data-tag="what" data-xpath="/top/data[name = 'em0 '][name = 'em0']/what">braces</div>
</div>
<div class="line">
<div class="message">abcdef
@ -19,23 +21,23 @@
</div>
<div class="line">
<div class="text">length </div>
<div class="data" data-tag="length" data-xpath="/top/data/length">abcdef</div>
<div class="data" data-tag="length" data-xpath="/top/data[name = 'em0 '][name = 'em0']/length">abcdef</div>
</div>
<div class="line">
<div class="text">close </div>
<div class="data" data-tag="fd" data-xpath="/top/data/fd">-1</div>
<div class="data" data-tag="fd" data-xpath="/top/data[name = 'em0 '][name = 'em0']/fd">-1</div>
<div class="text"> returned </div>
<div class="data" data-tag="error" data-xpath="/top/data/error">Bad file descriptor</div>
<div class="data" data-tag="error" data-xpath="/top/data[name = 'em0 '][name = 'em0']/error">Bad file descriptor</div>
<div class="text"> </div>
<div class="data" data-tag="test" data-xpath="/top/data/test">good</div>
<div class="data" data-tag="test" data-xpath="/top/data[name = 'em0 '][name = 'em0']/test">good</div>
</div>
<div class="line">
<div class="text">close </div>
<div class="data" data-tag="fd" data-xpath="/top/data/fd">-1</div>
<div class="data" data-tag="fd" data-xpath="/top/data[name = 'em0 '][name = 'em0']/fd">-1</div>
<div class="text"> returned </div>
<div class="data" data-tag="error" data-xpath="/top/data/error">Bad fi</div>
<div class="data" data-tag="error" data-xpath="/top/data[name = 'em0 '][name = 'em0']/error">Bad fi</div>
<div class="text"> </div>
<div class="data" data-tag="test" data-xpath="/top/data/test">good</div>
<div class="data" data-tag="test" data-xpath="/top/data[name = 'em0 '][name = 'em0']/test">good</div>
</div>
<div class="line">
<div class="message">improper use of profanity; ten yard penalty; first down
@ -43,155 +45,155 @@
</div>
<div class="line">
<div class="text"> </div>
<div class="data" data-tag="lines" data-xpath="/top/data/lines"> 20</div>
<div class="data" data-tag="lines" data-xpath="/top/data[name = 'em0 '][name = 'em0']/lines"> 20</div>
<div class="text"> </div>
<div class="data" data-tag="words" data-xpath="/top/data/words"> 30</div>
<div class="data" data-tag="words" data-xpath="/top/data[name = 'em0 '][name = 'em0']/words"> 30</div>
<div class="text"> </div>
<div class="data" data-tag="characters" data-xpath="/top/data/characters"> 40</div>
<div class="data" data-tag="characters" data-xpath="/top/data[name = 'em0 '][name = 'em0']/characters"> 40</div>
<div class="text"> </div>
<div class="data" data-tag="filename" data-xpath="/top/data/filename">file</div>
<div class="data" data-tag="filename" data-xpath="/top/data[name = 'em0 '][name = 'em0']/filename">file</div>
</div>
<div class="line">
<div class="data" data-tag="bytes" data-xpath="/top/data/bytes">0</div>
<div class="data" data-tag="bytes" data-xpath="/top/data[name = 'em0 '][name = 'em0']/bytes">0</div>
<div class="padding"> </div>
<div class="note">bytes</div>
</div>
<div class="line">
<div class="data" data-tag="bytes" data-xpath="/top/data/bytes">1</div>
<div class="data" data-tag="bytes" data-xpath="/top/data[name = 'em0 '][name = 'em0']/bytes">1</div>
<div class="padding"> </div>
<div class="note">byte</div>
</div>
<div class="line">
<div class="data" data-tag="bytes" data-xpath="/top/data/bytes">2</div>
<div class="data" data-tag="bytes" data-xpath="/top/data[name = 'em0 '][name = 'em0']/bytes">2</div>
<div class="padding"> </div>
<div class="note">bytes</div>
</div>
<div class="line">
<div class="data" data-tag="bytes" data-xpath="/top/data/bytes">3</div>
<div class="data" data-tag="bytes" data-xpath="/top/data[name = 'em0 '][name = 'em0']/bytes">3</div>
<div class="padding"> </div>
<div class="note">bytes</div>
</div>
<div class="line">
<div class="data" data-tag="bytes" data-xpath="/top/data/bytes">4</div>
<div class="data" data-tag="bytes" data-xpath="/top/data[name = 'em0 '][name = 'em0']/bytes">4</div>
<div class="padding"> </div>
<div class="note">bytes</div>
</div>
<div class="line">
<div class="data" data-tag="mbuf-current" data-xpath="/top/data/mbuf-current">10</div>
<div class="data" data-tag="mbuf-current" data-xpath="/top/data[name = 'em0 '][name = 'em0']/mbuf-current">10</div>
<div class="text">/</div>
<div class="data" data-tag="mbuf-cache" data-xpath="/top/data/mbuf-cache">20</div>
<div class="data" data-tag="mbuf-cache" data-xpath="/top/data[name = 'em0 '][name = 'em0']/mbuf-cache">20</div>
<div class="text">/</div>
<div class="data" data-tag="mbuf-total" data-xpath="/top/data/mbuf-total">30</div>
<div class="data" data-tag="mbuf-total" data-xpath="/top/data[name = 'em0 '][name = 'em0']/mbuf-total">30</div>
<div class="text"> </div>
<div class="note">mbufs &lt;&amp;&gt; in use (current/cache/total)</div>
</div>
<div class="line">
<div class="data" data-tag="distance" data-units="miles" data-xpath="/top/data/distance">50</div>
<div class="data" data-tag="distance" data-units="miles" data-xpath="/top/data[name = 'em0 '][name = 'em0']/distance">50</div>
<div class="padding"> </div>
<div class="text"> from </div>
<div class="data" data-tag="location" data-xpath="/top/data/location">Boston</div>
<div class="data" data-tag="location" data-xpath="/top/data[name = 'em0 '][name = 'em0']/location">Boston</div>
</div>
<div class="line">
<div class="data" data-tag="memory" data-units="k" data-xpath="/top/data/memory">64</div>
<div class="data" data-tag="memory" data-units="k" data-xpath="/top/data[name = 'em0 '][name = 'em0']/memory">64</div>
<div class="text"> left out of </div>
<div class="data" data-tag="total" data-units="kb" data-xpath="/top/data/total">640</div>
<div class="data" data-tag="total" data-units="kb" data-xpath="/top/data[name = 'em0 '][name = 'em0']/total">640</div>
</div>
<div class="line">
<div class="data" data-tag="memory" data-units="k" data-xpath="/top/data/memory">64</div>
<div class="data" data-tag="memory" data-units="k" data-xpath="/top/data[name = 'em0 '][name = 'em0']/memory">64</div>
<div class="text"> left out of </div>
<div class="data" data-tag="total" data-units="kilobytes" data-xpath="/top/data/total">640</div>
<div class="data" data-tag="total" data-units="kilobytes" data-xpath="/top/data[name = 'em0 '][name = 'em0']/total">640</div>
</div>
<div class="line">
<div class="title">beforeworkingafter:</div>
</div>
<div class="line">
<div class="data" data-tag="some" data-xpath="/top/data/some">string</div>
<div class="data" data-tag="some" data-xpath="/top/data[name = 'em0 '][name = 'em0']/some">string</div>
<div class="decoration">:</div>
<div class="padding"> </div>
<div class="data" data-tag="ten" data-xpath="/top/data/ten">10</div>
<div class="data" data-tag="eleven" data-xpath="/top/data/eleven">11</div>
<div class="data" data-tag="ten" data-xpath="/top/data[name = 'em0 '][name = 'em0']/ten">10</div>
<div class="data" data-tag="eleven" data-xpath="/top/data[name = 'em0 '][name = 'em0']/eleven">11</div>
</div>
<div class="line">
<div class="data" data-tag="unknown" data-xpath="/top/data/unknown">1010</div>
<div class="data" data-tag="unknown" data-xpath="/top/data[name = 'em0 '][name = 'em0']/unknown">1010</div>
<div class="text"> </div>
<div class="note">packets here/there/everywhere</div>
</div>
<div class="line">
<div class="data" data-tag="unknown" data-xpath="/top/data/unknown">1010</div>
<div class="data" data-tag="unknown" data-xpath="/top/data[name = 'em0 '][name = 'em0']/unknown">1010</div>
<div class="text"> </div>
<div class="note">packets here/there/everywhere</div>
</div>
<div class="line">
<div class="text">(</div>
<div class="padding"> </div>
<div class="data" data-tag="min" data-xpath="/top/data/min">15</div>
<div class="data" data-tag="min" data-xpath="/top/data[name = 'em0 '][name = 'em0']/min">15</div>
<div class="text">/</div>
<div class="data" data-tag="cur" data-xpath="/top/data/cur">20</div>
<div class="data" data-tag="cur" data-xpath="/top/data[name = 'em0 '][name = 'em0']/cur">20</div>
<div class="text">/</div>
<div class="data" data-tag="max" data-xpath="/top/data/max">125</div>
<div class="data" data-tag="max" data-xpath="/top/data[name = 'em0 '][name = 'em0']/max">125</div>
<div class="text">)</div>
</div>
<div class="line">
<div class="text">(</div>
<div class="padding"> </div>
<div class="data" data-tag="min" data-xpath="/top/data/min">15</div>
<div class="data" data-tag="min" data-xpath="/top/data[name = 'em0 '][name = 'em0']/min">15</div>
<div class="text">/</div>
<div class="data" data-tag="cur" data-xpath="/top/data/cur">20</div>
<div class="data" data-tag="cur" data-xpath="/top/data[name = 'em0 '][name = 'em0']/cur">20</div>
<div class="text">/</div>
<div class="data" data-tag="max" data-xpath="/top/data/max">125</div>
<div class="data" data-tag="max" data-xpath="/top/data[name = 'em0 '][name = 'em0']/max">125</div>
<div class="text">)</div>
</div>
<div class="line">
<div class="text">(</div>
<div class="data" data-tag="min" data-xpath="/top/data/min">15</div>
<div class="data" data-tag="min" data-xpath="/top/data[name = 'em0 '][name = 'em0']/min">15</div>
<div class="text">/</div>
<div class="data" data-tag="cur" data-xpath="/top/data/cur">20</div>
<div class="data" data-tag="cur" data-xpath="/top/data[name = 'em0 '][name = 'em0']/cur">20</div>
<div class="text">/</div>
<div class="data" data-tag="max" data-xpath="/top/data/max">125</div>
<div class="data" data-tag="max" data-xpath="/top/data[name = 'em0 '][name = 'em0']/max">125</div>
<div class="padding"> </div>
<div class="text">)</div>
</div>
<div class="line">
<div class="text">(</div>
<div class="data" data-tag="min" data-xpath="/top/data/min">15</div>
<div class="data" data-tag="min" data-xpath="/top/data[name = 'em0 '][name = 'em0']/min">15</div>
<div class="text">/</div>
<div class="data" data-tag="cur" data-xpath="/top/data/cur">20</div>
<div class="data" data-tag="cur" data-xpath="/top/data[name = 'em0 '][name = 'em0']/cur">20</div>
<div class="text">/</div>
<div class="data" data-tag="max" data-xpath="/top/data/max">125</div>
<div class="data" data-tag="max" data-xpath="/top/data[name = 'em0 '][name = 'em0']/max">125</div>
<div class="padding"> </div>
<div class="text">)</div>
</div>
<div class="line">
<div class="text">Humanize: </div>
<div class="data" data-tag="val1" data-xpath="/top/data/val1" data-number="21">21</div>
<div class="data" data-tag="val1" data-xpath="/top/data[name = 'em0 '][name = 'em0']/val1" data-number="21">21</div>
<div class="text">, </div>
<div class="data" data-tag="val2" data-xpath="/top/data/val2" data-number="58368">57 K</div>
<div class="data" data-tag="val2" data-xpath="/top/data[name = 'em0 '][name = 'em0']/val2" data-number="58368">57 K</div>
<div class="text">, </div>
<div class="data" data-tag="val3" data-xpath="/top/data/val3" data-number="100663296">96M</div>
<div class="data" data-tag="val3" data-xpath="/top/data[name = 'em0 '][name = 'em0']/val3" data-number="100663296">96M</div>
<div class="text">, </div>
<div class="data" data-tag="val4" data-xpath="/top/data/val4" data-number="44470272">44M</div>
<div class="data" data-tag="val4" data-xpath="/top/data[name = 'em0 '][name = 'em0']/val4" data-number="44470272">44M</div>
<div class="text">, </div>
<div class="data" data-tag="val5" data-xpath="/top/data/val5" data-number="1342172800">1.2G</div>
<div class="data" data-tag="val5" data-xpath="/top/data[name = 'em0 '][name = 'em0']/val5" data-number="1342172800">1.2G</div>
</div>
<div class="line">
<div class="data" data-tag="flag" data-xpath="/top/data/flag">one</div>
<div class="data" data-tag="flag" data-xpath="/top/data[name = 'em0 '][name = 'em0']/flag">one</div>
<div class="text"> </div>
<div class="data" data-tag="flag" data-xpath="/top/data/flag">two</div>
<div class="data" data-tag="flag" data-xpath="/top/data[name = 'em0 '][name = 'em0']/flag">two</div>
<div class="text"> </div>
<div class="data" data-tag="flag" data-xpath="/top/data/flag">three</div>
<div class="data" data-tag="flag" data-xpath="/top/data[name = 'em0 '][name = 'em0']/flag">three</div>
</div>
<div class="line">
<div class="data" data-tag="works" data-xpath="/top/data/works">(null)</div>
<div class="data" data-tag="works" data-xpath="/top/data[name = 'em0 '][name = 'em0']/works">(null)</div>
</div>
<div class="line">
<div class="text">1:</div>
<div class="data" data-tag="t1" data-xpath="/top/data/t1"> 1000</div>
<div class="data" data-tag="t1" data-xpath="/top/data[name = 'em0 '][name = 'em0']/t1"> 1000</div>
<div class="text"> 2:</div>
<div class="data" data-tag="t2" data-xpath="/top/data/t2">test5000 </div>
<div class="data" data-tag="t2" data-xpath="/top/data[name = 'em0 '][name = 'em0']/t2">test5000 </div>
<div class="text"> 3:</div>
<div class="data" data-tag="t3" data-xpath="/top/data/t3"> ten-longx</div>
<div class="data" data-tag="t3" data-xpath="/top/data[name = 'em0 '][name = 'em0']/t3"> ten-longx</div>
<div class="text"> 4:</div>
<div class="data" data-tag="t4" data-xpath="/top/data/t4">xtest </div>
<div class="data" data-tag="t4" data-xpath="/top/data[name = 'em0 '][name = 'em0']/t4">xtest </div>
</div>
<div class="line">
<div class="error">this is an error</div>
@ -208,10 +210,10 @@
<div class="line">
<div class="label">V1/V2 packets</div>
<div class="text">: </div>
<div class="data" data-tag="count" data-xpath="/top/data/count">10</div>
<div class="data" data-tag="count" data-xpath="/top/data[name = 'em0 '][name = 'em0']/count">10</div>
</div>
<div class="line">
<div class="data" data-tag="test" data-xpath="/top/data/test">0004</div>
<div class="data" data-tag="test" data-xpath="/top/data[name = 'em0 '][name = 'em0']/test">0004</div>
<div class="text"> </div>
<div class="label">tries</div>
</div>

View file

@ -0,0 +1 @@
test_02.test: key field emitted after normal value field: 'name'

View file

@ -1,4 +1,6 @@
<div class="line">
<div class="data" data-tag="name">em0 </div>
<div class="data">em0 </div>
<div class="text">We are </div>
<div class="text">{emit}</div>
<div class="text">{ting}</div>

View file

@ -0,0 +1 @@
test_02.test: key field emitted after normal value field: 'name'

View file

@ -1 +1 @@
{"top": {"data": {"what":"braces","length":"abcdef","fd":-1,"error":"Bad file descriptor","test":"good","fd":-1,"error":"Bad fi","test":"good","lines":20,"words":30,"characters":40, "bytes": [0,1,2,3,4],"mbuf-current":10,"mbuf-cache":20,"mbuf-total":30,"distance":50,"location":"Boston","memory":64,"total":640,"memory":64,"total":640,"ten":10,"eleven":11,"unknown":1010,"unknown":1010,"min":15,"cur":20,"max":125,"min":15,"cur":20,"max":125,"min":15,"cur":20,"max":125,"min":15,"cur":20,"max":125,"val1":21,"val2":58368,"val3":100663296,"val4":44470272,"val5":1342172800, "flag": ["one","two","three"],"works":null,"empty-tag":true,"t1":"1000","t2":"test5000","t3":"ten-longx","t4":"xtest", "__error": {"message":"this is an error"}, "__error": {"message":"two more errors"}, "__warning": {"message":"this is an warning"}, "__warning": {"message":"two more warnings"},"count":10,"test":4, "error": {"message":"Shut 'er down, Clancey! She's a-pumpin' mud! <>!,\"!<>\n"}}}}
{"top": {"data": {"name":"em0","flags":"0x8843","name":"em0","flags":"0x8843","what":"braces","length":"abcdef","fd":-1,"error":"Bad file descriptor","test":"good","fd":-1,"error":"Bad fi","test":"good","lines":20,"words":30,"characters":40, "bytes": [0,1,2,3,4],"mbuf-current":10,"mbuf-cache":20,"mbuf-total":30,"distance":50,"location":"Boston","memory":64,"total":640,"memory":64,"total":640,"ten":10,"eleven":11,"unknown":1010,"unknown":1010,"min":15,"cur":20,"max":125,"min":15,"cur":20,"max":125,"min":15,"cur":20,"max":125,"min":15,"cur":20,"max":125,"val1":21,"val2":58368,"val3":100663296,"val4":44470272,"val5":1342172800, "flag": ["one","two","three"],"works":null,"empty-tag":true,"t1":"1000","t2":"test5000","t3":"ten-longx","t4":"xtest", "__error": {"message":"this is an error"}, "__error": {"message":"two more errors"}, "__warning": {"message":"this is an warning"}, "__warning": {"message":"two more warnings"},"count":10,"test":4, "error": {"message":"Shut 'er down, Clancey! She's a-pumpin' mud! <>!,\"!<>\n"}}}}

View file

@ -0,0 +1 @@
test_02.test: key field emitted after normal value field: 'name'

View file

@ -1,6 +1,10 @@
{
"top": {
"data": {
"name": "em0",
"flags": "0x8843",
"name": "em0",
"flags": "0x8843",
"what": "braces",
"length": "abcdef",
"fd": -1,

View file

@ -1 +1,2 @@
test_02.test: key field emitted after normal value field: 'name'
Shut 'er down, Clancey! She's a-pumpin' mud! <>!,"!<>

View file

@ -1,4 +1,4 @@
We are {emit}{ting} some braces
em0 em0 We are {emit}{ting} some braces
abcdef
abcdef: Bad file descriptor
improper use of profanity; ten yard penalty; first down

View file

@ -0,0 +1 @@
test_02.test: key field emitted after normal value field: 'name'

View file

@ -1,4 +1,4 @@
<top><data><what>braces</what><message>abcdef
<top><data><name>em0</name><flags>0x8843</flags><name>em0</name><flags>0x8843</flags><what>braces</what><message>abcdef
</message><message>abcdef: Bad file descriptor
</message><message>improper use of profanity; ten yard penalty; first down
</message><length>abcdef</length><fd>-1</fd><error>Bad file descriptor</error><test>good</test><fd>-1</fd><error>Bad fi</error><test>good</test><message>improper use of profanity; ten yard penalty; first down

View file

@ -0,0 +1 @@
test_02.test: key field emitted after normal value field: 'name'

View file

@ -1,5 +1,9 @@
<top>
<data>
<name>em0</name>
<flags>0x8843</flags>
<name>em0</name>
<flags>0x8843</flags>
<what>braces</what>
<message>abcdef
</message>

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, Juniper Networks, Inc.
* Copyright (c) 2014-2019, Juniper Networks, Inc.
* All rights reserved.
* This SOFTWARE is licensed under the LICENSE provided in the
* ../Copyright file. By downloading, installing, copying, or otherwise

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, Juniper Networks, Inc.
* Copyright (c) 2014-2019, Juniper Networks, Inc.
* All rights reserved.
* This SOFTWARE is licensed under the LICENSE provided in the
* ../Copyright file. By downloading, installing, copying, or otherwise
@ -48,6 +48,12 @@ main (int argc, char **argv)
xo_open_container("data");
xo_emit("{kt:name/%-*.*s}{eq:flags/0x%x}",
5, 5, "em0", 34883);
xo_emit("{d:/%-*.*s}{etk:name}{eq:flags/0x%x}",
5, 5, "em0", "em0", 34883);
xo_emit("We are {{emit}}{{ting}} some {:what}\n", "braces");
xo_message("abcdef");

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2014-2018, Juniper Networks, Inc.
* Copyright (c) 2014-2019, Juniper Networks, Inc.
* All rights reserved.
* This SOFTWARE is licensed under the LICENSE provided in the
* ../Copyright file. By downloading, installing, copying, or otherwise

View file

@ -3,10 +3,10 @@
.Fx
uses
.Nm libxo
version 0.9.0.
version 1.0.4.
Complete documentation can be found on github:
.Bd -literal -offset indent
http://juniper.github.io/libxo/0.9.0/libxo\-manual.html
http://juniper.github.io/libxo/1.0.4/libxo\-manual.html
.Ed
.Pp
.Nm libxo

View file

@ -183,16 +183,16 @@
/* #undef LIBXO_TEXT_ONLY */
/* Version number as dotted value */
#define LIBXO_VERSION "1.0.2"
#define LIBXO_VERSION "1.0.4"
/* Version number extra information */
#define LIBXO_VERSION_EXTRA ""
/* Version number as a number */
#define LIBXO_VERSION_NUMBER 1000002
#define LIBXO_VERSION_NUMBER 1000004
/* Version number as string */
#define LIBXO_VERSION_STRING "1000002"
#define LIBXO_VERSION_STRING "1000004"
/* Enable local wcwidth implementation */
#define LIBXO_WCWIDTH 1
@ -210,7 +210,7 @@
#define PACKAGE_NAME "libxo"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "libxo 1.0.2"
#define PACKAGE_STRING "libxo 1.0.4"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "libxo"
@ -219,7 +219,7 @@
#define PACKAGE_URL ""
/* Define to the version of this package. */
#define PACKAGE_VERSION "1.0.2"
#define PACKAGE_VERSION "1.0.4"
/* If using the C implementation of alloca, define if you know the
direction of stack growth for your system; otherwise it will be
@ -236,7 +236,7 @@
/* #undef USE_INT_RETURN_CODES */
/* Version number of package */
#define VERSION "1.0.2"
#define VERSION "1.0.4"
/* Retain hash bucket size */
/* #undef XO_RETAIN_SIZE */

View file

@ -12,7 +12,7 @@
#
BASE=/usr/share/libxo
VERSION=1.0.2
VERSION=1.0.4
CMD=cat
DONE=
WEB=http://juniper.github.io/libxo/${VERSION}/xohtml