aboutsummaryrefslogtreecommitdiff
path: root/mirai.old/utils/string/copy.zig
blob: 693f910764f93a225fd2c6e8b156df630cae6a32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//! String copy utilities

const memory_limits = @import("../../common/limits/memory.zig");
const slice = @import("../mem/slice.zig");

pub fn from_kata(dest: []u8, kata_ptr: u64) !usize {
    if (!memory_limits.is_valid_kata_pointer(kata_ptr)) {
        return error.InvalidPointer;
    }

    const src = slice.null_term_ptr(kata_ptr);

    var len: usize = 0;
    while (src[len] != 0 and len < dest.len) : (len += 1) {
        dest[len] = src[len];
    }

    if (len >= dest.len and src[len] != 0) {
        return error.StringTooLong;
    }

    return len;
}