diff options
| author | rsc <devnull@localhost> | 2004-12-26 23:59:10 +0000 |
|---|---|---|
| committer | rsc <devnull@localhost> | 2004-12-26 23:59:10 +0000 |
| commit | 1b1434ebcebd9411b0ad3815bc5eb9237a1a8b23 (patch) | |
| tree | f3a418f452730d67e2802821d1de3a950dcb7995 /src/libsec/port/decodepem.c | |
| parent | 127d5444fbeb563f41ad27bd622214dae99b7507 (diff) | |
| download | plan9port-1b1434ebcebd9411b0ad3815bc5eb9237a1a8b23.tar.gz plan9port-1b1434ebcebd9411b0ad3815bc5eb9237a1a8b23.zip | |
changes from plan 9. some clean-up.
Diffstat (limited to 'src/libsec/port/decodepem.c')
| -rw-r--r-- | src/libsec/port/decodepem.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/libsec/port/decodepem.c b/src/libsec/port/decodepem.c index 194a4558..a0b00946 100644 --- a/src/libsec/port/decodepem.c +++ b/src/libsec/port/decodepem.c @@ -6,7 +6,7 @@ #define STRLEN(s) (sizeof(s)-1) uchar* -decodepem(char *s, char *type, int *len) +decodepem(char *s, char *type, int *len, char **news) { uchar *d; char *t, *e, *tt; @@ -44,6 +44,8 @@ decodepem(char *s, char *type, int *len) return nil; } + if(news) + *news = tt+1; n = ((tt - t) * 6 + 7) / 8; d = malloc(n); if(d == nil){ @@ -59,3 +61,29 @@ decodepem(char *s, char *type, int *len) *len = n; return d; } + +PEMChain* +decodepemchain(char *s, char *type) +{ + PEMChain *first = nil, *last = nil, *chp; + uchar *d; + char *e; + int n; + + e = strchr(s, '\0'); + while (s < e) { + d = decodepem(s, type, &n, &s); + if(d == nil) + break; + chp = malloc(sizeof(PEMChain)); + chp->next = nil; + chp->pem = d; + chp->pemlen = n; + if (first == nil) + first = chp; + else + last->next = chp; + last = chp; + } + return first; +} |
