forked from chakra-core/ChakraCore
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstringtls.cpp
More file actions
79 lines (54 loc) · 1.84 KB
/
stringtls.cpp
File metadata and controls
79 lines (54 loc) · 1.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
/*++
Module Name:
stringtls.cpp
Abstract:
Implementation of the string functions in the C runtime library that
are Windows specific and depend on per-thread data
--*/
#include "pal/thread.hpp"
#include "pal/dbgmsg.h"
#include <string.h>
#include <ctype.h>
#include <pthread.h>
#include <limits.h>
#include <unistd.h>
using namespace CorUnix;
SET_DEFAULT_DEBUG_CHANNEL(CRT);
/*++
Function:
PAL_strtok
Finds the next token in a string.
Return value:
A pointer to the next token found in strToken. Returns NULL when no more
tokens are found. Each call modifies strToken by substituting a NULL
character for each delimiter that is encountered.
Parameters:
strToken String cotaining token(s)
strDelimit Set of delimiter characters
Remarks:
In FreeBSD, strtok is not re-entrant, strtok_r is. It manages re-entrancy
by using a passed-in context pointer (which will be stored in thread local
storage) According to the strtok MSDN documentation, "Calling these functions
simultaneously from multiple threads does not have undesirable effects", so
we need to use strtok_r.
--*/
char *
__cdecl
PAL_strtok(char *strToken, const char *strDelimit)
{
CPalThread *pThread = NULL;
char *retval=NULL;
PERF_ENTRY(strtok);
ENTRY("strtok (strToken=%p (%s), strDelimit=%p (%s))\n",
strToken?strToken:"NULL",
strToken?strToken:"NULL", strDelimit?strDelimit:"NULL", strDelimit?strDelimit:"NULL");
pThread = InternalGetCurrentThread();
retval = strtok_r(strToken, strDelimit, &pThread->crtInfo.strtokContext);
LOGEXIT("strtok returns %p (%s)\n", retval?retval:"NULL", retval?retval:"NULL");
PERF_EXIT(strtok);
return retval;
}