libc.obj: add strtok_s
This commit is contained in:
@@ -89,6 +89,7 @@ strrev
|
|||||||
strspn
|
strspn
|
||||||
strstr
|
strstr
|
||||||
strtok
|
strtok
|
||||||
|
strtok_s
|
||||||
strxfrm
|
strxfrm
|
||||||
__errno
|
__errno
|
||||||
;____SYS____
|
;____SYS____
|
||||||
|
|||||||
@@ -32,6 +32,11 @@ DLLAPI char* strrchr(const char* s, int c);
|
|||||||
DLLAPI size_t strspn(const char* s1, const char* s2);
|
DLLAPI size_t strspn(const char* s1, const char* s2);
|
||||||
DLLAPI char* strstr(const char* s1, const char* s2);
|
DLLAPI char* strstr(const char* s1, const char* s2);
|
||||||
DLLAPI char* strtok(char* s1, const char* s2);
|
DLLAPI char* strtok(char* s1, const char* s2);
|
||||||
|
DLLAPI char* strtok_s(char* s1, const char* s2, char** saveptr);
|
||||||
|
#ifndef strtok_r
|
||||||
|
#define strtok_r strtok_s
|
||||||
|
#endif
|
||||||
|
|
||||||
DLLAPI char* strerror(int errnum);
|
DLLAPI char* strerror(int errnum);
|
||||||
DLLAPI size_t strlen(const char* s);
|
DLLAPI size_t strlen(const char* s);
|
||||||
DLLAPI char* strrev(char* str);
|
DLLAPI char* strrev(char* str);
|
||||||
|
|||||||
@@ -210,6 +210,7 @@ ksys_dll_t EXPORTS[] = {
|
|||||||
{ "strspn", &strspn },
|
{ "strspn", &strspn },
|
||||||
{ "strstr", &strstr },
|
{ "strstr", &strstr },
|
||||||
{ "strtok", &strtok },
|
{ "strtok", &strtok },
|
||||||
|
{ "strtok_s", &strtok_s},
|
||||||
{ "strxfrm", &strxfrm },
|
{ "strxfrm", &strxfrm },
|
||||||
{ "strpbrk", &strpbrk },
|
{ "strpbrk", &strpbrk },
|
||||||
{ "__errno", &__errno },
|
{ "__errno", &__errno },
|
||||||
|
|||||||
@@ -1,49 +1,8 @@
|
|||||||
/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
char* strtok(char* s, const char* delim)
|
char* strtok(char* s, const char* delim)
|
||||||
{
|
{
|
||||||
const char* spanp;
|
static char *saveptr;
|
||||||
int c, sc;
|
|
||||||
char* tok;
|
|
||||||
static char* last;
|
|
||||||
|
|
||||||
if (s == NULL && (s = last) == NULL)
|
return strtok_s(s, delim, &saveptr);
|
||||||
return (NULL);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Skip (span) leading delimiters (s += strspn(s, delim), sort of).
|
|
||||||
*/
|
|
||||||
cont:
|
|
||||||
c = *s++;
|
|
||||||
for (spanp = delim; (sc = *spanp++) != 0;) {
|
|
||||||
if (c == sc)
|
|
||||||
goto cont;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (c == 0) { /* no non-delimiter characters */
|
|
||||||
last = NULL;
|
|
||||||
return (NULL);
|
|
||||||
}
|
|
||||||
tok = s - 1;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Scan token (scan for delimiters: s += strcspn(s, delim), sort of).
|
|
||||||
* Note that delim must have one NUL; we stop if we see that, too.
|
|
||||||
*/
|
|
||||||
for (;;) {
|
|
||||||
c = *s++;
|
|
||||||
spanp = delim;
|
|
||||||
do {
|
|
||||||
if ((sc = *spanp++) == c) {
|
|
||||||
if (c == 0)
|
|
||||||
s = NULL;
|
|
||||||
else
|
|
||||||
s[-1] = 0;
|
|
||||||
last = s;
|
|
||||||
return (tok);
|
|
||||||
}
|
|
||||||
} while (sc != 0);
|
|
||||||
}
|
|
||||||
/* NOTREACHED */
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
char* strtok_s(char* s, const char* delim, char** saveptr)
|
||||||
|
{
|
||||||
|
const char* spanp;
|
||||||
|
int c, sc;
|
||||||
|
char* tok;
|
||||||
|
|
||||||
|
if (s == NULL && (s = *saveptr) == NULL)
|
||||||
|
return (NULL);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Skip (span) leading delimiters (s += strspn(s, delim), sort of).
|
||||||
|
*/
|
||||||
|
cont:
|
||||||
|
c = *s++;
|
||||||
|
for (spanp = delim; (sc = *spanp++) != 0;) {
|
||||||
|
if (c == sc)
|
||||||
|
goto cont;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c == 0) { /* no non-delimiter characters */
|
||||||
|
*saveptr = NULL;
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
tok = s - 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Scan token (scan for delimiters: s += strcspn(s, delim), sort of).
|
||||||
|
* Note that delim must have one NUL; we stop if we see that, too.
|
||||||
|
*/
|
||||||
|
for (;;) {
|
||||||
|
c = *s++;
|
||||||
|
spanp = delim;
|
||||||
|
do {
|
||||||
|
if ((sc = *spanp++) == c) {
|
||||||
|
if (c == 0)
|
||||||
|
s = NULL;
|
||||||
|
else
|
||||||
|
s[-1] = 0;
|
||||||
|
*saveptr = s;
|
||||||
|
return (tok);
|
||||||
|
}
|
||||||
|
} while (sc != 0);
|
||||||
|
}
|
||||||
|
/* NOTREACHED */
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user