summaryrefslogtreecommitdiff
path: root/file.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <[email protected]>2024-09-26 18:17:13 +0900
committerNobuyoshi Nakada <[email protected]>2024-09-26 18:17:13 +0900
commit2a65f4c90713c3738993aba34b03eeed02ac7a87 ()
treed278e34e0cb5ffacb14457bc9cfbab8a377744c0 /file.c
parent71b253cdf377acf04fb8bd98221f48d7087946de (diff)
Extract `mutable_CFString_new`
From duplicate code in `rb_CFString_class_initialize_before_fork` and `rb_str_append_normalized_ospath`.
Notes: Merged: https://.com/ruby/ruby/pull/11695
-rw-r--r--file.c34
1 files changed, 18 insertions, 16 deletions
@@ -271,6 +271,18 @@ rb_str_encode_ospath(VALUE path)
# define NORMALIZE_UTF8PATH 1
# ifdef HAVE_WORKING_FORK
static void
rb_CFString_class_initialize_before_fork(void)
{
@@ -297,15 +309,9 @@ rb_CFString_class_initialize_before_fork(void)
/* Enough small but non-empty ASCII string to fit in NSTaggedPointerString. */
const char small_str[] = "/";
long len = sizeof(small_str) - 1;
-
- const CFAllocatorRef alloc = kCFAllocatorDefault;
- CFStringRef s = CFStringCreateWithBytesNoCopy(alloc,
- (const UInt8 *)small_str,
- len, kCFStringEncodingUTF8,
- FALSE, kCFAllocatorNull);
- CFMutableStringRef m = CFStringCreateMutableCopy(alloc, len, s);
- CFRelease(m);
- CFRelease(s);
}
# endif /* HAVE_WORKING_FORK */
@@ -314,11 +320,8 @@ rb_str_append_normalized_ospath(VALUE str, const char *ptr, long len)
{
CFIndex buflen = 0;
CFRange all;
- CFStringRef s = CFStringCreateWithBytesNoCopy(kCFAllocatorDefault,
- (const UInt8 *)ptr, len,
- kCFStringEncodingUTF8, FALSE,
- kCFAllocatorNull);
- CFMutableStringRef m = CFStringCreateMutableCopy(kCFAllocatorDefault, len, s);
long oldlen = RSTRING_LEN(str);
CFStringNormalize(m, kCFStringNormalizationFormC);
@@ -328,8 +331,7 @@ rb_str_append_normalized_ospath(VALUE str, const char *ptr, long len)
CFStringGetBytes(m, all, kCFStringEncodingUTF8, '?', FALSE,
(UInt8 *)(RSTRING_PTR(str) + oldlen), buflen, &buflen);
rb_str_set_len(str, oldlen + buflen);
- CFRelease(m);
- CFRelease(s);
return str;
}