summaryrefslogtreecommitdiff
path: root/source/smbd/mangle.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/smbd/mangle.c')
-rw-r--r--source/smbd/mangle.c59
1 files changed, 56 insertions, 3 deletions
diff --git a/source/smbd/mangle.c b/source/smbd/mangle.c
index 8f1490c528d..177a34c9751 100644
--- a/source/smbd/mangle.c
+++ b/source/smbd/mangle.c
@@ -20,7 +20,6 @@
*/
#include "includes.h"
-#include "loadparm.h"
extern int DEBUGLEVEL;
extern int case_default;
@@ -90,8 +89,6 @@ BOOL is_8_3(char *fname)
if (slash_pos) fname = slash_pos+1;
len = strlen(fname);
- dot_pos = strchr(fname,'.');
-
DEBUG(5,("checking %s for 8.3\n",fname));
if (case_mangle)
@@ -122,6 +119,8 @@ BOOL is_8_3(char *fname)
/* %%% A nice improvment to name mangling would be to translate
filename to ANSI charset on the smb server host */
+ dot_pos = strchr(fname,'.');
+
{
char *p = fname;
#ifdef KANJI
@@ -510,9 +509,36 @@ void mangle_name_83(char *s)
*p++ = 0;
while (*p && extlen < 3)
{
+#ifdef KANJI
+ if (is_shift_jis (*p))
+ {
+ if (extlen < 2)
+ {
+ extension[extlen++] = p[0];
+ extension[extlen++] = p[1];
+ }
+ else
+ {
+ extension[extlen++] = base36 (((unsigned char) *p) % 36);
+ }
+ p += 2;
+ }
+ else if (is_kana (*p))
+ {
+ extension[extlen++] = p[0];
+ p++;
+ }
+ else
+ {
+ if (isdoschar (*p) && *p != '.')
+ extension[extlen++] = p[0];
+ p++;
+ }
+#else
if (isdoschar(*p) && *p != '.')
extension[extlen++] = *p;
p++;
+#endif /* KANJI */
}
extension[extlen] = 0;
}
@@ -522,9 +548,36 @@ void mangle_name_83(char *s)
while (*p && baselen < 5)
{
+#ifdef KANJI
+ if (is_shift_jis (*p))
+ {
+ if (baselen < 4)
+ {
+ base[baselen++] = p[0];
+ base[baselen++] = p[1];
+ }
+ else
+ {
+ base[baselen++] = base36 (((unsigned char) *p) % 36);
+ }
+ p += 2;
+ }
+ else if (is_kana (*p))
+ {
+ base[baselen++] = p[0];
+ p++;
+ }
+ else
+ {
+ if (isdoschar (*p) && *p != '.')
+ base[baselen++] = p[0];
+ p++;
+ }
+#else
if (isdoschar(*p) && *p != '.')
base[baselen++] = *p;
p++;
+#endif /* KANJI */
}
base[baselen] = 0;