X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=etc%2Fafpd%2Fmangle.c;h=21bd80f30037c9bba3bd61b9b834c02b1c911089;hb=be9876310c25cc3faaa72db9b12064a96a1caa70;hp=91533e619a674d9748b5c1cc6f365c6d58952aae;hpb=18964cebf514f78defd3df1cfed91e34d99cfa28;p=netatalk.git diff --git a/etc/afpd/mangle.c b/etc/afpd/mangle.c index 91533e61..21bd80f3 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. * @@ -32,7 +30,7 @@ static size_t mangle_extension(const struct vol *vol, const char* uname, 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); @@ -44,7 +42,7 @@ static size_t mangle_extension(const struct vol *vol, const char* uname, 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; @@ -138,7 +136,7 @@ private_demangle(const struct vol *vol, char *mfilename, cnid_t did, cnid_t *osx { 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; @@ -195,7 +193,7 @@ private_demangle(const struct vol *vol, char *mfilename, cnid_t did, cnid_t *osx } if (!osx) { /* convert back to mac name and check it's the same */ - t = utompath(vol, u_name, file_id, utf8_encoding()); + t = utompath(vol, u_name, file_id, utf8_encoding(vol->v_obj)); if (!strcmp(t, mfilename)) { return u_name; } @@ -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; @@ -259,7 +266,7 @@ mangle(const struct vol *vol, char *filename, size_t filenamelen, char *uname, c 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),