/*
- * $Id: mangle.c,v 1.19.4.2 2010-02-01 14:25:45 franklahm Exp $
- *
* Copyright (c) 2002. Joe Marcus Clarke (marcus@marcuscom.com)
* All Rights Reserved. See COPYRIGHT.
*
char *p = strrchr(uname, '.');
if (p && p != uname) {
- u_int16_t flags = CONV_FORCE | CONV_UNESCAPEHEX;
+ uint16_t flags = CONV_FORCE | CONV_UNESCAPEHEX;
size_t len = convert_charset(vol->v_volcharset, charset,
vol->v_maccharset, p, strlen(p),
extension, MAX_EXT_LENGTH, &flags);
static char *demangle_checks(const struct vol *vol, char* uname, char * mfilename, size_t prefix, char * ext)
{
- u_int16_t flags;
+ uint16_t flags;
static char buffer[MAXPATHLEN +2]; /* for convert_charset dest_len parameter +2 */
size_t len;
size_t mfilenamelen;
{
char *t;
char *u_name;
- u_int32_t id, file_id;
+ uint32_t id, file_id;
static char buffer[12 + MAXPATHLEN + 1];
int len = 12 + MAXPATHLEN + 1;
struct dir *dir;
return private_demangle(vol, mfilename, did, fileid);
}
+/* -------------------------------------------------------
+ FIXME !!!
+
+ Early Mac OS X (10.0-10.4.?) had the limitation up to 255 Byte.
+ Current implementation is:
+ volcharset -> UTF16-MAC -> truncated 255 UTF8-MAC
+
+ Recent Mac OS X (10.4.?-) don't have this limitation.
+ Desirable implementation is:
+ volcharset -> truncated 510 UTF16-MAC -> UTF8-MAC
-/* -----------------------
+ ------------------------
with utf8 filename not always round trip
filename mac filename too long or first chars if unmatchable chars.
uname unix filename
id file/folder ID or 0
-
*/
char *
mangle(const struct vol *vol, char *filename, size_t filenamelen, char *uname, cnid_t id, int flags) {
size_t maxlen;
int k;
- maxlen = (flags & 2)?255:MACFILELEN; /* was vol->max_filename */
+ maxlen = (flags & 2)?UTF8FILELEN_EARLY:MACFILELEN; /* was vol->max_filename */
/* Do we really need to mangle this filename? */
if (!(flags & 1) && filenamelen <= maxlen) {
return filename;
k = sprintf(mangle_suffix, "%c%X", MANGLE_CHAR, ntohl(id));
if (filenamelen + k + ext_len > maxlen) {
- u_int16_t opt = CONV_FORCE | CONV_UNESCAPEHEX;
+ uint16_t opt = CONV_FORCE | CONV_UNESCAPEHEX;
size_t n = convert_charset(vol->v_volcharset,
(flags & 2) ? CH_UTF8_MAC : vol->v_maccharset,
vol->v_maccharset, uname, strlen(uname),