projects
/
u
/
mdw
/
catacomb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix maintainer email address.
[u/mdw/catacomb]
/
key-text.c
diff --git
a/key-text.c
b/key-text.c
index
dcfe354
..
b13f571
100644
(file)
--- a/
key-text.c
+++ b/
key-text.c
@@
-1,6
+1,6
@@
/* -*-c-*-
*
/* -*-c-*-
*
- * $Id
: key-text.c,v 1.6 2004/04/08 01:36:15 mdw Exp
$
+ * $Id$
*
* Key textual encoding
*
*
* Key textual encoding
*
@@
-49,17
+49,17
@@
/* --- @key_read@ --- *
*
* Arguments: @const char *p@ = pointer to textual key representation
/* --- @key_read@ --- *
*
* Arguments: @const char *p@ = pointer to textual key representation
- * @key_data *k@ = pointer to output block for key data
* @char **pp@ = where to store the end pointer
*
* @char **pp@ = where to store the end pointer
*
- * Returns:
Zero if all went well, nonzero if there was a problem
.
+ * Returns:
The newly-read key data, or null if it failed
.
*
* Use: Parses a textual key description.
*/
*
* Use: Parses a textual key description.
*/
-
int key_read(const char *p, key_data *k
, char **pp)
+
key_data *key_read(const char *p
, char **pp)
{
unsigned e;
{
unsigned e;
+ key_data *kd;
/* --- Read the encoding type --- *
*
/* --- Read the encoding type --- *
*
@@
-72,13
+72,12
@@
int key_read(const char *p, key_data *k, char **pp)
else {
char *q;
if (key_readflags(p, &q, &e, 0))
else {
char *q;
if (key_readflags(p, &q, &e, 0))
- return (
-1
);
+ return (
0
);
p = q + 1;
}
/* --- Now scan the data based on the encoding type --- */
p = q + 1;
}
/* --- Now scan the data based on the encoding type --- */
- k->e = e;
switch (e & KF_ENCMASK) {
/* --- Binary encoding --- *
switch (e & KF_ENCMASK) {
/* --- Binary encoding --- *
@@
-97,9
+96,7
@@
int key_read(const char *p, key_data *k, char **pp)
base64_init(&b);
base64_decode(&b, p, sz, &d);
base64_decode(&b, 0, 0, &d);
base64_init(&b);
base64_decode(&b, p, sz, &d);
base64_decode(&b, 0, 0, &d);
- k->u.k.k = sub_alloc(d.len);
- k->u.k.sz = d.len;
- memcpy(k->u.k.k, d.buf, d.len);
+ kd = key_newbinary(e, d.buf, d.len);
dstr_destroy(&d);
p += sz;
} break;
dstr_destroy(&d);
p += sz;
} break;
@@
-111,10
+108,11
@@
int key_read(const char *p, key_data *k, char **pp)
case KENC_MP: {
char *q;
case KENC_MP: {
char *q;
- mp *m = mp_readstring(
k->
e & KF_BURN ? MP_NEWSEC : MP_NEW, p, &q, 0);
+ mp *m = mp_readstring(e & KF_BURN ? MP_NEWSEC : MP_NEW, p, &q, 0);
if (!m)
if (!m)
- return (-1);
- k->u.m = m;
+ return (0);
+ kd = key_newmp(e, m);
+ MP_DROP(m);
p = q;
} break;
p = q;
} break;
@@
-143,7
+141,7
@@
int key_read(const char *p, key_data *k, char **pp)
p++;
}
DPUTZ(&d);
p++;
}
DPUTZ(&d);
- k
->u.p = xstrdup(
d.buf);
+ k
d = key_newstring(e,
d.buf);
dstr_destroy(&d);
} break;
dstr_destroy(&d);
} break;
@@
-154,12
+152,14
@@
int key_read(const char *p, key_data *k, char **pp)
*/
case KENC_EC: {
*/
case KENC_EC: {
+ ec pt = EC_INIT;
qd_parse qd;
qd.p = p;
qd.e = 0;
qd_parse qd;
qd.p = p;
qd.e = 0;
- EC_CREATE(&k->u.e);
- if (!ec_ptparse(&qd, &k->u.e))
- return (-1);
+ if (!ec_ptparse(&qd, &pt))
+ return (0);
+ kd = key_newec(e, &pt);
+ EC_DESTROY(&pt);
p = qd.p;
} break;
p = qd.p;
} break;
@@
-175,21
+175,20
@@
int key_read(const char *p, key_data *k, char **pp)
case KENC_STRUCT: {
dstr d = DSTR_INIT;
case KENC_STRUCT: {
dstr d = DSTR_INIT;
+ key_data *nkd;
char *q;
/* --- Read the opening bracket --- */
char *q;
/* --- Read the opening bracket --- */
- k
->e &= KF_ENCMASK
;
+ k
d = key_newstruct()
;
if (*p != '[')
if (*p != '[')
- return (
-1
);
+ return (
0
);
p++;
p++;
- sym_create(&k->u.s);
/* --- Read named key subparts --- */
for (;;) {
size_t sz;
/* --- Read named key subparts --- */
for (;;) {
size_t sz;
- key_struct *ks;
/* --- Stop if there's a close-bracket --- *
*
/* --- Stop if there's a close-bracket --- *
*
@@
-212,24
+211,11
@@
int key_read(const char *p, key_data *k, char **pp)
DPUTM(&d, p, sz);
DPUTZ(&d);
DPUTM(&d, p, sz);
DPUTZ(&d);
- /* --- Add an appropriate block to the key table --- *
- *
- * Simply destroy old data if there's already a match.
- */
-
- {
- unsigned f;
- ks = sym_find(&k->u.s, d.buf, d.len, sizeof(*ks), &f);
- if (f)
- key_destroy(&ks->k);
- }
-
/* --- Read the key data for the subkey --- */
/* --- Read the key data for the subkey --- */
- if (key_read(q + 1, &ks->k, &q)) {
- sym_remove(&k->u.s, ks);
+ if ((nkd = key_read(q + 1, &q)) == 0)
goto fail;
goto fail;
- }
+ key_structsteal(kd, d.buf, nkd);
p = q;
/* --- Read the comma or close-bracket --- */
p = q;
/* --- Read the comma or close-bracket --- */
@@
-252,21
+238,21
@@
int key_read(const char *p, key_data *k, char **pp)
fail:
dstr_destroy(&d);
fail:
dstr_destroy(&d);
- key_destroy(k);
- return (-1);
+ return (0);
} break;
/* --- Anything else is unknown --- */
default:
} break;
/* --- Anything else is unknown --- */
default:
- return (
-1
);
+ return (
0
);
}
/* --- Return the end pointer --- */
}
/* --- Return the end pointer --- */
+ kd->e = e;
if (pp)
*pp = (char *)p;
if (pp)
*pp = (char *)p;
- return (
0
);
+ return (
kd
);
}
/* --- @key_write@ --- *
}
/* --- @key_write@ --- *
@@
-327,19
+313,19
@@
int key_write(key_data *k, dstr *d, const key_filter *kf)
rc = 1;
break;
case KENC_STRUCT: {
rc = 1;
break;
case KENC_STRUCT: {
-
sym_
iter i;
-
key_struct *ks
;
+
key_subkey
iter i;
+
const char *tag
;
char del = 0;
size_t n = d->len;
DPUTS(d, "struct:[");
char del = 0;
size_t n = d->len;
DPUTS(d, "struct:[");
- for (
sym_mkiter(&i, &k->u.s); (ks = sym_next(&i)) != 0
; ) {
+ for (
key_mksubkeyiter(&i, k); key_nextsubkey(&i, &tag, &k)
; ) {
size_t o = d->len;
if (del)
DPUTC(d, del);
size_t o = d->len;
if (del)
DPUTC(d, del);
- DPUTS(d,
SYM_NAME(ks)
);
+ DPUTS(d,
tag
);
DPUTC(d, '=');
DPUTC(d, '=');
- if (!key_write(
&ks->
k, d, kf))
+ if (!key_write(k, d, kf))
d->len = o;
else {
del = ',';
d->len = o;
else {
del = ',';