changed implementation of "name_encoding"

This commit is contained in:
kanjitalk755 2021-04-21 21:29:05 +09:00
parent e750aecafe
commit a39eff553c
5 changed files with 18 additions and 27 deletions

View File

@ -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;

View File

@ -27,8 +27,6 @@
#include <unistd.h>
#include <dirent.h>
#include <errno.h>
#include <ctype.h>
#include <iconv.h>
#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);
}

View File

@ -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
};

View File

@ -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;

View File

@ -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
};