X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=etc%2Fafpd%2Fmangle.c;h=cb2b60ed0c15e5bd63bb0cb1ca1c66e7a02089ba;hb=1f995330836cf20b5db3e5b6076735a2a0f4e81e;hp=7769542df4a4fe8e9df8a8f94043bbab57b42866;hpb=70e8818ea52f3ff5bca42e6c3cbf5765f959f322;p=netatalk.git diff --git a/etc/afpd/mangle.c b/etc/afpd/mangle.c index 7769542d..cb2b60ed 100644 --- a/etc/afpd/mangle.c +++ b/etc/afpd/mangle.c @@ -1,6 +1,4 @@ /* - * $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. * @@ -182,11 +180,11 @@ private_demangle(const struct vol *vol, char *mfilename, cnid_t did, cnid_t *osx } if (!osx) { /* it's not from cname so mfilename and dir must be the same */ - if (strcmp(cfrombstring(dir->d_m_name), mfilename) == 0) { - return cfrombstring(dir->d_u_name); + if (strcmp(cfrombstr(dir->d_m_name), mfilename) == 0) { + return cfrombstr(dir->d_u_name); } } else { - return demangle_checks(vol, cfrombstring(dir->d_u_name), mfilename, prefix, t); + return demangle_checks(vol, cfrombstr(dir->d_u_name), mfilename, prefix, t); } } else if (NULL != (u_name = cnid_resolve(vol->v_cdb, &id, buffer, len)) ) { @@ -225,13 +223,22 @@ demangle_osx(const struct vol *vol, char *mfilename, cnid_t did, cnid_t *fileid) 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) { @@ -243,7 +250,7 @@ mangle(const struct vol *vol, char *filename, size_t filenamelen, char *uname, c 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;