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


Ignore:
Timestamp:
2008-11-23T16:22:40Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/fix-logger-deadlock, topic/msim-upgrade, topic/simplify-dev-export
Children:
a5da446
Parents:
d2093d6
Message:

Add somewhat functional fat_link().

File:
1 edited

Legend:

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

    rd2093d6 r0fdd6bb  
    3737
    3838#include "fat_dentry.h"
     39#include <ctype.h>
    3940
    4041#define FAT_PAD                 ' '
     
    4546#define FAT_DENTRY_ERASED       0xe5
    4647
    47 void dentry_name_canonify(fat_dentry_t *d, char *buf)
     48static bool is_d_char(const char ch)
     49{
     50        if (isalnum(ch) || ch == '_')
     51                return true;
     52        else
     53                return false;
     54}
     55
     56bool fat_dentry_name_verify(const char *name)
     57{
     58        unsigned i, dot;
     59        bool dot_found = false;
     60       
     61
     62        for (i = 0; name[i]; i++) {
     63                if (name[i] == '.') {
     64                        if (dot_found) {
     65                                return false;
     66                        } else {
     67                                dot_found = true;
     68                                dot = i;
     69                        }
     70                } else {
     71                        if (!is_d_char(name[i]))
     72                                return false;
     73                }
     74        }
     75
     76        if (dot_found) {
     77                if (dot > FAT_NAME_LEN)
     78                        return false;
     79                if (i - dot > FAT_EXT_LEN + 1)
     80                        return false;
     81        } else {
     82                if (i > FAT_NAME_LEN)
     83                        return false;
     84        }
     85
     86        return true;
     87}
     88
     89void fat_dentry_name_get(const fat_dentry_t *d, char *buf)
    4890{
    4991        int i;
     
    72114}
    73115
    74 fat_dentry_clsf_t fat_classify_dentry(fat_dentry_t *d)
     116void fat_dentry_name_set(fat_dentry_t *d, const char *name)
     117{
     118        int i;
     119        const char fake_ext[] = "   ";
     120
     121
     122        for (i = 0; i < FAT_NAME_LEN; i++) {
     123                switch ((uint8_t) *name) {
     124                case 0xe5:
     125                        d->name[i] = FAT_DENTRY_E5_ESC;
     126                        name++;
     127                        break;
     128                case '\0':
     129                case '.':
     130                        d->name[i] = FAT_PAD;
     131                        break;
     132                default:
     133                        d->name[i] = toupper(*name++);
     134                        break;
     135                }
     136        }
     137        if (*name++ != '.')
     138                name = fake_ext;
     139        for (i = 0; i < FAT_EXT_LEN; i++) {
     140                switch ((uint8_t) *name) {
     141                case 0xe5:
     142                        d->ext[i] = FAT_DENTRY_E5_ESC;
     143                        name++;
     144                        break;
     145                case '\0':
     146                        d->ext[i] = FAT_PAD;
     147                        break;
     148                default:
     149                        d->ext[i] = toupper(*name++);
     150                        break;
     151                }
     152        }
     153}
     154
     155fat_dentry_clsf_t fat_classify_dentry(const fat_dentry_t *d)
    75156{
    76157        if (d->attr & FAT_ATTR_VOLLABEL) {
     
    80161        if (d->name[0] == FAT_DENTRY_ERASED) {
    81162                /* not-currently-used entry */
    82                 return FAT_DENTRY_SKIP;
     163                return FAT_DENTRY_FREE;
    83164        }
    84165        if (d->name[0] == FAT_DENTRY_UNUSED) {
Note: See TracChangeset for help on using the changeset viewer.