int read_proc_net_from_file()

in source/linux/network.c [103:143]


int read_proc_net_from_file(
    struct aws_byte_buf *out_buf,
    struct aws_allocator *allocator,
    size_t size_hint,
    const char *filename) {
    AWS_ZERO_STRUCT(*out_buf);
    int return_value = AWS_OP_ERR;

    if (aws_byte_buf_init(out_buf, allocator, size_hint)) {
        return aws_raise_error(aws_last_error());
    }

    FILE *fp = fopen(filename, "r");
    if (fp) {
        size_t read = fread(out_buf->buffer, 1, out_buf->capacity, fp);
        out_buf->len += read;
        while (read == size_hint) {
            int aws_error = 0;
            if (AWS_OP_SUCCESS != (aws_error = aws_byte_buf_reserve_relative(out_buf, size_hint))) {
                return_value = aws_error;
                goto cleanup;
            }
            read = fread(out_buf->buffer + out_buf->len, 1, size_hint, fp);
            size_hint += size_hint;
        }
        if (ferror(fp)) {
            return_value = aws_translate_and_raise_io_error(errno);
            goto cleanup;
        }
        return_value = AWS_OP_SUCCESS;
    }

cleanup:
    fclose(fp);
    if (AWS_OP_SUCCESS != return_value) {
        aws_byte_buf_clean_up_secure(out_buf);
        return aws_raise_error(return_value);
    }

    return return_value;
}