summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbp <bp@FreeBSD.org>2002-07-22 09:50:09 +0000
committerbp <bp@FreeBSD.org>2002-07-22 09:50:09 +0000
commit558db90d74fe48ae5169f44a933780f82456c29f (patch)
treee926bb7732f0a8217fea1be97386c6b528c713ed
parentfbe39dfcc2387a913e094ebed61c7f53fe59ee38 (diff)
downloadFreeBSD-src-558db90d74fe48ae5169f44a933780f82456c29f.zip
FreeBSD-src-558db90d74fe48ae5169f44a933780f82456c29f.tar.gz
Import smbfs 1.4.5. This release intended to fix problem with iconv
library. MFC after: 1 week
-rw-r--r--contrib/smbfs/HISTORY4
-rw-r--r--contrib/smbfs/lib/smb/nls.c26
2 files changed, 25 insertions, 5 deletions
diff --git a/contrib/smbfs/HISTORY b/contrib/smbfs/HISTORY
index 4de0e7b..f7aad60 100644
--- a/contrib/smbfs/HISTORY
+++ b/contrib/smbfs/HISTORY
@@ -1,3 +1,7 @@
+22.07.2002 1.4.5 (bug fix only)
+ - Some iconv libraries may refuse to recode some characters. This
+ caused problems with translation between server and local charsets.
+
16.04.2002 1.4.4
- Workaround for W2K bug in resource listing.
- Minor bug fixes.
diff --git a/contrib/smbfs/lib/smb/nls.c b/contrib/smbfs/lib/smb/nls.c
index 38db2e1..19c3123 100644
--- a/contrib/smbfs/lib/smb/nls.c
+++ b/contrib/smbfs/lib/smb/nls.c
@@ -29,7 +29,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: nls.c,v 1.9 2001/08/22 03:31:36 bp Exp $
+ * $Id: nls.c,v 1.10 2002/07/22 08:33:59 bp Exp $
*/
#include <sys/types.h>
@@ -134,7 +134,11 @@ nls_str_toloc(char *dst, const char *src)
return strcpy(dst, src);
inlen = outlen = strlen(src);
my_iconv(nls_toloc, NULL, NULL, &p, &outlen);
- my_iconv(nls_toloc, &src, &inlen, &p, &outlen);
+ while (my_iconv(nls_toloc, &src, &inlen, &p, &outlen) == -1) {
+ *p++ = *src++;
+ inlen--;
+ outlen--;
+ }
*p = 0;
return dst;
}
@@ -152,7 +156,11 @@ nls_str_toext(char *dst, const char *src)
return strcpy(dst, src);
inlen = outlen = strlen(src);
my_iconv(nls_toext, NULL, NULL, &p, &outlen);
- my_iconv(nls_toext, &src, &inlen, &p, &outlen);
+ while (my_iconv(nls_toext, &src, &inlen, &p, &outlen) == -1) {
+ *p++ = *src++;
+ inlen--;
+ outlen--;
+ }
*p = 0;
return dst;
}
@@ -174,7 +182,11 @@ nls_mem_toloc(void *dst, const void *src, int size)
return memcpy(dst, src, size);
inlen = outlen = size;
my_iconv(nls_toloc, NULL, NULL, &p, &outlen);
- my_iconv(nls_toloc, &s, &inlen, &p, &outlen);
+ while (my_iconv(nls_toloc, &s, &inlen, &p, &outlen) == -1) {
+ *p++ = *s++;
+ inlen--;
+ outlen--;
+ }
return dst;
}
@@ -193,7 +205,11 @@ nls_mem_toext(void *dst, const void *src, int size)
inlen = outlen = size;
my_iconv(nls_toext, NULL, NULL, &p, &outlen);
- my_iconv(nls_toext, &s, &inlen, &p, &outlen);
+ while (my_iconv(nls_toext, &s, &inlen, &p, &outlen) == -1) {
+ *p++ = *s++;
+ inlen--;
+ outlen--;
+ }
return dst;
}
OpenPOWER on IntegriCloud