| 141 | }; |
| 142 | |
| 143 | size_t url_encode(char * buffer, size_t buflen, |
| 144 | const char * source, size_t srclen) { |
| 145 | if (NULL == buffer) |
| 146 | return srclen * 3 + 1; |
| 147 | if (buflen <= 0) |
| 148 | return 0; |
| 149 | |
| 150 | size_t srcpos = 0, bufpos = 0; |
| 151 | while ((srcpos < srclen) && (bufpos + 1 < buflen)) { |
| 152 | unsigned char ch = source[srcpos++]; |
| 153 | if ((ch < 128) && (ASCII_CLASS[ch] & URL_UNSAFE)) { |
| 154 | if (bufpos + 3 >= buflen) { |
| 155 | break; |
| 156 | } |
| 157 | buffer[bufpos+0] = '%'; |
| 158 | buffer[bufpos+1] = hex_encode((ch >> 4) & 0xF); |
| 159 | buffer[bufpos+2] = hex_encode((ch ) & 0xF); |
| 160 | bufpos += 3; |
| 161 | } else { |
| 162 | buffer[bufpos++] = ch; |
| 163 | } |
| 164 | } |
| 165 | buffer[bufpos] = '\0'; |
| 166 | return bufpos; |
| 167 | } |
| 168 | |
| 169 | size_t url_decode(char * buffer, size_t buflen, |
| 170 | const char * source, size_t srclen) { |
nothing calls this directly
no test coverage detected