diff options
Diffstat (limited to 'fs/hfsplus/unicode.c')
| -rw-r--r-- | fs/hfsplus/unicode.c | 35 | 
1 files changed, 27 insertions, 8 deletions
diff --git a/fs/hfsplus/unicode.c b/fs/hfsplus/unicode.c index a3f0bfcc881e..a32998f29f0b 100644 --- a/fs/hfsplus/unicode.c +++ b/fs/hfsplus/unicode.c @@ -142,7 +142,11 @@ int hfsplus_uni2asc(struct super_block *sb,  		/* search for single decomposed char */  		if (likely(compose))  			ce1 = hfsplus_compose_lookup(hfsplus_compose_table, c0); -		if (ce1 && (cc = ce1[0])) { +		if (ce1) +			cc = ce1[0]; +		else +			cc = 0; +		if (cc) {  			/* start of a possibly decomposed Hangul char */  			if (cc != 0xffff)  				goto done; @@ -209,7 +213,8 @@ int hfsplus_uni2asc(struct super_block *sb,  				i++;  				ce2 = ce1;  			} -			if ((cc = ce2[0])) { +			cc = ce2[0]; +			if (cc) {  				ip += i;  				ustrlen -= i;  				goto done; @@ -301,7 +306,11 @@ int hfsplus_asc2uni(struct super_block *sb, struct hfsplus_unistr *ustr,  	while (outlen < HFSPLUS_MAX_STRLEN && len > 0) {  		size = asc2unichar(sb, astr, len, &c); -		if (decompose && (dstr = decompose_unichar(c, &dsize))) { +		if (decompose) +			dstr = decompose_unichar(c, &dsize); +		else +			dstr = NULL; +		if (dstr) {  			if (outlen + dsize > HFSPLUS_MAX_STRLEN)  				break;  			do { @@ -346,15 +355,23 @@ int hfsplus_hash_dentry(const struct dentry *dentry, const struct inode *inode,  		astr += size;  		len -= size; -		if (decompose && (dstr = decompose_unichar(c, &dsize))) { +		if (decompose) +			dstr = decompose_unichar(c, &dsize); +		else +			dstr = NULL; +		if (dstr) {  			do {  				c2 = *dstr++; -				if (!casefold || (c2 = case_fold(c2))) +				if (casefold) +					c2 = case_fold(c2); +				if (!casefold || c2)  					hash = partial_name_hash(c2, hash);  			} while (--dsize > 0);  		} else {  			c2 = c; -			if (!casefold || (c2 = case_fold(c2))) +			if (casefold) +				c2 = case_fold(c2); +			if (!casefold || c2)  				hash = partial_name_hash(c2, hash);  		}  	} @@ -422,12 +439,14 @@ int hfsplus_compare_dentry(const struct dentry *parent,  		c1 = *dstr1;  		c2 = *dstr2;  		if (casefold) { -			if  (!(c1 = case_fold(c1))) { +			c1 = case_fold(c1); +			if (!c1) {  				dstr1++;  				dsize1--;  				continue;  			} -			if (!(c2 = case_fold(c2))) { +			c2 = case_fold(c2); +			if (!c2) {  				dstr2++;  				dsize2--;  				continue;  |