diff -ru ../../original/samba/source/client/smbmnt.c ./source/client/smbmnt.c
--- ../../original/samba/source/client/smbmnt.c	Wed May 12 17:48:16 1999
+++ ./source/client/smbmnt.c	Thu May 13 14:27:52 1999
@@ -2,6 +2,7 @@
  *  smbmount.c
  *
  *  Copyright (C) 1995-1998 by Paal-Kr. Engstad and Volker Lendecke
+ *  1999 Nls addon by Artem Ryabov
  *
  */
 
@@ -13,6 +14,9 @@
 #include <asm/posix_types.h>
 #include <linux/smb.h>
 #include <linux/smb_mount.h>
+/* Artem insert begin */
+#include <linux/smb_fs.h>
+/* Artem insert end */
 #include <asm/unistd.h>
 
 #ifndef	MS_MGC_VAL
@@ -44,17 +48,26 @@
                "-d mode        permission the dirs get (octal notation)\n"
 	       "-P pid         connection handler's pid\n\n"
 	       "-s share       share name on server\n\n"
+/* Artem insert begin */
+	       "-l charset     local charset name\n"
+	       "-r charset     remote charset name\n"
+	       "               use both, or no one\n\n"
+/* Artem insert end */
                "-h             print this help text\n");
 }
 
-static int
-parse_args(int argc, char *argv[], struct smb_mount_data *data, char **share)
+/* Artem change begin */
+static int parse_args(int argc, char *argv[], struct smb_mount_data *data, 
+                      char **share, struct smb_nls_ioctl *nls_cs)
+/* Artem change end */
 {
         int opt;
         struct passwd *pwd;
         struct group  *grp;
 
-        while ((opt = getopt (argc, argv, "u:g:f:d:s:")) != EOF)
+/* Artem change begin */
+        while ((opt = getopt (argc, argv, "u:g:f:d:s:l:r:")) != EOF)
+/* Artem change end */
 	{
                 switch (opt)
 		{
@@ -101,6 +114,16 @@
                 case 's':
                         *share = optarg;
                         break;
+/* Artem insert begin */
+		case 'l':
+			strncpy(nls_cs->local_charset,optarg,
+				sizeof(nls_cs->local_charset));
+			break;
+		case 'r':
+			strncpy(nls_cs->smb_charset,optarg,
+				sizeof(nls_cs->smb_charset));
+			break;
+/* Artem insert end */
                 default:
                         return -1;
                 }
@@ -157,6 +180,9 @@
 	struct smb_mount_data data;
 	SMB_STRUCT_STAT st;
 	struct mntent ment;
+/* Artem insert begin */
+	struct smb_nls_ioctl nls_cs;
+/* Artem insert end */
 
         progname = argv[0];
 
@@ -211,7 +237,12 @@
         data.file_mode = (S_IRWXU|S_IRWXG|S_IRWXO) & ~um;
         data.dir_mode  = 0;
 
-        if (parse_args(argc, argv, &data, &share_name) != 0) {
+/* Artem insert begin */
+	nls_cs.local_charset[0]=nls_cs.smb_charset[0]=0;
+/* Artem insert end */
+/* Artem change begin */
+        if (parse_args(argc, argv, &data, &share_name, &nls_cs) != 0) {
+/* Artem change end */
                 usage();
                 return -1;
         }
@@ -234,6 +265,22 @@
 		printf("Please refer to the smbmnt(8) manual page\n");
 		return -1;
 	}
+/* Artem insert begin */
+	if (nls_cs.local_charset[0] && nls_cs.smb_charset[0]) {
+		int mount_fid;
+		mount_fid = open(mount_point, O_RDONLY, 0);
+		if (ioctl(mount_fid, SMB_IOC_SETCHARSETS,  &nls_cs)) {
+			if (errno == EINVAL) {
+				fprintf(stderr, "Your kernel does not support "
+                                        "character mapping. You should upgrade"
+                                        " to latest version.\n");
+			} else {
+				perror("Warning: Unable to load NLS charsets");
+			}
+		}
+		close(mount_fid);
+	}
+/* Artem insert end */
 
         ment.mnt_fsname = share_name ? share_name : "none";
         ment.mnt_dir = fullpath(mount_point);
