macOS: prefs item "name_encoding"

This commit is contained in:
kanjitalk755 2021-04-16 10:54:04 +09:00
parent 72989fffe2
commit e750aecafe
5 changed files with 27 additions and 14 deletions

View File

@ -1118,6 +1118,7 @@
"-Wl,-no_pie", "-Wl,-no_pie",
"-pagezero_size", "-pagezero_size",
0x1000, 0x1000,
"-liconv",
); );
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
PRODUCT_BUNDLE_IDENTIFIER = net.cebix.basilisk; PRODUCT_BUNDLE_IDENTIFIER = net.cebix.basilisk;
@ -1182,6 +1183,7 @@
"-Wl,-no_pie", "-Wl,-no_pie",
"-pagezero_size", "-pagezero_size",
0x1000, 0x1000,
"-liconv",
); );
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
PRODUCT_BUNDLE_IDENTIFIER = net.cebix.basilisk; PRODUCT_BUNDLE_IDENTIFIER = net.cebix.basilisk;

View File

@ -27,6 +27,8 @@
#include <unistd.h> #include <unistd.h>
#include <dirent.h> #include <dirent.h>
#include <errno.h> #include <errno.h>
#include <ctype.h>
#include <iconv.h>
#include "sysdeps.h" #include "sysdeps.h"
#include "prefs.h" #include "prefs.h"
@ -609,28 +611,33 @@ bool extfs_rename(const char *old_path, const char *new_path)
*/ */
// Convert string in the specified source and target encodings // Convert string in the specified source and target encodings
const char *convert_string(const char *str, CFStringEncoding from, CFStringEncoding to) const char *convert_string(const char *str, bool dir)
{ {
const char *ostr = str; const char *s = PrefsFindString("name_encoding", 0);
CFStringRef cfstr = CFStringCreateWithCString(NULL, str, from); if (s == NULL) s = "MACROMAN";
if (cfstr) { char encoding[strlen(s) + 1];
static char buffer[MAX_PATH_LENGTH]; char *ip = (char *)s, *op = encoding;
memset(buffer, 0, sizeof(buffer)); while (*ip) *op++ = toupper(*ip++);
if (CFStringGetCString(cfstr, buffer, sizeof(buffer), to)) *op = 0;
ostr = buffer; static char ostr[MAX_PATH_LENGTH];
CFRelease(cfstr); 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;
return ostr; return ostr;
} }
// Convert from the host OS filename encoding to MacRoman // Convert from the host to the guest
const char *host_encoding_to_macroman(const char *filename) const char *host_encoding_to_macroman(const char *filename)
{ {
return convert_string(filename, kCFStringEncodingUTF8, kCFStringEncodingMacRoman); return convert_string(filename, true);
} }
// Convert from MacRoman to host OS filename encoding // Convert from guest to the host
const char *macroman_to_host_encoding(const char *filename) const char *macroman_to_host_encoding(const char *filename)
{ {
return convert_string(filename, kCFStringEncodingMacRoman, kCFStringEncodingUTF8); return convert_string(filename, false);
} }

View File

@ -84,6 +84,7 @@ prefs_desc common_prefs_items[] = {
{"host_domain", TYPE_STRING, true, "handle DNS requests for this domain on the host (slirp only)"}, {"host_domain", TYPE_STRING, true, "handle DNS requests for this domain on the host (slirp only)"},
{"title", TYPE_STRING, false, "window title"}, {"title", TYPE_STRING, false, "window title"},
{"sound_buffer", TYPE_INT32, false, "sound buffer length"}, {"sound_buffer", TYPE_INT32, false, "sound buffer length"},
{"name_encoding", TYPE_STRING, false, "file name encoding"},
{NULL, TYPE_END, false, NULL} // End of list {NULL, TYPE_END, false, NULL} // End of list
}; };

View File

@ -1332,6 +1332,7 @@
"-pagezero_size", "-pagezero_size",
0x3000, 0x3000,
"-lkpx_cpu", "-lkpx_cpu",
"-liconv",
); );
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
PRODUCT_BUNDLE_IDENTIFIER = net.cebix.sheepshaver; PRODUCT_BUNDLE_IDENTIFIER = net.cebix.sheepshaver;
@ -1398,6 +1399,7 @@
"-pagezero_size", "-pagezero_size",
0x3000, 0x3000,
"-lkpx_cpu", "-lkpx_cpu",
"-liconv",
); );
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
PRODUCT_BUNDLE_IDENTIFIER = net.cebix.sheepshaver; PRODUCT_BUNDLE_IDENTIFIER = net.cebix.sheepshaver;

View File

@ -72,6 +72,7 @@ prefs_desc common_prefs_items[] = {
{"redir", TYPE_STRING, true, "port forwarding for slirp"}, {"redir", TYPE_STRING, true, "port forwarding for slirp"},
{"title", TYPE_STRING, false, "window title"}, {"title", TYPE_STRING, false, "window title"},
{"sound_buffer", TYPE_INT32, false, "sound buffer length"}, {"sound_buffer", TYPE_INT32, false, "sound buffer length"},
{"name_encoding", TYPE_STRING, false, "file name encoding"},
{NULL, TYPE_END, false, NULL} // End of list {NULL, TYPE_END, false, NULL} // End of list
}; };