diff options
Diffstat (limited to 'src/fileio.c')
-rw-r--r-- | src/fileio.c | 78 |
1 files changed, 13 insertions, 65 deletions
diff --git a/src/fileio.c b/src/fileio.c index 02e5ad1e1..d1c11a046 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -1498,40 +1498,14 @@ retry: # ifdef MACOS_X if (fio_flags & FIO_MACROMAN) { + extern int macroman2enc __ARGS((char_u *ptr, long *sizep, long + real_size)); /* * Conversion from Apple MacRoman char encoding to UTF-8 or - * latin1, using standard Carbon framework. + * latin1. This is in os_mac_conv.c. */ - CFStringRef cfstr; - CFRange r; - CFIndex len = size; - - /* MacRoman is an 8-bit encoding, no need to move bytes to - * conv_rest[]. */ - cfstr = CFStringCreateWithBytes(NULL, ptr, len, - kCFStringEncodingMacRoman, 0); - /* - * If there is a conversion error, try using another - * conversion. - */ - if (cfstr == NULL) + if (macroman2enc(ptr, &size, real_size) == FAIL) goto rewind_retry; - - r.location = 0; - r.length = CFStringGetLength(cfstr); - if (r.length != CFStringGetBytes(cfstr, r, - (enc_utf8) ? kCFStringEncodingUTF8 - : kCFStringEncodingISOLatin1, - 0, /* no lossy conversion */ - 0, /* not external representation */ - ptr + size, real_size - size, &len)) - { - CFRelease(cfstr); - goto rewind_retry; - } - CFRelease(cfstr); - mch_memmove(ptr, ptr + size, len); - size = len; } else # endif @@ -2744,7 +2718,7 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit, if (!(did_cmd = apply_autocmds_exarg(EVENT_FILEAPPENDCMD, sfname, sfname, FALSE, curbuf, eap))) { - if (bt_nofile(curbuf)) + if (overwriting && bt_nofile(curbuf)) nofile_err = TRUE; else apply_autocmds_exarg(EVENT_FILEAPPENDPRE, @@ -4789,11 +4763,11 @@ buf_write_bytes(ip) /* * Convert UTF-8 or latin1 to Apple MacRoman. */ - CFStringRef cfstr; - CFRange r; - CFIndex l; char_u *from; size_t fromlen; + extern int enc2macroman __ARGS((char_u *from, size_t fromlen, + char_u *to, int *tolenp, int maxtolen, char_u *rest, + int *restlenp)); if (ip->bw_restlen > 0) { @@ -4811,41 +4785,14 @@ buf_write_bytes(ip) fromlen = len; } - ip->bw_restlen = 0; - cfstr = CFStringCreateWithBytes(NULL, from, fromlen, - (enc_utf8) ? - kCFStringEncodingUTF8 : kCFStringEncodingISOLatin1, - 0); - while (cfstr == NULL && ip->bw_restlen < 3 && fromlen > 1) + if (enc2macroman(from, fromlen, + ip->bw_conv_buf, &len, ip->bw_conv_buflen, + ip->bw_rest, &ip->bw_restlen) == FAIL) { - ip->bw_rest[ip->bw_restlen++] = from[--fromlen]; - cfstr = CFStringCreateWithBytes(NULL, from, fromlen, - (enc_utf8) ? - kCFStringEncodingUTF8 : kCFStringEncodingISOLatin1, - 0); - } - if (cfstr == NULL) - { - ip->bw_conv_error = TRUE; - return FAIL; - } - - r.location = 0; - r.length = CFStringGetLength(cfstr); - if (r.length != CFStringGetBytes(cfstr, r, - kCFStringEncodingMacRoman, - 0, /* no lossy conversion */ - 0, /* not external representation (since vim - * handles this internally */ - ip->bw_conv_buf, ip->bw_conv_buflen, &l)) - { - CFRelease(cfstr); ip->bw_conv_error = TRUE; return FAIL; } - CFRelease(cfstr); buf = ip->bw_conv_buf; - len = l; } # endif @@ -6696,7 +6643,8 @@ static AutoPat *first_autopat[NUM_EVENTS] = NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; /* |