Changeset 033ef7d3 in mainline


Ignore:
Timestamp:
2008-10-26T13:09:24Z (16 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0f57d0e
Parents:
6ebaff9
Message:

Move functionality related to FAT dentries to fat_dentry.c.

Location:
uspace/srv/fs/fat
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/fat/fat.h

    r6ebaff9 r033ef7d3  
    116116} __attribute__ ((packed)) fat_bs_t;
    117117
    118 #define FAT_ATTR_RDONLY         (1 << 0)
    119 #define FAT_ATTR_VOLLABEL       (1 << 3)
    120 #define FAT_ATTR_SUBDIR         (1 << 4)
    121 
    122 typedef struct {
    123         uint8_t         name[8];
    124         uint8_t         ext[3];
    125         uint8_t         attr;
    126         uint8_t         reserved;
    127         uint8_t         ctime_fine;
    128         uint16_t        ctime;
    129         uint16_t        cdate;
    130         uint16_t        adate;
    131         union {
    132                 uint16_t        eaidx;          /* FAT12/FAT16 */
    133                 uint16_t        firstc_hi;      /* FAT32 */
    134         };
    135         uint16_t        mtime;
    136         uint16_t        mdate;
    137         union {
    138                 uint16_t        firstc;         /* FAT12/FAT16 */
    139                 uint16_t        firstc_lo;      /* FAT32 */
    140         };
    141         uint32_t        size;
    142 } __attribute__ ((packed)) fat_dentry_t;
    143 
    144118typedef uint16_t fat_cluster_t;
    145119
  • uspace/srv/fs/fat/fat_dentry.c

    r6ebaff9 r033ef7d3  
    3636 */
    3737
     38#include "fat_dentry.h"
     39
     40#define FAT_PAD                 ' '
     41
     42#define FAT_DENTRY_UNUSED       0x00
     43#define FAT_DENTRY_E5_ESC       0x05
     44#define FAT_DENTRY_DOT          0x2e
     45#define FAT_DENTRY_ERASED       0xe5
     46
     47void dentry_name_canonify(fat_dentry_t *d, char *buf)
     48{
     49        int i;
     50
     51        for (i = 0; i < FAT_NAME_LEN; i++) {
     52                if (d->name[i] == FAT_PAD)
     53                        break;
     54                if (d->name[i] == FAT_DENTRY_E5_ESC)
     55                        *buf++ = 0xe5;
     56                else
     57                        *buf++ = d->name[i];
     58        }
     59        if (d->ext[0] != FAT_PAD)
     60                *buf++ = '.';
     61        for (i = 0; i < FAT_EXT_LEN; i++) {
     62                if (d->ext[i] == FAT_PAD) {
     63                        *buf = '\0';
     64                        return;
     65                }
     66                if (d->ext[i] == FAT_DENTRY_E5_ESC)
     67                        *buf++ = 0xe5;
     68                else
     69                        *buf++ = d->ext[i];
     70        }
     71        *buf = '\0';
     72}
     73
     74fat_dentry_clsf_t fat_classify_dentry(fat_dentry_t *d)
     75{
     76        if (d->attr & FAT_ATTR_VOLLABEL) {
     77                /* volume label entry */
     78                return FAT_DENTRY_SKIP;
     79        }
     80        if (d->name[0] == FAT_DENTRY_ERASED) {
     81                /* not-currently-used entry */
     82                return FAT_DENTRY_SKIP;
     83        }
     84        if (d->name[0] == FAT_DENTRY_UNUSED) {
     85                /* never used entry */
     86                return FAT_DENTRY_LAST;
     87        }
     88        if (d->name[0] == FAT_DENTRY_DOT) {
     89                /*
     90                 * Most likely '.' or '..'.
     91                 * It cannot occur in a regular file name.
     92                 */
     93                return FAT_DENTRY_SKIP;
     94        }
     95        return FAT_DENTRY_VALID;
     96}
    3897
    3998/**
  • uspace/srv/fs/fat/fat_dentry.h

    r6ebaff9 r033ef7d3  
    3434#define FAT_FAT_DENTRY_H_
    3535
     36#include <stdint.h>
     37
     38#define FAT_NAME_LEN            8
     39#define FAT_EXT_LEN             3
     40
     41#define FAT_ATTR_RDONLY         (1 << 0)
     42#define FAT_ATTR_VOLLABEL       (1 << 3)
     43#define FAT_ATTR_SUBDIR         (1 << 4)
     44
     45typedef enum {
     46        FAT_DENTRY_SKIP,
     47        FAT_DENTRY_LAST,
     48        FAT_DENTRY_VALID
     49} fat_dentry_clsf_t;
     50
     51typedef struct {
     52        uint8_t         name[8];
     53        uint8_t         ext[3];
     54        uint8_t         attr;
     55        uint8_t         reserved;
     56        uint8_t         ctime_fine;
     57        uint16_t        ctime;
     58        uint16_t        cdate;
     59        uint16_t        adate;
     60        union {
     61                uint16_t        eaidx;          /* FAT12/FAT16 */
     62                uint16_t        firstc_hi;      /* FAT32 */
     63        };
     64        uint16_t        mtime;
     65        uint16_t        mdate;
     66        union {
     67                uint16_t        firstc;         /* FAT12/FAT16 */
     68                uint16_t        firstc_lo;      /* FAT32 */
     69        };
     70        uint32_t        size;
     71} __attribute__ ((packed)) fat_dentry_t;
     72
     73extern void dentry_name_canonify(fat_dentry_t *, char *);
     74extern fat_dentry_clsf_t fat_classify_dentry(fat_dentry_t *);
     75
    3676#endif
    3777
  • uspace/srv/fs/fat/fat_ops.c

    r6ebaff9 r033ef7d3  
    3737
    3838#include "fat.h"
     39#include "fat_dentry.h"
     40#include "fat_fat.h"
    3941#include "../../vfs/vfs.h"
    4042#include <libfs.h>
     
    6264static LIST_INITIALIZE(ffn_head);
    6365
    64 #define FAT_NAME_LEN            8
    65 #define FAT_EXT_LEN             3
    66 
    67 #define FAT_PAD                 ' '
    68 
    69 #define FAT_DENTRY_UNUSED       0x00
    70 #define FAT_DENTRY_E5_ESC       0x05
    71 #define FAT_DENTRY_DOT          0x2e
    72 #define FAT_DENTRY_ERASED       0xe5
    73 
    7466#define min(a, b)               ((a) < (b) ? (a) : (b))
    75 
    76 static void dentry_name_canonify(fat_dentry_t *d, char *buf)
    77 {
    78         int i;
    79 
    80         for (i = 0; i < FAT_NAME_LEN; i++) {
    81                 if (d->name[i] == FAT_PAD)
    82                         break;
    83                 if (d->name[i] == FAT_DENTRY_E5_ESC)
    84                         *buf++ = 0xe5;
    85                 else
    86                         *buf++ = d->name[i];
    87         }
    88         if (d->ext[0] != FAT_PAD)
    89                 *buf++ = '.';
    90         for (i = 0; i < FAT_EXT_LEN; i++) {
    91                 if (d->ext[i] == FAT_PAD) {
    92                         *buf = '\0';
    93                         return;
    94                 }
    95                 if (d->ext[i] == FAT_DENTRY_E5_ESC)
    96                         *buf++ = 0xe5;
    97                 else
    98                         *buf++ = d->ext[i];
    99         }
    100         *buf = '\0';
    101 }
    10267
    10368static int dev_phone = -1;              /* FIXME */
     
    298263
    299264        return bps;
    300 }
    301 
    302 typedef enum {
    303         FAT_DENTRY_SKIP,
    304         FAT_DENTRY_LAST,
    305         FAT_DENTRY_VALID
    306 } fat_dentry_clsf_t;
    307 
    308 static fat_dentry_clsf_t fat_classify_dentry(fat_dentry_t *d)
    309 {
    310         if (d->attr & FAT_ATTR_VOLLABEL) {
    311                 /* volume label entry */
    312                 return FAT_DENTRY_SKIP;
    313         }
    314         if (d->name[0] == FAT_DENTRY_ERASED) {
    315                 /* not-currently-used entry */
    316                 return FAT_DENTRY_SKIP;
    317         }
    318         if (d->name[0] == FAT_DENTRY_UNUSED) {
    319                 /* never used entry */
    320                 return FAT_DENTRY_LAST;
    321         }
    322         if (d->name[0] == FAT_DENTRY_DOT) {
    323                 /*
    324                  * Most likely '.' or '..'.
    325                  * It cannot occur in a regular file name.
    326                  */
    327                 return FAT_DENTRY_SKIP;
    328         }
    329         return FAT_DENTRY_VALID;
    330265}
    331266
Note: See TracChangeset for help on using the changeset viewer.