コード例 #1
0
SOL_API struct sol_buffer *
sol_util_load_file_fd_raw(int fd)
{
    struct sol_buffer *buf;
    int r;

    buf = sol_buffer_new();
    SOL_NULL_CHECK(buf, NULL);

    buf->flags |= SOL_BUFFER_FLAGS_NO_NUL_BYTE;

    r = sol_util_load_file_fd_buffer(fd, buf);
    SOL_INT_CHECK_GOTO(r, < 0, err_exit);

    return buf;

err_exit:
    sol_buffer_free(buf);
    return NULL;
}
コード例 #2
0
ファイル: sol-util-file.c プロジェクト: zehortigoza/soletta
struct sol_buffer *
sol_util_load_file_raw(const int fd)
{
    struct stat st;
    ssize_t ret;
    struct sol_buffer *buffer;

    if (fd < 0)
        return NULL;

    buffer = sol_buffer_new();
    SOL_NULL_CHECK(buffer, NULL);

    buffer->flags = SOL_BUFFER_FLAGS_NO_NUL_BYTE;

    if (fstat(fd, &st) >= 0 && st.st_size) {
        ret = sol_util_fill_buffer(fd, buffer, st.st_size);
    } else {
        do {
            ret = sol_util_fill_buffer(fd, buffer, CHUNK_SIZE);
        } while (ret > 0);
    }

    if (ret < 0)
        goto err;

    if (sol_buffer_trim(buffer) < 0)
        goto err;

    return buffer;

err:
    sol_buffer_free(buffer);

    return NULL;
}