From 6bfac1d24db98d1d46e0714f3177deb15c7f4a69 Mon Sep 17 00:00:00 2001 From: carl Date: Sun, 17 Mar 2019 22:23:56 +0800 Subject: [PATCH] + Add sys_tmpnam() and sys_basename() --- modules/src/system/basename.c | 57 +++++++++++++++++++++++++++++++++++ modules/src/system/build.lua | 2 +- modules/src/system/system.h | 15 +++++++++ 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 modules/src/system/basename.c diff --git a/modules/src/system/basename.c b/modules/src/system/basename.c new file mode 100644 index 000000000..21736bbce --- /dev/null +++ b/modules/src/system/basename.c @@ -0,0 +1,57 @@ +/* Copyright (c) 2019. See the file License in + * the root directory for more information. + * + * Contains path related utilities. + */ +#include + + +void sys_basename(char *str, register char *dst) +{ + register char *p1 = str; + register char *p2 = p1; + register char *end; + register char *start; + + int len = strlen(str); + /* Point to the end of the string. */ + p1 = p1 + len - 1; + end = p1; + + while ((*p1 == '/') || (*p1 == '\\')) + { + if (p1 == str) + { + dst[0] = *p1; + dst[1] = '\0'; + return; + } + p1--; + } + /* Only a volume specification */ + if (*p1 == ':') + { + strcpy(dst,str); + return; + } + /* Do a reverse search. */ + p2 = p1; + len = 0; + while (p2 != str) + { + if ((*p1 == '/') || (*p1 == '\\') || (*p1 == ':')) + { + strncpy(dst,p2,len); + dst[len] = '\0'; + return; + } + p2 = p1; + len++; + p1--; + } + /* Only a pathname */ + strcpy(dst,str); +} + + + diff --git a/modules/src/system/build.lua b/modules/src/system/build.lua index b97130d98..b409f697d 100644 --- a/modules/src/system/build.lua +++ b/modules/src/system/build.lua @@ -2,7 +2,7 @@ clibrary { name = "lib", srcs = { "./access.c", "./break.c", "./chmode.c", "./close.c", - "./create.c", "./filesize.c", + "./create.c", "./filesize.c","./basename.c","./tmpnam.c", --"./lock.c", "./modtime.c", "./open.c", "./read.c", "./remove.c", "./rename.c", "./seek.c", "./stop.c", "./system.c", diff --git a/modules/src/system/system.h b/modules/src/system/system.h index 6d394d0da..598ceb03f 100644 --- a/modules/src/system/system.h +++ b/modules/src/system/system.h @@ -67,4 +67,19 @@ time_t sys_modtime(char *); /* return value for sys_break */ #define ILL_BREAK ((char *)0) + +/* Extract the base name from a full path specification + * in "str" and returns it in "dst". + * + * "dst" should be large enough to receive the copied + * data. + * + * Supports both DOS and UNIX style paths. + * */ +void sys_basename(const char *str, register char *dst); + +/* Creates a temporary filename. This has + * the same semantics as ISO C90 tmpnam() */ +char* sys_tmpnam(char *buffer); + #endif /* __SYSTEM_INCLUDED__ */ -- 2.34.1