diff options
author | bp <bp@FreeBSD.org> | 2002-07-22 09:50:09 +0000 |
---|---|---|
committer | bp <bp@FreeBSD.org> | 2002-07-22 09:50:09 +0000 |
commit | 558db90d74fe48ae5169f44a933780f82456c29f (patch) | |
tree | e926bb7732f0a8217fea1be97386c6b528c713ed | |
parent | fbe39dfcc2387a913e094ebed61c7f53fe59ee38 (diff) | |
download | FreeBSD-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/HISTORY | 4 | ||||
-rw-r--r-- | contrib/smbfs/lib/smb/nls.c | 26 |
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; } |