Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 : /* This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this
5 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #ifndef nsCRTGlue_h__
8 : #define nsCRTGlue_h__
9 :
10 : #include "nscore.h"
11 :
12 : /**
13 : * Scan a string for the first character that is *not* in a set of
14 : * delimiters. If the string is only delimiter characters, the end of the
15 : * string is returned.
16 : *
17 : * @param aDelims The set of delimiters (null-terminated)
18 : * @param aStr The string to search (null-terminated)
19 : */
20 : const char* NS_strspnp(const char* aDelims, const char* aStr);
21 :
22 : /**
23 : * Tokenize a string. This function is similar to the strtok function in the
24 : * C standard library, but it does not use static variables to maintain state
25 : * and is therefore thread and reentrancy-safe.
26 : *
27 : * Any leading delimiters in str are skipped. Then the string is scanned
28 : * until an additional delimiter or end-of-string is found. The final
29 : * delimiter is set to '\0'.
30 : *
31 : * @param aDelims The set of delimiters.
32 : * @param aStr The string to search. This is an in-out parameter; it is
33 : * reset to the end of the found token + 1, or to the
34 : * end-of-string if there are no more tokens.
35 : * @return The token. If no token is found (the string is only
36 : * delimiter characters), nullptr is returned.
37 : */
38 : char* NS_strtok(const char* aDelims, char** aStr);
39 :
40 : /**
41 : * "strlen" for char16_t strings
42 : */
43 : uint32_t NS_strlen(const char16_t* aString);
44 :
45 : /**
46 : * "strcmp" for char16_t strings
47 : */
48 : int NS_strcmp(const char16_t* aStrA, const char16_t* aStrB);
49 :
50 : /**
51 : * "strncmp" for char16_t strings
52 : */
53 : int NS_strncmp(const char16_t* aStrA, const char16_t* aStrB, size_t aLen);
54 :
55 : /**
56 : * "strdup" for char16_t strings, uses the NS_Alloc allocator.
57 : */
58 : char16_t* NS_strdup(const char16_t* aString);
59 :
60 : /**
61 : * "strdup", but using the NS_Alloc allocator.
62 : */
63 : char* NS_strdup(const char* aString);
64 :
65 : /**
66 : * strndup for char16_t or char strings (normal strndup is not available on
67 : * windows). This function will ensure that the new string is
68 : * null-terminated. Uses the NS_Alloc allocator.
69 : *
70 : * CharT may be either char16_t or char.
71 : */
72 : template<typename CharT>
73 : CharT* NS_strndup(const CharT* aString, uint32_t aLen);
74 :
75 : // The following case-conversion methods only deal in the ascii repertoire
76 : // A-Z and a-z
77 :
78 : // semi-private data declarations... don't use these directly.
79 : class nsLowerUpperUtils
80 : {
81 : public:
82 : static const unsigned char kLower2Upper[256];
83 : static const unsigned char kUpper2Lower[256];
84 : };
85 :
86 : inline char
87 4 : NS_ToUpper(char aChar)
88 : {
89 4 : return (char)nsLowerUpperUtils::kLower2Upper[(unsigned char)aChar];
90 : }
91 :
92 : inline char
93 10663 : NS_ToLower(char aChar)
94 : {
95 10663 : return (char)nsLowerUpperUtils::kUpper2Lower[(unsigned char)aChar];
96 : }
97 :
98 : bool NS_IsUpper(char aChar);
99 : bool NS_IsLower(char aChar);
100 :
101 : bool NS_IsAscii(char16_t aChar);
102 : bool NS_IsAscii(const char16_t* aString);
103 : bool NS_IsAsciiAlpha(char16_t aChar);
104 : bool NS_IsAsciiDigit(char16_t aChar);
105 : bool NS_IsAsciiWhitespace(char16_t aChar);
106 : bool NS_IsAscii(const char* aString);
107 : bool NS_IsAscii(const char* aString, uint32_t aLength);
108 :
109 : #ifndef XPCOM_GLUE_AVOID_NSPR
110 : void NS_MakeRandomString(char* aBuf, int32_t aBufLen);
111 : #endif
112 :
113 : #define FF '\f'
114 : #define TAB '\t'
115 :
116 : #define CRSTR "\015"
117 : #define LFSTR "\012"
118 : #define CRLF "\015\012" /* A CR LF equivalent string */
119 :
120 : // We use the most restrictive filesystem as our default set of illegal filename
121 : // characters. This is currently Windows.
122 : #define OS_FILE_ILLEGAL_CHARACTERS "/:*?\"<>|"
123 : // We also provide a list of all known file path separators for all filesystems.
124 : // This can be used in replacement of FILE_PATH_SEPARATOR when you need to
125 : // identify or replace all known path separators.
126 : #define KNOWN_PATH_SEPARATORS "\\/"
127 :
128 : #if defined(XP_MACOSX)
129 : #define FILE_PATH_SEPARATOR "/"
130 : #elif defined(XP_WIN)
131 : #define FILE_PATH_SEPARATOR "\\"
132 : #elif defined(XP_UNIX)
133 : #define FILE_PATH_SEPARATOR "/"
134 : #else
135 : #error need_to_define_your_file_path_separator_and_maybe_illegal_characters
136 : #endif
137 :
138 : // Not all these control characters are illegal in all OSs, but we don't really
139 : // want them appearing in filenames
140 : #define CONTROL_CHARACTERS "\001\002\003\004\005\006\007" \
141 : "\010\011\012\013\014\015\016\017" \
142 : "\020\021\022\023\024\025\026\027" \
143 : "\030\031\032\033\034\035\036\037"
144 :
145 : #define FILE_ILLEGAL_CHARACTERS CONTROL_CHARACTERS OS_FILE_ILLEGAL_CHARACTERS
146 :
147 : #endif // nsCRTGlue_h__
|