Last active
December 18, 2015 18:18
-
-
Save clemensg/5824307 to your computer and use it in GitHub Desktop.
Should fix a unicode bug in subversion (1.8.0) on Mac OSX. Caveat emptor!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- subversion/libsvn_subr/path.c~ 2013-06-20 17:58:25.000000000 +0200 | |
+++ subversion/libsvn_subr/path.c 2013-06-20 18:23:06.000000000 +0200 | |
@@ -40,6 +40,9 @@ | |
#include "dirent_uri.h" | |
+#if defined(DARWIN) | |
+#include <CoreFoundation/CoreFoundation.h> | |
+#endif /* DARWIN */ | |
/* The canonical empty path. Can this be changed? Well, change the empty | |
test below and the path library will work, not so sure about the fs/wc | |
@@ -1148,19 +1151,48 @@ | |
const char *path_apr, | |
apr_pool_t *pool) | |
{ | |
-#if !defined(WIN32) && !defined(DARWIN) | |
+ svn_error_t *err; | |
+#if !defined(WIN32) | |
svn_boolean_t path_is_utf8; | |
+#endif | |
+#if defined(DARWIN) | |
+ /* | |
+ Compose decomposed unicode characters out of precomposed ones. | |
+ This will solve the problem that the 'svn status' command sometimes | |
+ cannot recognize a file if it contains composed characters, like | |
+ Umlaut in some European languages | |
+ */ | |
+ CFMutableStringRef cfmsr = CFStringCreateMutable(NULL, 0); | |
+ CFStringAppendCString(cfmsr, path_apr, kCFStringEncodingUTF8); | |
+ CFStringNormalize(cfmsr, kCFStringNormalizationFormC); | |
+ CFIndex path_buff_size = 1 + CFStringGetMaximumSizeForEncoding( | |
+ CFStringGetLength(cfmsr), kCFStringEncodingUTF8); | |
+ char *path = apr_palloc(pool, path_buff_size); | |
+ CFStringGetCString(cfmsr, path, path_buff_size, kCFStringEncodingUTF8); | |
+#endif | |
+#if !defined(WIN32) | |
SVN_ERR(get_path_encoding(&path_is_utf8, pool)); | |
if (path_is_utf8) | |
#endif | |
{ | |
+#if defined(DARWIN) | |
+ *path_utf8 = apr_pstrdup(pool, path); | |
+#else | |
*path_utf8 = apr_pstrdup(pool, path_apr); | |
- return SVN_NO_ERROR; | |
+#endif | |
+ err = SVN_NO_ERROR; | |
} | |
-#if !defined(WIN32) && !defined(DARWIN) | |
- else | |
- return svn_utf_cstring_to_utf8(path_utf8, path_apr, pool); | |
+#if !defined(WIN32) | |
+ else { | |
+#if defined(DARWIN) | |
+ err = svn_utf_cstring_to_utf8(path_utf8, path_apr, pool); | |
+ CFRelease(cfmsr); | |
+#else | |
+ err = svn_utf_cstring_to_utf8(path_utf8, path_apr, pool); | |
+#endif | |
+ } | |
#endif | |
+ return err; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Please tell me if it works and I'll create a pull request for Homebrew.