Fix the definitions of strtok and strtok_r
authorcoderain <coderain@sdf.org>
Fri, 13 Oct 2017 19:28:33 +0000 (21:28 +0200)
committercoderain <coderain@sdf.org>
Fri, 13 Oct 2017 19:28:33 +0000 (21:28 +0200)
Makefile
crt/Makefile
crt/include/string.h
crt/src/string.c
kernel/src/drivers/fs/fat.c
kernel/src/drivers/fs/ram.c
kernel/src/filesystem.c
kernel/src/start.c

index 174130ce58486d74254d20cd1f41998c2a244c49..d93c871a56a00451996809f0fc51b330d71f2724 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-.PHONY: all clean kernel library manager tests
+.PHONY: all clean crt kernel library manager tests
 
 all: livecd.iso tests
 
index 15fa5e2c3e1eafd93399beb528edfd7e7e41df3c..1b99246d782ef08cb805eea5ae0c2aa7c0b67971 100644 (file)
@@ -30,7 +30,7 @@ OBJDIR = obj
 DEPDIR = dep
 
 # Flags
-CFLAGS = -Wall -Werror -ffreestanding -nostdlib -fPIC -I include
+CFLAGS = -Wall -Werror -ffreestanding -nostdlib -fPIC -I include -I ../sdk
 ASMFLAGS = -felf
 
 ifeq ($(DEBUG), yes)
index c5e76001d9417a7b7cbd62c309444dd7dc0cf296..9bc9057ee3ac8dc39c08431105b87aa0596362b2 100644 (file)
@@ -36,7 +36,8 @@ char *strrchr(const char *str, char c);
 char *strcat(char *destination, const char *source);
 char *strncat(char *destination, const char *source, size_t n);
 char *strdup(const char *source);
-char *strtok(char *str, const char *delimiters, char **endptr);
+char *strtok(char *str, const char *delimiters);
+char *strtok_r(char *str, const char *delimiters, char **endptr);
 size_t strlen(const char *str);
 void strrev(char *str);
 void memset(void *ptr, int value, size_t n);
index 796491d4ac04599c6eadf81a3d537de3d8c19679..176ae659e54019d480a6be6fb7745cdfd5c9e891 100644 (file)
@@ -142,7 +142,7 @@ char *strdup(const char *source)
     return destination;
 }
 
-char *strtok(char *str, const char *delimiters, char **endptr)
+char *strtok_r(char *str, const char *delimiters, char **endptr)
 {
     if (str == NULL) str = *endptr;
     char *start = str;
@@ -163,6 +163,12 @@ char *strtok(char *str, const char *delimiters, char **endptr)
     return start != str ? start : NULL;
 }
 
+char *strtok(char *str, const char *delimiters)
+{
+    static char *endptr;
+    return strtok_r(str, delimiters, &endptr);
+}
+
 size_t strlen(const char *str)
 {
     int ret = 0;
index 86c9fb9fec8c56fafe8ac6134d90eeb177074b0e..6c5ebba77cddb30cf0834bc2dc85b03b29ea33ea 100644 (file)
@@ -331,7 +331,7 @@ static dword_t fatfs_find_entry(fatfs_volume_t *volume, const char *path, dword_
     char *token, *endptr;
     strcpy(path_copy, path);
 
-    for (token = strtok(path_copy, PATH_DELIMITER_STRING, &endptr); token != NULL; token = strtok(NULL, PATH_DELIMITER_STRING, &endptr))
+    for (token = strtok_r(path_copy, PATH_DELIMITER_STRING, &endptr); token != NULL; token = strtok_r(NULL, PATH_DELIMITER_STRING, &endptr))
     {
         if (!(current_dirent.attributes & FATFS_ATTR_DIRECTORY))
         {
index 6cf6c4a5eb00d42eb522faf01f9a9ff8a6809b02..e886c82223d873d52aab915fd9820a55d1fde3d7 100644 (file)
@@ -57,9 +57,9 @@ static ramfs_node_t *ramfs_get_entry(ramfs_volume_t *volume, const char *path)
 
     ramfs_node_t *current = &volume->root;
 
-    for (token = strtok(path_copy, PATH_DELIMITER_STRING, &endptr);
+    for (token = strtok_r(path_copy, PATH_DELIMITER_STRING, &endptr);
          token != NULL;
-         token = strtok(NULL, PATH_DELIMITER_STRING, &endptr))
+         token = strtok_r(NULL, PATH_DELIMITER_STRING, &endptr))
     {
         if (*token == '\0' || !(current->attributes & FILE_ATTR_DIRECTORY)) return NULL;
 
index 6efffa0cf6b9d398df4bd13cb9150be709e33dae..c1cc4906e16187b118e185a08f03ea4be6a3a3be 100644 (file)
@@ -228,9 +228,9 @@ dword_t normalize_path(const char *path, char *normalized_path)
     char *token;
     *normalized_path = '\0';
 
-    for (token = strtok(path_copy, PATH_DELIMITER_STRING, &endptr);
+    for (token = strtok_r(path_copy, PATH_DELIMITER_STRING, &endptr);
          token != NULL;
-         token = strtok(NULL, PATH_DELIMITER_STRING, &endptr))
+         token = strtok_r(NULL, PATH_DELIMITER_STRING, &endptr))
     {
         if (strcmp(token, ".") == 0) continue;
         if (strcmp(token, "..") == 0)
index afe24fda1ed9405595ceb83724a71e11264f3f7d..93b367191ff34c792e1e93d40e5a28429c882ac5 100644 (file)
@@ -80,7 +80,6 @@ void kernel_main(multiboot_header_t *mboot, dword_t stack)
     const char *manager_path = "";
     char cmdline[MAX_CMDLINE_LENGTH] = { '\0' };
     void *cmdline_phys = (void*)mboot->cmdline;
-    char *endptr;
 
     cpu_init();
     segments_init();
@@ -112,7 +111,7 @@ void kernel_main(multiboot_header_t *mboot, dword_t stack)
     set_text_color(TEXT_COLOR_RED | TEXT_COLOR_GREEN | TEXT_COLOR_BLUE);
 
     char *token;
-    for (token = strtok(cmdline, " ", &endptr); token != NULL; token = strtok(NULL, " ", &endptr))
+    for (token = strtok(cmdline, " "); token != NULL; token = strtok(NULL, " "))
     {
         char *separator = strchr(token, ':');
         if (separator == NULL) continue;