o From the submitter: dos2unixchr will convert to lower case if
LCASE_BASE or LCASE_EXT or both are set. But dos2unixfn uses dos2unixchr separately for the basename and the extension. So if either LCASE_BASE or LCASE_EXT is set, dos2unixfn will convert both the basename and extension to lowercase because it is blindly passing in the state of both flags to dos2unixchr. The bit masks I used ensure that only the state of LCASE_BASE gets passed to dos2unixchr when the basename is converted, and only the state of LCASE_EXT is passed in when the extension is converted. PR: kern/86655 Submitted by: Micah Lieske MFC after: 3 weeks
This commit is contained in:
parent
071fff62be
commit
cc005bb92c
@ -270,7 +270,8 @@ dos2unixfn(dn, un, lower, pmp)
|
||||
* Copy the name portion into the unix filename string.
|
||||
*/
|
||||
for (i = 8; i > 0 && *dn != ' ';) {
|
||||
c = dos2unixchr((const u_char **)&dn, &i, lower, pmp);
|
||||
c = dos2unixchr((const u_char **)&dn, &i, lower & LCASE_BASE,
|
||||
pmp);
|
||||
if (c & 0xff00) {
|
||||
*un++ = c >> 8;
|
||||
thislong++;
|
||||
@ -288,7 +289,8 @@ dos2unixfn(dn, un, lower, pmp)
|
||||
*un++ = '.';
|
||||
thislong++;
|
||||
for (i = 3; i > 0 && *dn != ' ';) {
|
||||
c = dos2unixchr((const u_char **)&dn, &i, lower, pmp);
|
||||
c = dos2unixchr((const u_char **)&dn, &i,
|
||||
lower & LCASE_EXT, pmp);
|
||||
if (c & 0xff00) {
|
||||
*un++ = c >> 8;
|
||||
thislong++;
|
||||
|
Loading…
Reference in New Issue
Block a user