void check_reversibility (const char * msg) { Key * decode = keyNew ("user/test", KEY_VALUE, msg, KEY_END); CHexData * hd = calloc (1, sizeof (CHexData)); hd->hd['\0'] = 1; hd->hd['\n'] = 1; hd->hd['\\'] = 1; hd->hd[' '] = 1; hd->hd['='] = 1; hd->hd[';'] = 1; hd->hd['#'] = 1; hd->escape = '\\'; char buf[1000]; hd->buf = buf; Key * encode = keyDup (decode); elektraHexcodeEncode (encode, hd); elektraHexcodeDecode (encode, hd); compare_key (encode, decode); elektraFree (hd); keyDel (decode); keyDel (encode); }
void test_decode (void) { printf ("test decode\n"); CHexData * hd = calloc (1, sizeof (CHexData)); hd->escape = '\\'; char buf[1000]; hd->buf = buf; Key * test = keyNew ("user/test", KEY_SIZE, sizeof (encoded_string) - 1, KEY_VALUE, encoded_string, KEY_END); elektraHexcodeDecode (test, hd); succeed_if (!strcmp (keyString (test), decoded_string), "string not correctly encoded"); elektraFree (hd); keyDel (test); }
int elektraHexcodeGet (Plugin * handle, KeySet * returned, Key * parentKey) { /* get all keys */ if (!strcmp (keyName (parentKey), "system/elektra/modules/hexcode")) { KeySet * pluginConfig = ksNew (30, keyNew ("system/elektra/modules/hexcode", KEY_VALUE, "hexcode plugin waits for your orders", KEY_END), keyNew ("system/elektra/modules/hexcode/exports", KEY_END), keyNew ("system/elektra/modules/hexcode/exports/get", KEY_FUNC, elektraHexcodeGet, KEY_END), keyNew ("system/elektra/modules/hexcode/exports/set", KEY_FUNC, elektraHexcodeSet, KEY_END), keyNew ("system/elektra/modules/hexcode/exports/open", KEY_FUNC, elektraHexcodeOpen, KEY_END), keyNew ("system/elektra/modules/hexcode/exports/close", KEY_FUNC, elektraHexcodeClose, KEY_END), #include "readme_hexcode.c" keyNew ("system/elektra/modules/hexcode/infos/version", KEY_VALUE, PLUGINVERSION, KEY_END), KS_END); ksAppend (returned, pluginConfig); ksDel (pluginConfig); return 1; } CHexData * hd = elektraPluginGetData (handle); if (!hd->buf) { hd->buf = elektraMalloc (1000); hd->bufalloc = 1000; } Key * cur; ksRewind (returned); while ((cur = ksNext (returned)) != 0) { size_t valsize = keyGetValueSize (cur); if (valsize > hd->bufalloc) { hd->bufalloc = valsize; hd->buf = realloc (hd->buf, hd->bufalloc); } elektraHexcodeDecode (cur, hd); } return 1; /* success */ }