From a39eff553c95eb6c47c1b64221429e21164d50da Mon Sep 17 00:00:00 2001 From: kanjitalk755 Date: Wed, 21 Apr 2021 21:29:05 +0900 Subject: [PATCH] changed implementation of "name_encoding" --- .../BasiliskII.xcodeproj/project.pbxproj | 4 +-- BasiliskII/src/MacOSX/extfs_macosx.cpp | 35 ++++++++----------- BasiliskII/src/prefs_items.cpp | 2 +- .../project.pbxproj | 2 -- SheepShaver/src/prefs_items.cpp | 2 +- 5 files changed, 18 insertions(+), 27 deletions(-) diff --git a/BasiliskII/src/MacOSX/BasiliskII.xcodeproj/project.pbxproj b/BasiliskII/src/MacOSX/BasiliskII.xcodeproj/project.pbxproj index 30203e55..15918213 100644 --- a/BasiliskII/src/MacOSX/BasiliskII.xcodeproj/project.pbxproj +++ b/BasiliskII/src/MacOSX/BasiliskII.xcodeproj/project.pbxproj @@ -1077,6 +1077,7 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES; CLANG_WARN_SUSPICIOUS_MOVE = NO; CLANG_WARN__DUPLICATE_METHOD_MATCH = NO; + CODE_SIGN_IDENTITY = ""; COMBINE_HIDPI_IMAGES = NO; ENABLE_NS_ASSERTIONS = YES; ENABLE_TESTABILITY = NO; @@ -1118,7 +1119,6 @@ "-Wl,-no_pie", "-pagezero_size", 0x1000, - "-liconv", ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; PRODUCT_BUNDLE_IDENTIFIER = net.cebix.basilisk; @@ -1141,6 +1141,7 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES; CLANG_WARN_SUSPICIOUS_MOVE = NO; CLANG_WARN__DUPLICATE_METHOD_MATCH = NO; + CODE_SIGN_IDENTITY = ""; COMBINE_HIDPI_IMAGES = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_NS_ASSERTIONS = YES; @@ -1183,7 +1184,6 @@ "-Wl,-no_pie", "-pagezero_size", 0x1000, - "-liconv", ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; PRODUCT_BUNDLE_IDENTIFIER = net.cebix.basilisk; diff --git a/BasiliskII/src/MacOSX/extfs_macosx.cpp b/BasiliskII/src/MacOSX/extfs_macosx.cpp index 66fdc92b..0521c07f 100644 --- a/BasiliskII/src/MacOSX/extfs_macosx.cpp +++ b/BasiliskII/src/MacOSX/extfs_macosx.cpp @@ -27,8 +27,6 @@ #include #include #include -#include -#include #include "sysdeps.h" #include "prefs.h" @@ -611,33 +609,28 @@ bool extfs_rename(const char *old_path, const char *new_path) */ // Convert string in the specified source and target encodings -const char *convert_string(const char *str, bool dir) +const char *convert_string(const char *str, CFStringEncoding from, CFStringEncoding to) { - const char *s = PrefsFindString("name_encoding", 0); - if (s == NULL) s = "MACROMAN"; - char encoding[strlen(s) + 1]; - char *ip = (char *)s, *op = encoding; - while (*ip) *op++ = toupper(*ip++); - *op = 0; - static char ostr[MAX_PATH_LENGTH]; - size_t isize = strlen(str), osize = MAX_PATH_LENGTH; - ip = (char *)str; - op = ostr; - iconv_t ic = dir ? iconv_open(encoding, "UTF-8") : iconv_open("UTF-8", encoding); - iconv(ic, &ip, &isize, &op, &osize); - iconv_close(ic); - *op = 0; + const char *ostr = str; + CFStringRef cfstr = CFStringCreateWithCString(NULL, str, from); + if (cfstr) { + static char buffer[MAX_PATH_LENGTH]; + memset(buffer, 0, sizeof(buffer)); + if (CFStringGetCString(cfstr, buffer, sizeof(buffer), to)) + ostr = buffer; + CFRelease(cfstr); + } return ostr; } -// Convert from the host to the guest +// Convert from the host OS filename encoding to MacRoman const char *host_encoding_to_macroman(const char *filename) { - return convert_string(filename, true); + return convert_string(filename, kCFStringEncodingUTF8, PrefsFindInt32("name_encoding")); } -// Convert from guest to the host +// Convert from MacRoman to host OS filename encoding const char *macroman_to_host_encoding(const char *filename) { - return convert_string(filename, false); + return convert_string(filename, PrefsFindInt32("name_encoding"), kCFStringEncodingUTF8); } diff --git a/BasiliskII/src/prefs_items.cpp b/BasiliskII/src/prefs_items.cpp index 75ed3ffc..33f3254a 100644 --- a/BasiliskII/src/prefs_items.cpp +++ b/BasiliskII/src/prefs_items.cpp @@ -84,7 +84,7 @@ prefs_desc common_prefs_items[] = { {"host_domain", TYPE_STRING, true, "handle DNS requests for this domain on the host (slirp only)"}, {"title", TYPE_STRING, false, "window title"}, {"sound_buffer", TYPE_INT32, false, "sound buffer length"}, - {"name_encoding", TYPE_STRING, false, "file name encoding"}, + {"name_encoding", TYPE_INT32, false, "file name encoding"}, {NULL, TYPE_END, false, NULL} // End of list }; diff --git a/SheepShaver/src/MacOSX/SheepShaver_Xcode8.xcodeproj/project.pbxproj b/SheepShaver/src/MacOSX/SheepShaver_Xcode8.xcodeproj/project.pbxproj index bf81f139..8002534c 100755 --- a/SheepShaver/src/MacOSX/SheepShaver_Xcode8.xcodeproj/project.pbxproj +++ b/SheepShaver/src/MacOSX/SheepShaver_Xcode8.xcodeproj/project.pbxproj @@ -1332,7 +1332,6 @@ "-pagezero_size", 0x3000, "-lkpx_cpu", - "-liconv", ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; PRODUCT_BUNDLE_IDENTIFIER = net.cebix.sheepshaver; @@ -1399,7 +1398,6 @@ "-pagezero_size", 0x3000, "-lkpx_cpu", - "-liconv", ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; PRODUCT_BUNDLE_IDENTIFIER = net.cebix.sheepshaver; diff --git a/SheepShaver/src/prefs_items.cpp b/SheepShaver/src/prefs_items.cpp index 1ff62630..b5ea6763 100644 --- a/SheepShaver/src/prefs_items.cpp +++ b/SheepShaver/src/prefs_items.cpp @@ -72,7 +72,7 @@ prefs_desc common_prefs_items[] = { {"redir", TYPE_STRING, true, "port forwarding for slirp"}, {"title", TYPE_STRING, false, "window title"}, {"sound_buffer", TYPE_INT32, false, "sound buffer length"}, - {"name_encoding", TYPE_STRING, false, "file name encoding"}, + {"name_encoding", TYPE_INT32, false, "file name encoding"}, {NULL, TYPE_END, false, NULL} // End of list };