Changeset a248234 in mainline for uspace/srv/fs/fat/fat_dentry.c


Ignore:
Timestamp:
2009-05-06T19:30:07Z (15 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8bb129d
Parents:
0be3e8b
Message:

add support for lowercase extension and lowercase basename bits (NT extension of plain FAT16)
this implements request ticket #57

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/fat/fat_dentry.c

    r0be3e8b ra248234  
    115115void fat_dentry_name_get(const fat_dentry_t *d, char *buf)
    116116{
    117         int i;
    118 
     117        unsigned int i;
     118       
    119119        for (i = 0; i < FAT_NAME_LEN; i++) {
    120120                if (d->name[i] == FAT_PAD)
    121121                        break;
     122               
    122123                if (d->name[i] == FAT_DENTRY_E5_ESC)
    123124                        *buf++ = 0xe5;
    124                 else
    125                         *buf++ = d->name[i];
    126         }
     125                else {
     126                        if (d->lcase & FAT_LCASE_LOWER_NAME)
     127                                *buf++ = tolower(d->name[i]);
     128                        else
     129                                *buf++ = d->name[i];
     130                }
     131        }
     132       
    127133        if (d->ext[0] != FAT_PAD)
    128134                *buf++ = '.';
     135       
    129136        for (i = 0; i < FAT_EXT_LEN; i++) {
    130137                if (d->ext[i] == FAT_PAD) {
     
    132139                        return;
    133140                }
     141               
    134142                if (d->ext[i] == FAT_DENTRY_E5_ESC)
    135143                        *buf++ = 0xe5;
    136                 else
    137                         *buf++ = d->ext[i];
    138         }
     144                else {
     145                        if (d->lcase & FAT_LCASE_LOWER_EXT)
     146                                *buf++ = tolower(d->ext[i]);
     147                        else
     148                                *buf++ = d->ext[i];
     149                }
     150        }
     151       
    139152        *buf = '\0';
    140153}
     
    142155void fat_dentry_name_set(fat_dentry_t *d, const char *name)
    143156{
    144         int i;
     157        unsigned int i;
    145158        const char fake_ext[] = "   ";
    146 
    147 
     159        bool lower_name = true;
     160        bool lower_ext = true;
     161       
    148162        for (i = 0; i < FAT_NAME_LEN; i++) {
    149163                switch ((uint8_t) *name) {
     
    157171                        break;
    158172                default:
     173                        if (isalpha(*name)) {
     174                                if (!islower(*name))
     175                                        lower_name = false;
     176                        }
     177                       
    159178                        d->name[i] = toupper(*name++);
    160179                        break;
    161180                }
    162181        }
     182       
    163183        if (*name++ != '.')
    164184                name = fake_ext;
     185       
    165186        for (i = 0; i < FAT_EXT_LEN; i++) {
    166187                switch ((uint8_t) *name) {
     
    173194                        break;
    174195                default:
     196                        if (isalpha(*name)) {
     197                                if (!islower(*name))
     198                                        lower_ext = false;
     199                        }
     200                       
    175201                        d->ext[i] = toupper(*name++);
    176202                        break;
    177203                }
    178204        }
     205       
     206        if (lower_name)
     207                d->lcase |= FAT_LCASE_LOWER_NAME;
     208        else
     209                d->lcase &= ~FAT_LCASE_LOWER_NAME;
     210       
     211        if (lower_ext)
     212                d->lcase |= FAT_LCASE_LOWER_EXT;
     213        else
     214                d->lcase &= ~FAT_LCASE_LOWER_EXT;
    179215}
    180216
Note: See TracChangeset for help on using the changeset viewer.