示例#1
0
SOL_API const char *
sol_network_link_addr_to_str(const struct sol_network_link_addr *addr,
    struct sol_buffer *buf)
{
#if MODULE_GNRC_IPV6_NETIF
    const char *r;

    SOL_NULL_CHECK(addr, NULL);
    SOL_NULL_CHECK(buf, NULL);

    if (addr->family != SOL_NETWORK_FAMILY_INET6)
        return NULL;

    if (buf->capacity - buf->used < IPV6_ADDR_MAX_STR_LEN) {
        int err;

        err = sol_buffer_expand(buf, IPV6_ADDR_MAX_STR_LEN);
        SOL_INT_CHECK(err, < 0, NULL);
    }
示例#2
0
SOL_API char *
sol_util_strerror(int errnum, struct sol_buffer *buf)
{
    char *ret;
    int err;

    SOL_NULL_CHECK(buf, NULL);

#define CHUNK_SIZE (512)

#ifdef HAVE_XSI_STRERROR_R
    /* XSI-compliant strerror_r returns int */
    while (1) {
        errno = 0;
        ret = sol_buffer_at_end(buf);
        err = strerror_r(errnum, ret, buf->capacity - buf->used);

        if (err == ERANGE || (err < 0 && errno == ERANGE)) {
            err = sol_buffer_expand(buf, CHUNK_SIZE);
            SOL_INT_CHECK(err, < 0, NULL);
        } else if (err != 0)
示例#3
0
SOL_API char *
sol_json_escape_string(const char *str, struct sol_buffer *buf)
{
    char *out, *r_str;
    size_t i, escaped_len;
    int r;

    SOL_NULL_CHECK(str, NULL);
    SOL_NULL_CHECK(buf, NULL);

    escaped_len = sol_json_calculate_escaped_string_len(str);

    r = sol_buffer_expand(buf, escaped_len);
    SOL_INT_CHECK(r, < 0, NULL);

    r_str = out = sol_buffer_at_end(buf);

    for (i = 0; *str && i < escaped_len; str++, i++) {
        if (memchr(sol_json_escapable_chars, *str, sizeof(sol_json_escapable_chars))) {
            *out++ = '\\';
            switch (*str) {
            case '"':  *out++ = '"'; break;
            case '\\': *out++ = '\\'; break;
            case '/':  *out++ = '/'; break;
            case '\b': *out++ = 'b'; break;
            case '\f': *out++ = 'f'; break;
            case '\n': *out++ = 'n'; break;
            case '\r': *out++ = 'r'; break;
            case '\t': *out++ = 't'; break;
            }
        } else {
            *out++ = *str;
        }
    }

    *out++ = '\0';
    buf->used += escaped_len - 1;

    return r_str;
}