Elektra  0.8.26
Plugin: ccode

CCode

Introduction

The ccode plugin replaces (escapes) any special characters with two characters:

before writing a KeySet. The plugin undoes this modification after reading a KeySet.

CCode provides a reasonable default configuration, using the usual escape sequences for C strings (e.g. \n for newline, \t for tab). You can also configure the escape character (/escape) and the mapping for special characters (chars).

Examples

Default Configuration

1 # Mount `tcl` storage plugin together with the required `base64` plugin.
2 # We use the `ccode` plugin to escape special characters.
3 sudo kdb mount config.tcl user/tests/ccode tcl ccode base64
4 
5 # Add a key value containing newline characters
6 kdb set user/tests/ccode/multiline "`printf 'one\ntwo\nthree'`"
7 # By default the plugin uses `\n` to escape newline characters
8 grep 'multiline' `kdb file user/tests/ccode` | sed 's/[[:space:]]*//'
9 #> multiline = one\ntwo\nthree
10 
11 # The `ccode` plugin escapes and unescapes the data. The `tcl` plugin
12 # returns the unescaped values.
13 kdb get user/tests/ccode/multiline
14 #> one
15 #> two
16 #> three
17 
18 # Write and read a key value containing a tab character
19 kdb set user/tests/ccode/tab 'Tab Fabulous'
20 kdb get user/tests/ccode/tab
21 #> Tab Fabulous
22 
23 # The plugin also escapes special characters inside key names
24 kdb set 'user/tests/ccode/tab/t\ta b' 'Escaped Tabs'
25 grep 'tab/' `kdb file user/tests/ccode` | sed 's/[[:space:]]*//'
26 #> tab/t\\ta\tb = Escaped Tabs
27 
28 # Undo modifications to database
29 kdb rm -r user/tests/ccode
30 sudo kdb umount user/tests/ccode

Custom Configuration

`` <h1>We use%as escape character and map the space character (hex:20) to the character_.</h1> sudo kdb mount config.tcl user/tests/ccode tcl base64 ccode escape=bash -c 'printf x "'` chars/20=`bash -c 'printf x "_'`

kdb set user/tests/ccode/spaces 'one two three'

grep 'space' kdb file user/tests/ccode/spaces | sed 's/[[:space:]]*//' #> spaces = one_two_three

kdb get user/tests/ccode/spaces #> one two three

Undo modifications to database

kdb rm -r user/tests/ccode sudo kdb umount user/tests/ccode ```

Restrictions

This method of encoding characters is not as powerful as the hexcode plugin in terms of reduction. The hexcode plugin allows reduction of the character set to '0'-'9', 'a'-'f' and one escape character. So it can represent any key value with only 17 characters. On the other hand, ccode cannot reduce the set more than by half.

So when all control characters and non-ASCII characters need to vanish, it cannot be done with the ccode plugin. But it is perfectly suitable to reduce by some characters. The advantages are that the size only doubles in the worst case and that it is much easier to read.

C

In the C language, the following escape characters are present.

This is also the default mapping.

Contract

Add ccode to infos/needs for any plugin that you want to be filtered by ccode.