-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstring.zig
More file actions
68 lines (62 loc) · 1.51 KB
/
Copy pathstring.zig
File metadata and controls
68 lines (62 loc) · 1.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
pub fn strcpy(dest: [*:0]u8, src: [*:0]const u8) [*:0]u8 {
var d = dest;
var s = src;
while (s[0] != 0) {
d[0] = s[0];
d += 1;
s += 1;
}
d[0] = 0;
return dest;
}
pub fn strcat(dest: [*:0]u8, src: [*:0]const u8) [*:0]u8 {
var d = dest;
while (d[0] != 0) d += 1;
var s = src;
while (s[0] != 0) {
d[0] = s[0];
d += 1;
s += 1;
}
d[0] = 0;
return dest;
}
pub fn strcmp(cs: [*:0]const u8, ct: [*:0]const u8) i32 {
var i: usize = 0;
while (cs[i] == ct[i] and cs[i] != 0) i += 1;
return @as(i32, cs[i]) - @as(i32, ct[i]);
}
pub fn strlen(s: [*:0]const u8) usize {
var i: usize = 0;
while (s[i] != 0) i += 1;
return i;
}
pub fn memcpy(dest: ?*anyopaque, src: ?*const anyopaque, n: i32) ?*anyopaque {
asm volatile ("cld; rep; movsb"
:
: [src] "{S}" (src),
[dest] "{D}" (dest),
[n] "{c}" (n),
: "memory"
);
return dest;
}
pub fn memmove(dest: ?*anyopaque, src: ?*const anyopaque, n: i32) ?*anyopaque {
asm volatile ("cld; rep; movsb"
:
: [src] "{S}" (src),
[dest] "{D}" (dest),
[n] "{c}" (n),
: "memory"
);
return dest;
}
pub fn memchr(cs: ?*const anyopaque, c: u8, count: i32) ?*anyopaque {
var s = @as([*]const u8, @ptrCast(cs));
var i: i32 = 0;
while (i < count) {
if (s[i] == c) return @as(*anyopaque, @constCast(@as(*const anyopaque, @ptrCast(&s[i]))));
i += 1;
}
return null;
}