diff --git a/photon/libc/include/string.h b/photon/libc/include/string.h index a0be36a..2b1e6cb 100644 --- a/photon/libc/include/string.h +++ b/photon/libc/include/string.h @@ -19,6 +19,8 @@ extern int strncmp(const char *a, const char *b, size_t sz); extern char *strcpy(char *dest, const char *src); extern char *strncpy(char *dest, const char *src, size_t sz); +extern char *strrchr(const char *s, int c); + extern char *strdup(const char *s); #if defined(__cplusplus) diff --git a/photon/libc/stdio/fclose.c b/photon/libc/stdio/fclose.c new file mode 100644 index 0000000..f958db3 --- /dev/null +++ b/photon/libc/stdio/fclose.c @@ -0,0 +1,15 @@ +#include +#include +#include +#include <__fio.h> + +int fclose(FILE *fp) +{ + int res = __fio_fclose(fp); + if (res != 0) { + return EOF; + } + + free(fp); + return 0; +} diff --git a/photon/libc/string/strrchr.c b/photon/libc/string/strrchr.c new file mode 100644 index 0000000..f46366b --- /dev/null +++ b/photon/libc/string/strrchr.c @@ -0,0 +1,15 @@ +#include + +char *strrchr(const char *s, int c) +{ + /* include null term */ + long sz = strlen(s) + 1; + + for (long i = sz; i >= 0; i--) { + if (s[i] == c) { + return (char *)(s + i); + } + } + + return NULL; +} diff --git a/photon/libc/sys/magenta/fio.c b/photon/libc/sys/magenta/fio.c index 8c2cbc8..756af44 100644 --- a/photon/libc/sys/magenta/fio.c +++ b/photon/libc/sys/magenta/fio.c @@ -61,6 +61,15 @@ int __fio_fopen(const char *path, const char *mode, struct __io_file *fp) return 0; } +int __fio_fclose(struct __io_file *fp) +{ + if (mx_handle_close(fp->handle) != MX_OK) { + return -1; + } + + return 0; +} + int __fio_fdopen(mx_handle_t fd, const char *mode, struct __io_file *fp) { /* TODO validate handle and mode */