Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:Update
libplist.4095
B0003-base64-get-rid-of-strtok_r-and-use-strspn...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File B0003-base64-get-rid-of-strtok_r-and-use-strspn-strcspn-instead.patch of Package libplist.4095
From 86ae825fb67734391fc7cc72d5c9b004570ab0a9 Mon Sep 17 00:00:00 2001 From: Nikias Bassen <nikias@gmx.li> Date: Tue, 12 Nov 2013 18:17:00 +0100 Subject: [PATCH] base64: get rid of strtok_r and use strspn+strcspn instead strtok_r is not available on win32 and the designated strtok_s function is reported to not work on windows xp. Hence we use an easier an non-destructive implementation with strspn and strcspn to strip out the whitespace. --- src/base64.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/base64.c b/src/base64.c index acec723..83205c2 100644 --- a/src/base64.c +++ b/src/base64.c @@ -112,18 +108,23 @@ unsigned char *base64decode(const char *buf, size_t *size) size_t len = strlen(buf); if (len <= 0) return NULL; unsigned char *outbuf = (unsigned char*)malloc((len/4)*3+3); - - unsigned char *line; + const char *ptr = buf; int p = 0; - char* saveptr = NULL; - line = (unsigned char*)strtok_r((char*)buf, "\r\n\t ", &saveptr); - while (line) { - p+=base64decode_block(outbuf+p, (const char*)line, strlen((char*)line)); + do { + ptr += strspn(ptr, "\r\n\t "); + if (*ptr == '\0') { + break; + } + len = strcspn(ptr, "\r\n\t "); + if (len > 0) { + p+=base64decode_block(outbuf+p, ptr, len); + ptr += len; + } else { + break; + } + } while (1); - // get next line of base64 encoded block - line = (unsigned char*)strtok_r(NULL, "\r\n\t ", &saveptr); - } outbuf[p] = 0; *size = p; return outbuf;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor