aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/vlib/builtin/cfns_wrapper.c.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/vlib/builtin/cfns_wrapper.c.v')
-rw-r--r--v_windows/v/vlib/builtin/cfns_wrapper.c.v72
1 files changed, 72 insertions, 0 deletions
diff --git a/v_windows/v/vlib/builtin/cfns_wrapper.c.v b/v_windows/v/vlib/builtin/cfns_wrapper.c.v
new file mode 100644
index 0000000..06f1348
--- /dev/null
+++ b/v_windows/v/vlib/builtin/cfns_wrapper.c.v
@@ -0,0 +1,72 @@
+module builtin
+
+// vstrlen returns the V length of the C string `s` (0 terminator is not counted).
+// The C string is expected to be a &byte pointer.
+[inline; unsafe]
+pub fn vstrlen(s &byte) int {
+ return unsafe { C.strlen(&char(s)) }
+}
+
+// vstrlen_char returns the V length of the C string `s` (0 terminator is not counted).
+// The C string is expected to be a &char pointer.
+[inline; unsafe]
+pub fn vstrlen_char(s &char) int {
+ return unsafe { C.strlen(s) }
+}
+
+// vmemcpy copies n bytes from memory area src to memory area dest.
+// The memory areas *MUST NOT OVERLAP*. Use vmemmove, if the memory
+// areas do overlap. vmemcpy returns a pointer to `dest`.
+[inline; unsafe]
+pub fn vmemcpy(dest voidptr, const_src voidptr, n int) voidptr {
+ unsafe {
+ return C.memcpy(dest, const_src, n)
+ }
+}
+
+// vmemmove copies n bytes from memory area `src` to memory area `dest`.
+// The memory areas *MAY* overlap: copying takes place as though the bytes
+// in `src` are first copied into a temporary array that does not overlap
+// `src` or `dest`, and the bytes are then copied from the temporary array
+// to `dest`. vmemmove returns a pointer to `dest`.
+[inline; unsafe]
+pub fn vmemmove(dest voidptr, const_src voidptr, n int) voidptr {
+ unsafe {
+ return C.memmove(dest, const_src, n)
+ }
+}
+
+// vmemcmp compares the first n bytes (each interpreted as unsigned char)
+// of the memory areas s1 and s2. It returns an integer less than, equal to,
+// or greater than zero, if the first n bytes of s1 is found, respectively,
+// to be less than, to match, or be greater than the first n bytes of s2.
+// For a nonzero return value, the sign is determined by the sign of the
+// difference between the first pair of bytes (interpreted as unsigned char)
+// that differ in s1 and s2.
+// If n is zero, the return value is zero.
+// Do NOT use vmemcmp to compare security critical data, such as cryptographic
+// secrets, because the required CPU time depends on the number of equal bytes.
+// You should use a function that performs comparisons in constant time for
+// this.
+[inline; unsafe]
+pub fn vmemcmp(const_s1 voidptr, const_s2 voidptr, n int) int {
+ unsafe {
+ return C.memcmp(const_s1, const_s2, n)
+ }
+}
+
+// vmemset fills the first `n` bytes of the memory area pointed to by `s`,
+// with the constant byte `c`. It returns a pointer to the memory area `s`.
+[inline; unsafe]
+pub fn vmemset(s voidptr, c int, n int) voidptr {
+ unsafe {
+ return C.memset(s, c, n)
+ }
+}
+
+type FnSortCB = fn (const_a voidptr, const_b voidptr) int
+
+[inline; unsafe]
+fn vqsort(base voidptr, nmemb size_t, size size_t, sort_cb FnSortCB) {
+ C.qsort(base, nmemb, size, voidptr(sort_cb))
+}