Commit 86c58a5b by Edward Thomson Committed by Edward Thomson

str: add hexadigit encoding to strings

parent 3c53796c
......@@ -217,6 +217,32 @@ int git_str_puts(git_str *buf, const char *string)
return git_str_put(buf, string, strlen(string));
}
static char hex_encode[] = "0123456789abcdef";
int git_str_encode_hexstr(git_str *str, const char *data, size_t len)
{
size_t new_size, i;
char *s;
GIT_ERROR_CHECK_ALLOC_MULTIPLY(&new_size, len, 2);
GIT_ERROR_CHECK_ALLOC_ADD(&new_size, new_size, 1);
if (git_str_grow_by(str, new_size) < 0)
return -1;
s = str->ptr + str->size;
for (i = 0; i < len; i++) {
*s++ = hex_encode[(data[i] & 0xf0) >> 4];
*s++ = hex_encode[(data[i] & 0x0f)];
}
str->size += (len * 2);
str->ptr[str->size] = '\0';
return 0;
}
static const char base64_encode[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
......
......@@ -217,6 +217,9 @@ int git_str_cmp(const git_str *a, const git_str *b);
int git_str_quote(git_str *str);
int git_str_unquote(git_str *str);
/* Write data as a hex string */
int git_str_encode_hexstr(git_str *str, const char *data, size_t len);
/* Write data as base64 encoded in string buffer */
int git_str_encode_base64(git_str *str, const char *data, size_t len);
/* Decode the given bas64 and write the result to the string buffer */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment