| 173 | } |
| 174 | |
| 175 | ssize_t base64_decode_using_maps(const base64_maps_t *maps, |
| 176 | char *dest, const size_t destlen, |
| 177 | const char *src, const size_t srclen) |
| 178 | { |
| 179 | ssize_t dest_offset = 0; |
| 180 | ssize_t i; |
| 181 | ssize_t more; |
| 182 | |
| 183 | if (destlen < base64_decoded_length(srclen)) { |
| 184 | errno = EOVERFLOW; |
| 185 | return -1; |
| 186 | } |
| 187 | |
| 188 | for(i=0; srclen - i > 4; i+=4) { |
| 189 | if (base64_decode_quartet_using_maps(maps, &dest[dest_offset], &src[i]) == -1) { |
| 190 | return -1; |
| 191 | } |
| 192 | dest_offset += 3; |
| 193 | } |
| 194 | |
| 195 | more = base64_decode_tail_using_maps(maps, &dest[dest_offset], &src[i], srclen - i); |
| 196 | if (more == -1) { |
| 197 | return -1; |
| 198 | } |
| 199 | dest_offset += more; |
| 200 | |
| 201 | memset(&dest[dest_offset], '\0', destlen-dest_offset); |
| 202 | |
| 203 | return dest_offset; |
| 204 | } |
| 205 | |
| 206 | |
| 207 |
no test coverage detected