mirror of https://github.com/flysand7/ciabatta.git
add str/memcpy functions
This commit is contained in:
parent
a0a32bdb7c
commit
2b03bc5645
3
cia.c
3
cia.c
|
@ -32,3 +32,6 @@
|
||||||
// Module stdlib_file
|
// Module stdlib_file
|
||||||
#include "src/stdlib-file/file.c"
|
#include "src/stdlib-file/file.c"
|
||||||
|
|
||||||
|
// Module stdlib_string
|
||||||
|
#include "src/stdlib-string/mem.c"
|
||||||
|
#include "src/stdlib-string/str.c"
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
|
||||||
void memset(void *dest, int ch, size_t length);
|
#pragma once
|
||||||
|
|
||||||
|
#include <cia/def.h>
|
||||||
|
|
||||||
|
void *memcpy(void *restrict dst, void const *restrict src, size_t count);
|
||||||
|
void *memccpy(void *restrict dst, void const *restrict src, int c, size_t count);
|
||||||
|
void *memmove(void *dst, const void *src, size_t count)
|
||||||
|
|
||||||
|
char *strcpy(char *restrict dst, char const *restrict src);
|
||||||
|
char *strncpy(char *restrict dst, char const *restrict src, size_t count);
|
||||||
|
|
||||||
|
void memset(void *dst, int ch, size_t length);
|
||||||
int _wcsicmp(uint16_t *s1, uint16_t *s2);
|
int _wcsicmp(uint16_t *s1, uint16_t *s2);
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
|
||||||
|
void *memcpy(void *restrict dst, void const *restrict src, size_t count) {
|
||||||
|
u8 *restrict dst_bytes = dst;
|
||||||
|
u8 const *restrict src_bytes = src;
|
||||||
|
for(size_t i = 0; i < count; ++i) {
|
||||||
|
dst_bytes[i] = src_bytes[i];
|
||||||
|
}
|
||||||
|
return dst_bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *memccpy(void *restrict dst, void const *restrict src, int c, size_t count) {
|
||||||
|
u8 *restrict dst_bytes = dst;
|
||||||
|
u8 const *restrict src_bytes = src;
|
||||||
|
for(size_t i = 0; i < count; ++i) {
|
||||||
|
dst_bytes[i] = src_bytes[i];
|
||||||
|
if(src_bytes[i] == c) {
|
||||||
|
return (void *)&src[i+1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *memmove(void *dst, const void *src, size_t count) {
|
||||||
|
if(dst == src) {
|
||||||
|
return dst;
|
||||||
|
}
|
||||||
|
u8 *dst_bytes = dst;
|
||||||
|
u8 const *src_bytes = src;
|
||||||
|
if(dst < src) {
|
||||||
|
for(size_t i = 0; i < count; ++i) {
|
||||||
|
dst_bytes[i] = src_bytes[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for(size_t i = count-1; i-- != 0; ) {
|
||||||
|
dst_bytes[i] = src_bytes[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dst_bytes;
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
|
||||||
|
char *strcpy(char *restrict dst, char const *restrict src) {
|
||||||
|
i64 str_len = 0;
|
||||||
|
for(i64 i = 0; src[i] != 0; ++i) {
|
||||||
|
dst[i] = src[i];
|
||||||
|
str_len += 1;
|
||||||
|
}
|
||||||
|
dst[str_len] = 0;
|
||||||
|
return dst;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *strncpy(char *restrict dst, char const *restrict src, size_t count) {
|
||||||
|
i64 str_len = 0;
|
||||||
|
for(i64 i = 0; i < count; ++i) {
|
||||||
|
if(src[i] == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
dst[i] = src[i];
|
||||||
|
str_len += 1;
|
||||||
|
}
|
||||||
|
for(i64 i = str_len; i < count; ++i) {
|
||||||
|
dst[i] = 0;
|
||||||
|
}
|
||||||
|
return dst;
|
||||||
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Scheduler on linux has too coarse granularity
|
// Scheduler on linux has too coarse granularity
|
||||||
// to allow a thread to a very tiny bit of work
|
// to allow a thread to kind of a lot of work
|
||||||
// before switching to another thread. If we
|
// before switching to another thread. If we
|
||||||
// introduce an arbitrary delay, the threads will
|
// introduce an arbitrary delay, the threads will
|
||||||
// be able to be run in a random order better.
|
// be able to be run in a random order better.
|
||||||
|
@ -100,15 +100,7 @@ int main() {
|
||||||
// Check to see the cnt variable
|
// Check to see the cnt variable
|
||||||
int result = atomic_load_explicit(&g_shared_state.cnt, memory_order_relaxed);
|
int result = atomic_load_explicit(&g_shared_state.cnt, memory_order_relaxed);
|
||||||
if(result == 0) {
|
if(result == 0) {
|
||||||
char msg[] = "Result was 0\n";
|
char msg[] = "This shouldn't happen in sequentially-consistent model!\n";
|
||||||
fwrite(msg, 1, sizeof msg, stdout);
|
|
||||||
}
|
|
||||||
else if(result == 1) {
|
|
||||||
char msg[] = "Result was 1\n";
|
|
||||||
fwrite(msg, 1, sizeof msg, stdout);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
char msg[] = "Result was 2\n";
|
|
||||||
fwrite(msg, 1, sizeof msg, stdout);
|
fwrite(msg, 1, sizeof msg, stdout);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue