Skip to content

Commit 56fa338

Browse files
authored
Merge pull request #2599 from 3405691582/Prefix_SimplifyStrl
[CF] Implement strlcpy and strlcat once in Prefix.
2 parents f6f7257 + 0493362 commit 56fa338

File tree

1 file changed

+28
-53
lines changed

1 file changed

+28
-53
lines changed

CoreFoundation/Base.subproj/CoreFoundation_Prefix.h

Lines changed: 28 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,34 @@ static dispatch_queue_t __ ## PREFIX ## Queue(void) { \
119119
#define CF_RETAIN_BALANCED_ELSEWHERE(obj, identified_location) do { } while (0)
120120
#endif
121121

122+
#if (TARGET_OS_LINUX && !TARGET_OS_ANDROID && !TARGET_OS_CYGWIN) || TARGET_OS_WIN32
123+
CF_INLINE size_t
124+
strlcpy(char * dst, const char * src, size_t maxlen) {
125+
const size_t srclen = strlen(src);
126+
if (srclen < maxlen) {
127+
memcpy(dst, src, srclen+1);
128+
} else if (maxlen != 0) {
129+
memcpy(dst, src, maxlen-1);
130+
dst[maxlen-1] = '\0';
131+
}
132+
return srclen;
133+
}
134+
135+
CF_INLINE size_t
136+
strlcat(char * dst, const char * src, size_t maxlen) {
137+
const size_t srclen = strlen(src);
138+
const size_t dstlen = strnlen(dst, maxlen);
139+
if (dstlen == maxlen) return maxlen+srclen;
140+
if (srclen < maxlen-dstlen) {
141+
memcpy(dst+dstlen, src, srclen+1);
142+
} else {
143+
memcpy(dst+dstlen, src, maxlen-dstlen-1);
144+
dst[maxlen-1] = '\0';
145+
}
146+
return dstlen + srclen;
147+
}
148+
#endif
149+
122150
#if TARGET_OS_WIN32
123151
// Compatibility with boolean.h
124152
#if defined(__x86_64__)
@@ -171,33 +199,6 @@ void OSMemoryBarrier();
171199
typedef unsigned long fd_mask;
172200
#endif
173201

174-
#if !TARGET_OS_ANDROID && !TARGET_OS_CYGWIN && !TARGET_OS_BSD
175-
CF_INLINE size_t
176-
strlcpy(char * dst, const char * src, size_t maxlen) {
177-
const size_t srclen = strlen(src);
178-
if (srclen < maxlen) {
179-
memcpy(dst, src, srclen+1);
180-
} else if (maxlen != 0) {
181-
memcpy(dst, src, maxlen-1);
182-
dst[maxlen-1] = '\0';
183-
}
184-
return srclen;
185-
}
186-
187-
CF_INLINE size_t
188-
strlcat(char * dst, const char * src, size_t maxlen) {
189-
const size_t srclen = strlen(src);
190-
const size_t dstlen = strnlen(dst, maxlen);
191-
if (dstlen == maxlen) return maxlen+srclen;
192-
if (srclen < maxlen-dstlen) {
193-
memcpy(dst+dstlen, src, srclen+1);
194-
} else {
195-
memcpy(dst+dstlen, src, maxlen-dstlen-1);
196-
dst[maxlen-1] = '\0';
197-
}
198-
return dstlen + srclen;
199-
}
200-
#endif
201202

202203
#if !TARGET_OS_CYGWIN && !TARGET_OS_BSD
203204
#define issetugid() 0
@@ -355,32 +356,6 @@ CF_INLINE long long llabs(long long v) {
355356

356357
#define fprintf_l(a,locale,b,...) fprintf(a, b, __VA_ARGS__)
357358

358-
CF_INLINE size_t
359-
strlcpy(char * dst, const char * src, size_t maxlen) {
360-
const size_t srclen = strlen(src);
361-
if (srclen < maxlen) {
362-
memcpy(dst, src, srclen+1);
363-
} else if (maxlen != 0) {
364-
memcpy(dst, src, maxlen-1);
365-
dst[maxlen-1] = '\0';
366-
}
367-
return srclen;
368-
}
369-
370-
CF_INLINE size_t
371-
strlcat(char * dst, const char * src, size_t maxlen) {
372-
const size_t srclen = strlen(src);
373-
const size_t dstlen = strnlen(dst, maxlen);
374-
if (dstlen == maxlen) return maxlen+srclen;
375-
if (srclen < maxlen-dstlen) {
376-
memcpy(dst+dstlen, src, srclen+1);
377-
} else {
378-
memcpy(dst+dstlen, src, maxlen-dstlen-1);
379-
dst[maxlen-1] = '\0';
380-
}
381-
return dstlen + srclen;
382-
}
383-
384359
#define sleep(x) Sleep(1000*x)
385360

386361
#define issetugid() 0

0 commit comments

Comments
 (0)