mirror of
				git://git.code.sf.net/p/cdesktopenv/code
				synced 2025-03-09 15:50:02 +00:00 
			
		
		
		
	Fix for non-UTF-8 wide charsets (Solaris patch 050-CR7065478)
This upstreams a Solaris patch: https://github.com/oracle/solaris-userland/blob/master/components/ksh93/patches/050-CR7065478.patch src/lib/libast/comp/setlocale.c: - Add wide_wctomb() wrapper for wctomb(3). It changes an invalid character (wctomb returns -1) to a single byte with length 1. - set_ctype(): Use wide_wctomb() instead of wctomb(3) as the conversion discipline function (ast.mb_conv). Effectively this means there are no invalid characters. Perhaps this is necessary for compatibility with ASCII. Sadly, no public info available.
This commit is contained in:
		
							parent
							
								
									096f46eee5
								
							
						
					
					
						commit
						e03c010c4d
					
				
					 1 changed files with 18 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -2217,6 +2217,23 @@ iswalpha(wchar_t c)
 | 
			
		|||
 | 
			
		||||
typedef int (*Isw_f)(wchar_t);
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
wide_wctomb(char* u, wchar_t w)
 | 
			
		||||
{
 | 
			
		||||
	int size = 0;
 | 
			
		||||
 | 
			
		||||
	if (u)
 | 
			
		||||
	{
 | 
			
		||||
		size = wctomb(u, w);
 | 
			
		||||
		if (size < 0)
 | 
			
		||||
		{
 | 
			
		||||
			*u = (char)(w & 0xff);
 | 
			
		||||
			size = 1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * called when LC_CTYPE initialized or changes
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -2261,7 +2278,7 @@ set_ctype(Lc_category_t* cp)
 | 
			
		|||
	{
 | 
			
		||||
		if (!(ast.mb_width = wcwidth))
 | 
			
		||||
			ast.mb_width = default_wcwidth;
 | 
			
		||||
		ast.mb_conv = wctomb;
 | 
			
		||||
		ast.mb_conv = wide_wctomb;
 | 
			
		||||
#ifdef mb_state
 | 
			
		||||
		{
 | 
			
		||||
			/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue