/*
- * $Id: nad.c,v 1.13 2006-09-18 01:06:44 didg Exp $
+ * $Id: nad.c,v 1.14 2006-09-19 01:35:45 didg Exp $
*/
#ifdef HAVE_CONFIG_H
char *m, *u;
u_int16_t flags = CONV_IGNORE | CONV_UNESCAPEHEX;
size_t outlen;
- static char mpath[MAXPATHLEN];
+ static char mpath[MAXPATHLEN +2]; /* for convert_charset dest_len parameter +2 */
m = mpath;
outlen = strlen(upath);
size_t inplen;
size_t outlen;
u_int16_t flags = 0;
- static char upath[MAXPATHLEN];
+ static char upath[MAXPATHLEN +2]; /* for convert_charset dest_len parameter +2 */
if ( *mpath == '\0' ) {
return( "." );
static char *convert_name(char *name, struct stat *st, cnid_t cur_did)
{
- static char buffer[MAXPATHLEN];
+ static char buffer[MAXPATHLEN +2]; /* for convert_charset dest_len parameter +2 */
size_t outlen = 0;
unsigned char *p,*q;
int require_conversion = 0;
q=buffer;
p=name;
- outlen = convert_charset(ch_from, ch_to, ch_mac, p, strlen(p), q, sizeof(buffer), &flags);
+ outlen = convert_charset(ch_from, ch_to, ch_mac, p, strlen(p), q, sizeof(buffer) -2, &flags);
if ((size_t)-1 == outlen) {
if ( ch_to == CH_UTF8) {
/* maybe name is already in UTF8? */
flags = conv_flags;
q = (char*) buffer;
p = name;
- outlen = convert_charset(ch_to, ch_to, ch_mac, p, strlen(p), q, sizeof(buffer), &flags);
+ outlen = convert_charset(ch_to, ch_to, ch_mac, p, strlen(p), q, sizeof(buffer) -2, &flags);
if ((size_t)-1 == outlen) {
/* it's not UTF8... */
fprintf(stderr, "ERROR: conversion from '%s' to '%s' for '%s' in DID %u failed!!!\n",
u_int16_t offcnt; /* Offspring count */
struct finderinfo finfo; /* Finder info */
char lname[64]; /* Long name */
- char utf8name[512]; /* UTF8 name */
+ char utf8name[514]; /* UTF8 or UCS2 name */ /* for convert_charset dest_len parameter +2 */
};
/*
struct adouble *adp = NULL;
time_t c_date, b_date;
u_int32_t ac_date, ab_date;
- static char convbuf[512];
+ static char convbuf[514]; /* for convert_charset dest_len parameter +2 */
size_t len;
if (S_ISDIR(path->st.st_mode)) {
/*
- * $Id: desktop.c,v 1.35 2006-09-18 09:22:25 didg Exp $
+ * $Id: desktop.c,v 1.36 2006-09-19 01:35:45 didg Exp $
*
* See COPYRIGHT.
*
char *mtoupath(const struct vol *vol, char *mpath, cnid_t did, int utf8)
{
- static char upath[ MAXPATHLEN + 1];
+ static char upath[ MAXPATHLEN + 2]; /* for convert_charset dest_len parameter +2 */
char *m, *u;
size_t inplen;
size_t outlen;
LOG(log_error, logtype_afpd, "conversion from %s to %s for %s failed.", (utf8)?"UTF8-MAC":vol->v_maccodepage, vol->v_volcodepage, mpath);
return NULL;
}
- upath[outlen] = 0;
#ifdef DEBUG
LOG(log_debug, logtype_afpd, "mtoupath: '%s':'%s'", mpath, upath);
*/
char *utompath(const struct vol *vol, char *upath, cnid_t id, int utf8)
{
- static char mpath[ MAXPATHLEN + 1];
+ static char mpath[ MAXPATHLEN + 2]; /* for convert_charset dest_len parameter +2 */
char *m, *u;
u_int16_t flags = CONV_IGNORE | CONV_UNESCAPEHEX;
size_t outlen;
goto utompath_error;
}
- mpath[outlen] = 0;
if (!(flags & CONV_REQMANGLE))
flags = 0;
else
/*
- * $Id: mangle.c,v 1.18 2006-09-18 01:06:44 didg Exp $
+ * $Id: mangle.c,v 1.19 2006-09-19 01:35:45 didg Exp $
*
* Copyright (c) 2002. Joe Marcus Clarke (marcus@marcuscom.com)
* All Rights Reserved. See COPYRIGHT.
static char *demangle_checks ( const struct vol *vol, char* uname, char * mfilename, size_t prefix, char * ext)
{
u_int16_t flags;
- static char buffer[MAXPATHLEN];
+ static char buffer[MAXPATHLEN +2]; /* for convert_charset dest_len parameter +2 */
size_t len;
size_t mfilenamelen;
/* check whether file extensions match */
{
- char buf[MAX_EXT_LENGTH + 1];
+ char buf[MAX_EXT_LENGTH + 2]; /* for convert_charset dest_len parameter +2 */
size_t ext_len = mangle_extension(vol, uname, buf, CH_UTF8_MAC);
if (ext_len) {
char *
mangle(const struct vol *vol, char *filename, size_t filenamelen, char *uname, cnid_t id, int flags) {
char *m = NULL;
- static char mfilename[MAXPATHLEN + 1];
+ static char mfilename[MAXPATHLEN]; /* way > maxlen */
char mangle_suffix[MANGLE_LENGTH + 1];
- char ext[MAX_EXT_LENGTH];
+ char ext[MAX_EXT_LENGTH +2]; /* for convert_charset dest_len parameter +2 */
size_t ext_len;
size_t maxlen;
int k;
return (i_len + j == 0 || (option & CONV_FORCE)) ? destlen - o_len : (size_t)-1;
}
+/*
+ * FIXME the size is a mess we really need a malloc/free logic
+ *`dest size must be dest_len +2
+*/
size_t convert_charset ( charset_t from_set, charset_t to_set, charset_t cap_charset, char* src, size_t src_len, char* dest, size_t dest_len, u_int16_t *flags)
{
size_t i_len, o_len;
ucs2_t *u;
- ucs2_t buffer[MAXPATHLEN];
- ucs2_t buffer2[MAXPATHLEN];
+ ucs2_t buffer[MAXPATHLEN +2];
+ ucs2_t buffer2[MAXPATHLEN +2];
int composition = 0;
lazy_initialize_conv();
/* convert from_set to UCS2 */
if ((size_t)(-1) == ( o_len = pull_charset_flags( from_set, cap_charset, src, src_len,
- (char *) buffer, sizeof(buffer), flags)) ) {
+ (char *) buffer, sizeof(buffer) -2, flags)) ) {
LOG(log_error, logtype_default, "Conversion failed ( %s to CH_UCS2 )", charset_name(from_set));
return (size_t) -1;
}
if (CHECK_FLAGS(flags, CONV_DECOMPOSE) || (charsets[to_set] && charsets[to_set]->flags & CHARSET_DECOMPOSED) )
composition = 2;
- i_len = sizeof(buffer2);
+ i_len = sizeof(buffer2) -2;
u = buffer2;
switch (composition) {
return (size_t)(-1);
break;
}
+ /* null terminate */
+ u[i_len] = 0;
+ u[i_len +1] = 0;
/* Do case conversions */
if (CHECK_FLAGS(flags, CONV_TOUPPER)) {
"Conversion failed (CH_UCS2 to %s):%s", charset_name(to_set), strerror(errno));
return (size_t) -1;
}
+ /* null terminate */
+ dest[o_len] = 0;
+ dest[o_len +1] = 0;
return o_len;
}